import
android.os.Bundle;
import
android.util.Log;
import
android.view.View;
import
android.widget.Button;
import
android.widget.Toast;
import
androidx.annotation.NonNull;
import
androidx.appcompat.app.AppCompatActivity;
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 {
Button btnverifyCaptcha;
String SITE_KEY =
"Enter Your Site Key Here"
;
String SECRET_KEY =
"Enter Your Secret Key Here"
;
RequestQueue queue;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
queue = Volley.newRequestQueue(getApplicationContext());
btnverifyCaptcha = findViewById(R.id.button);
btnverifyCaptcha.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View v) {
verifyGoogleReCAPTCHA();
}
});
}
private
void
verifyGoogleReCAPTCHA() {
SafetyNet.getClient(
this
).verifyWithRecaptcha(SITE_KEY)
.addOnSuccessListener(
this
,
new
OnSuccessListener<SafetyNetApi.RecaptchaTokenResponse>() {
@Override
public
void
onSuccess(SafetyNetApi.RecaptchaTokenResponse response) {
if
(!response.getTokenResult().isEmpty()) {
handleVerification(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
{
Toast.makeText(MainActivity.
this
,
"Error found is : "
+ e, Toast.LENGTH_SHORT).show();
}
}
});
}
protected
void
handleVerification(
final
String responseToken) {
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"
)) {
Toast.makeText(MainActivity.
this
,
"User verified with reCAPTCHA"
, Toast.LENGTH_SHORT).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);
}
}