亚洲国产爱久久全部精品_日韩有码在线播放_国产欧美在线观看_中文字幕不卡在线观看

在Android應用中使用Google reCAPTCHA含代碼

在Android應用中使用Google reCAPTCHA

在本教程中,我們將學習Google reCaptcha的工作流程,并將其集成到我們的Android應用中。愛掏網 - it200.comGoogle的reCaptcha可以保護我們的應用免受惡意流量的侵害。愛掏網 - it200.com它是使用SafetyNet API實現的。愛掏網 - it200.com

Google reCAPTCHA通過Android應用程序、SafetyNet服務器和您的服務器之間的網絡調用來進行驗證。愛掏網 - it200.com

  • Android應用程序使用 站點密鑰SafetyNet 服務器發出reCAPTCHA驗證請求。愛掏網 - it200.com
  • SafetyNet 服務器使用站點 密鑰 生成驗證碼令牌的響應,并將其發送給Android應用程序。愛掏網 - it200.com
  • 驗證碼令牌通過 密鑰 發送到您的服務器進行驗證。愛掏網 - it200.com
  • 您的Android服務器使用 SafetyNet 服務器發送請求,使用Secret 密鑰 驗證驗證碼令牌。愛掏網 - it200.com
  • SafetyNet 驗證令牌響應,并將結果返回為成功或失敗。愛掏網 - it200.com
  • 您的Android服務器通過驗證令牌將結果返回給Android應用程序,并返回結果為成功或失敗。愛掏網 - it200.com

生成reCAPTCHA網站密鑰和秘密密鑰:

在創建API密鑰之前,請仔細閱讀API服務條款 https://developers.google.com/terms/ 。愛掏網 - it200.com

  • 注冊Android reCAPTCHA網站 https://g.co/recaptcha/androidsignup 。愛掏網 - it200.com
  • 提供標簽、包名和接受reCAPTCHA條款和服務的輸入詳細信息。愛掏網 - it200.com

標簽 :這是您的密鑰的唯一標簽。愛掏網 - it200.com您可以使用您公司或組織的名稱。愛掏網 - it200.com 包名 :這是您的安卓應用程序的包名。愛掏網 - it200.com

  • 網站密鑰、密鑰、客戶端集成代碼和服務器端代碼在下一頁生成。愛掏網 - it200.com

Android集成Google reCAPTCHA示例

讓我們創建一個在Android應用程序中集成Google reCAPTCHA的示例。愛掏網 - it200.com

build.gradle

在build.gradle文件中添加以下SafetyNet和Volley依賴項。愛掏網 - it200.com

dependencies {
    implementation 'com.google.android.gms:play-services-safetynet:15.0.1'
    implementation 'com.android.volley:volley:1.0.0'
}

AndroidManifest.xml

在AndroidManifest.xml文件中添加互聯網權限

<uses-permission android:name="android.permission.INTERNET" />

activity_main.xml

將以下代碼添加到activity_main.xml文件中。愛掏網 - it200.com

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="example.javatpoint.com.googlerecaptcha.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="Google Recaptcha"
        android:textAppearance="@style/Base.TextAppearance.AppCompat.Large"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.436"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.017" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="52dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:text="Verify captcha"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</android.support.constraint.ConstraintLayout>

MainActivity.java

將以下代碼添加到MainActivity.java類文件中。愛掏網 - it200.com在這個類中,我們與SafetyNet服務器進行客戶端集成,并以JSON字符串形式獲取響應。愛掏網 - it200.com

將SITE_KEY和SECRET_KEY的值替換為您實際的Site Key和Secret Key。愛掏網 - it200.com點擊按鈕時,它調用SafetyNet.getClient()方法獲取Site Key,如果返回成功,則調用handleSiteVerify()進行令牌驗證。愛掏網 - it200.com

Volley庫用于以下目的:

  • Volley庫的RequestQueue維護了服務器調用隊列。愛掏網 - it200.com
  • StringRequest用于從您的服務器獲取響應的JSON字符串。愛掏網 - it200.com
  • setRetryPolicy()方法在時間限制內如果服務器調用失敗則重試。愛掏網 - it200.com
package example.javatpoint.com.googlerecaptcha;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.safetynet.SafetyNet;
import com.google.android.gms.safetynet.SafetyNetApi;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    String TAG = MainActivity.class.getSimpleName();
    Button btnverifyCaptcha;
    String SITE_KEY = "6LeaN24UAxxxxx_YOUR_SITE_KEY";
    String SECRET_KEY = "6LeaN24UAxxxxx_YOUR_SECRET_KEY";
    RequestQueue queue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnverifyCaptcha = findViewById(R.id.button);
        btnverifyCaptcha.setOnClickListener(this);

        queue = Volley.newRequestQueue(getApplicationContext());
    }

    @Override
    public void onClick(View view) {
        SafetyNet.getClient(this).verifyWithRecaptcha(SITE_KEY)
                .addOnSuccessListener(this, new OnSuccessListener<SafetyNetApi.RecaptchaTokenResponse>() {
                    @Override
                    public void onSuccess(SafetyNetApi.RecaptchaTokenResponse response) {
                        if (!response.getTokenResult().isEmpty()) {
                            handleSiteVerify(response.getTokenResult());
                        }
                    }
                })
                .addOnFailureListener(this, new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        if (e instanceof ApiException) {
                            ApiException apiException = (ApiException) e;
                            Log.d(TAG, "Error message: " +
                                    CommonStatusCodes.getStatusCodeString(apiException.getStatusCode()));
                        } else {
                            Log.d(TAG, "Unknown type of error: " + e.getMessage());
                        }
                    }
                });

    }
    protected  void handleSiteVerify(final String responseToken){
        //it is google recaptcha siteverify server
        //you can place your server url
        String url = "https://www.google.com/recaptcha/api/siteverify";
        StringRequest request = new StringRequest(Request.Method.POST, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            if(jsonObject.getBoolean("success")){
                                //code logic when captcha returns true Toast.makeText(getApplicationContext(),String.valueOf(jsonObject.getBoolean("success")),Toast.LENGTH_LONG).show();
                            }
                            else{
                                Toast.makeText(getApplicationContext(),String.valueOf(jsonObject.getString("error-codes")),Toast.LENGTH_LONG).show();
                            }
                        } catch (Exception ex) {
                            Log.d(TAG, "JSON exception: " + ex.getMessage());

                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.d(TAG, "Error message: " + error.getMessage());
                    }
                }) {
            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put("secret", SECRET_KEY);
                params.put("response", responseToken);
                return params;
            }
        };
        request.setRetryPolicy(new DefaultRetryPolicy(
                50000,
                DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        queue.add(request);
    }
}

輸出:

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

亚洲国产爱久久全部精品_日韩有码在线播放_国产欧美在线观看_中文字幕不卡在线观看

    
    

    国产精品你懂的在线欣赏| 99成人精品| 欧美日韩国语| 午夜视频精品| 亚洲精品一区在线观看| 国产精品主播| 欧美日韩精品久久| 欧美+日本+国产+在线a∨观看| 一本大道久久a久久综合婷婷| 韩国成人精品a∨在线观看| 欧美日本韩国一区| 男女av一区三区二区色多| 午夜影视日本亚洲欧洲精品| 一本大道久久a久久精二百| 亚洲高清视频在线观看| 狠狠色2019综合网| 国产乱码精品一区二区三区av| 欧美精品国产精品| 欧美大片免费久久精品三p| 久久激情综合网| 亚洲欧美日韩综合aⅴ视频| 一本一本久久| 99精品国产福利在线观看免费| 在线日本高清免费不卡| 国产欧美一区二区三区视频| 国产精品麻豆va在线播放| 国产精品福利在线| 欧美午夜激情小视频| 欧美日韩国产一中文字不卡| 欧美黄色免费| 欧美日韩精品免费在线观看视频| 免费观看成人鲁鲁鲁鲁鲁视频| 久久久国产亚洲精品| 欧美在线视频全部完| 久久久久久电影| 久久一区二区三区超碰国产精品| 久久久亚洲精品一区二区三区 | 欧美久久电影| 欧美片在线观看| 欧美日韩中字| 国产精品看片资源| 国产日韩欧美综合| 一区免费在线| 亚洲精品中文字幕在线| 一区二区三区 在线观看视频| 一区二区三区视频在线| 亚洲男人av电影| 欧美专区在线观看| 欧美成在线视频| 欧美视频一区二区三区…| 国产精品免费观看视频| 国内精品久久久久影院 日本资源| 国产三级欧美三级| 亚洲成在线观看| 夜夜躁日日躁狠狠久久88av| 午夜精品久久久久久久久 | 激情久久影院| 99国产精品一区| 欧美亚洲在线观看| 你懂的国产精品| 国产精品久久二区| 亚洲国产精品精华液2区45| 在线性视频日韩欧美| 久久久999成人| 欧美天堂亚洲电影院在线播放| 国产亚洲女人久久久久毛片| 亚洲精品国产精品国产自| 亚洲欧美日产图| 欧美精品免费视频| 激情五月婷婷综合| 一区二区三区欧美成人| 蜜臀av国产精品久久久久| 国产精品自拍小视频| 亚洲黑丝一区二区| 欧美专区18| 国产精品美女一区二区| 亚洲国产精品福利| 午夜天堂精品久久久久| 欧美日韩另类综合| 在线看视频不卡| 久久av在线看| 国产精品一区在线观看你懂的| 亚洲精品偷拍| 老司机久久99久久精品播放免费| 国产精品自拍小视频| 亚洲精品专区| 欧美日韩高清在线播放| 亚洲国产精品成人| 久久久精品国产一区二区三区| 国产精品入口日韩视频大尺度| 亚洲国产精品美女| 免费成人高清在线视频| 好看的av在线不卡观看| 久久精品国产2020观看福利| 国产精品久久久久久久浪潮网站| av不卡免费看| 欧美日韩久久精品| 亚洲国产99精品国自产| 久久精品国产v日韩v亚洲 | 日韩一级二级三级| 欧美高清不卡| 亚洲毛片在线观看.| 欧美aa国产视频| 亚洲国产高清一区| 久久综合狠狠综合久久激情| 国产精品日韩| 性欧美精品高清| 国产视频一区欧美| 久久婷婷国产综合精品青草| 在线免费观看一区二区三区| 老司机亚洲精品| 亚洲高清激情| 欧美大片免费| 99国产精品久久久久久久久久| 国产精品99免视看9| 亚洲视频一二三| 国产亚洲成av人在线观看导航| 久久精品日韩欧美| 国内精品一区二区三区| 久久深夜福利免费观看| 亚洲精选成人| 国产精品久久久一区二区| 亚洲在线电影| 国产日韩欧美二区| 久久久免费精品| 亚洲理伦在线| 国产精品免费在线 | 国产一区二区成人久久免费影院| 久久国产精品毛片| 亚洲精品国产日韩| 国产精品久久久爽爽爽麻豆色哟哟| 欧美在线观看视频一区二区| 亚洲国产精品成人va在线观看| 欧美日韩一区二区三区在线视频| 欧美亚洲综合网| 亚洲国产精品久久久| 欧美日韩午夜在线| 久久久777| 亚洲视频香蕉人妖| 国产亚洲成av人片在线观看桃 | 免费久久99精品国产| 中文日韩在线视频| 亚洲福利一区| 国产欧美91| 欧美日韩你懂的| 老司机67194精品线观看| 亚洲欧美在线免费观看| 91久久久久久| 精品91免费| 国产伦精品一区二区三区四区免费| 欧美岛国激情| 模特精品在线| 久久久99久久精品女同性| 亚洲一级黄色片| 妖精视频成人观看www| 亚洲欧洲日夜超级视频| 亚洲国产成人精品久久久国产成人一区| 国产精品videosex极品| 欧美黄色免费| 免费久久99精品国产自| 老司机久久99久久精品播放免费| 欧美尤物一区| 欧美一级淫片aaaaaaa视频| 亚洲一区精品电影| 亚洲私人影院| 亚洲视频电影在线| 中日韩美女免费视频网站在线观看| 91久久亚洲| 亚洲精品美女在线| 日韩午夜电影| 亚洲精品婷婷| 夜夜嗨一区二区三区| 一区二区激情视频| 宅男噜噜噜66一区二区| 亚洲先锋成人| 亚洲综合不卡| 久久精品91久久香蕉加勒比| 久久国产毛片| 欧美gay视频激情| 欧美破处大片在线视频| 欧美体内谢she精2性欧美| 欧美午夜激情视频| 国产亚洲成av人片在线观看桃| 国内成+人亚洲| 亚洲国产欧美久久| 99视频在线观看一区三区| 亚洲一区二区精品| 亚洲欧美视频在线观看视频| 久久精品国产精品亚洲精品| 久久久综合激的五月天| 欧美国产日韩精品| 欧美日韩一区二区三区在线观看免| 国产精品久久久久久av福利软件| 国产精品久久午夜| 在线播放豆国产99亚洲| 一本色道久久精品| 久久精品人人| 欧美日韩中文字幕| 伊人一区二区三区久久精品| 亚洲精品在线三区|