با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
سرویس SafetyNet شامل یک reCAPTCHA API است که می توانید از آن برای محافظت از برنامه خود در برابر ترافیک مخرب استفاده کنید.
reCAPTCHA یک سرویس رایگان است که از یک موتور تجزیه و تحلیل ریسک پیشرفته برای محافظت از برنامه شما در برابر هرزنامه و سایر اقدامات سوء استفاده می کند. اگر سرویس مشکوک باشد که کاربر در حال تعامل با برنامه شما ممکن است به جای انسان یک ربات باشد، یک CAPTCHA ارائه می دهد که یک انسان باید قبل از ادامه اجرای برنامه شما آن را حل کند.
این سند نحوه ادغام reCAPTCHA API از SafetyNet را در برنامه خود توضیح می دهد.
شرایط اضافی خدمات
با دسترسی یا استفاده از reCAPTCHA API، با شرایط خدمات Google APIs و شرایط خدمات reCAPTCHA زیر موافقت می کنید. لطفاً قبل از دسترسی به APIها، همه شرایط و خط مشی های قابل اجرا را بخوانید و درک کنید.
شرایط خدمات reCAPTCHA
میدانید و میدانید که reCAPTCHA API با جمعآوری اطلاعات سختافزار و نرمافزار، مانند دادههای دستگاه و برنامه و نتایج بررسیهای یکپارچگی، و ارسال آن دادهها به Google برای تجزیه و تحلیل، کار میکند. طبق بخش 3(d) شرایط خدمات Google APIs، شما موافقت میکنید که در صورت استفاده از APIها، مسئولیت ارائه هرگونه اعلامیه یا رضایت لازم برای جمعآوری و اشتراکگذاری این دادهها با Google بر عهده شماست.
یک جفت کلید reCAPTCHA را ثبت کنید
برای ثبت یک جفت کلید برای استفاده با SafetyNet reCAPTCHA API، به سایت ثبت نام reCAPTCHA Android بروید، سپس مراحل زیر را تکمیل کنید:
در فرم ظاهر شده، اطلاعات زیر را ارائه دهید:
برچسب: یک برچسب منحصر به فرد برای کلید شما. به طور معمول، شما از نام شرکت یا سازمان خود استفاده می کنید.
نوع reCAPTCHA:reCAPTCHA v2 و سپس reCAPTCHA Android را انتخاب کنید.
بسته ها: نام بسته هر برنامه ای را که از این کلید API استفاده می کند، ارائه دهید. برای اینکه یک برنامه بتواند از API استفاده کند، نام بسته ای که وارد می کنید باید دقیقاً با نام بسته برنامه مطابقت داشته باشد. نام هر بسته را در خط خودش وارد کنید.
مالکان: برای هر فردی در سازمانتان که ارزیابیهای reCAPTCHA برنامه شما را نظارت میکند، یک آدرس ایمیل اضافه کنید.
تیک گزینه Accept the reCAPTCHA Terms of Service را انتخاب کنید.
ارسال هشدار به صاحبان: اگر میخواهید ایمیلهایی درباره reCAPTCHA API دریافت کنید، این کادر را انتخاب کنید، سپس روی ارسال کلیک کنید.
در صفحه ای که بعد ظاهر می شود، کلیدهای عمومی و خصوصی شما به ترتیب زیر کلید سایت و کلید مخفی ظاهر می شوند. هنگام ارسال درخواست تأیید از کلید سایت استفاده می کنید و زمانی که نشانه پاسخ کاربر را تأیید می کنید از کلید مخفی استفاده می کنید.
وابستگی SafetyNet API را اضافه کنید
قبل از استفاده از reCAPTCHA API، SafetyNet API را به پروژه خود اضافه کنید. اگر از Android Studio استفاده می کنید ، این وابستگی را به پرونده Gradle سطح برنامه خود اضافه کنید. برای اطلاعات بیشتر، تنظیمات SafetyNet API را ببینید.
از API recaptcha استفاده کنید
این بخش نحوه فراخوانی ReCAPTCHA API را برای ارسال درخواست تأیید CAPTCHA و دریافت رمز پاسخ کاربر توضیح میدهد.
درخواست تأیید را ارسال کنید
برای فراخوانی SafetyNet reCAPTCHA API، متد verifyWithRecaptcha() فراخوانی می کنید. معمولاً این روش با انتخاب کاربر یک عنصر رابط کاربری مانند یک دکمه در فعالیت شما مطابقت دارد.
هنگام استفاده از متد verifyWithRecaptcha() در برنامه خود، باید موارد زیر را انجام دهید:
کلید سایت API خود را به عنوان پارامتر ارسال کنید.
روشهای onSuccess() و onFailure() را نادیده بگیرید تا هر دو نتیجه احتمالی وظیفه درخواست تأیید را مدیریت کنید. به طور خاص، اگر API یک نمونه از ApiException به onFailure() ارسال کند، باید هر کد وضعیت ممکنی را که میتوانید با استفاده از getStatusCode() بازیابی کنید، مدیریت کنید.
قطعه کد زیر نحوه فراخوانی این متد را نشان می دهد:
کاتلین
funonClick(view:View){SafetyNet.getClient(this).verifyWithRecaptcha(YOUR_API_SITE_KEY).addOnSuccessListener(thisasExecutor,OnSuccessListener{response->// Indicates communication with reCAPTCHA service was// successful.valuserResponseToken=response.tokenResultif(response.tokenResult?.isNotEmpty()==true){// Validate the user response token using the// reCAPTCHA siteverify API.}}).addOnFailureListener(thisasExecutor,OnFailureListener{e->if(eisApiException){// An error occurred when communicating with the// reCAPTCHA service. Refer to the status code to// handle the error appropriately.Log.d(TAG,"Error: ${CommonStatusCodes.getStatusCodeString(e.statusCode)}")}else{// A different, unknown type of error occurred.Log.d(TAG,"Error: ${e.message}")}})}
جاوا
publicvoidonClick(Viewv){SafetyNet.getClient(this).verifyWithRecaptcha(YOUR_API_SITE_KEY).addOnSuccessListener((Executor)this,newOnSuccessListener<SafetyNetApi.RecaptchaTokenResponse>(){@OverridepublicvoidonSuccess(SafetyNetApi.RecaptchaTokenResponseresponse){// Indicates communication with reCAPTCHA service was// successful.StringuserResponseToken=response.getTokenResult();if(!userResponseToken.isEmpty()){// Validate the user response token using the// reCAPTCHA siteverify API.}}}).addOnFailureListener((Executor)this,newOnFailureListener(){@OverridepublicvoidonFailure(@NonNullExceptione){if(einstanceofApiException){// An error occurred when communicating with the// reCAPTCHA service. Refer to the status code to// handle the error appropriately.ApiExceptionapiException=(ApiException)e;intstatusCode=apiException.getStatusCode();Log.d(TAG,"Error: "+CommonStatusCodes.getStatusCodeString(statusCode));}else{// A different, unknown type of error occurred.Log.d(TAG,"Error: "+e.getMessage());}}});}
رمز پاسخ کاربر را تأیید کنید
هنگامی که ReCAPTCHA API متد onSuccess() را اجرا می کند، کاربر چالش CAPTCHA را با موفقیت به پایان رسانده است. با این حال، این روش فقط نشان می دهد که کاربر CAPTCHA را به درستی حل کرده است. هنوز باید رمز پاسخ کاربر را از سرور باطن خود تأیید کنید.
برای آشنایی با نحوه تأیید اعتبار رمز پاسخ کاربر، به تأیید پاسخ کاربر مراجعه کنید.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-08-30 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-08-30 بهوقت ساعت هماهنگ جهانی."],[],[],null,["| **Warning:** In order to help you safely grow your business, Google builds tools to protect your Android apps and games from abuse. We evolve these solutions as the abuse landscape changes. Delivering on this promise, Google is replacing the SafetyNet reCAPTCHA API with [reCAPTCHA](https://cloud.google.com/recaptcha/docs/instrument-android-apps). reCAPTCHA offers superior protection for mobile applications. We plan to gradually turn down the SafetyNet reCAPTCHA API starting in the third quarter of 2025. Details can be found in the [reCAPTCHA deprecation and shutdown policy](https://cloud.google.com/recaptcha/docs/deprecation-policy-mobile).\n\nThe SafetyNet service includes a reCAPTCHA API that you can use to protect your\napp from malicious traffic.\n\nreCAPTCHA is a free service that uses an advanced risk analysis engine to\nprotect your app from spam and other abusive actions. If the service suspects\nthat the user interacting with your app might be a bot instead of a human, it\nserves a CAPTCHA that a human must solve before your app can continue executing.\n| **Note:** In order to use this API, your app must set `minSdkVersion` to `14` or higher in the `AndroidManifest.xml` file.\n\nThis document explains how to integrate the reCAPTCHA API from SafetyNet into\nyour app.\n\nAdditional terms of service\n\nBy accessing or using the reCAPTCHA API, you agree to the [Google APIs Terms of\nService](https://developers.google.com/terms/) and to the following reCAPTCHA\nTerms of Service.\nPlease read and understand all applicable terms and policies before accessing\nthe APIs. \n\nreCAPTCHA Terms of Service You acknowledge and understand that the reCAPTCHA API works by collecting hardware and software information, such as device and application data and the results of integrity checks, and sending that data to Google for analysis. Pursuant to Section 3(d) of the Google APIs Terms of Service, you agree that if you use the APIs that it is your responsibility to provide any necessary notices or consents for the collection and sharing of this data with Google.\n\nRegister a reCAPTCHA key pair\n\nTo register a key pair for use with the SafetyNet reCAPTCHA API, navigate to the\n[reCAPTCHA Android signup site](https://www.google.com/recaptcha/admin/create),\nthen complete the following sequence of steps:\n\n1. In the form that appears, provide the following information:\n\n - **Label:** A unique label for your key. Typically, you use the name of your company or organization.\n - **reCAPTCHA type:** Select **reCAPTCHA v2** , then **reCAPTCHA Android**.\n - **Packages:** Provide the package name of each app that uses this API key. In order for an app to use the API, the package name that you enter must exactly match the app's package name. Enter each package name on its own line.\n - **Owners:** Add an email address for each individual in your organization who monitors your app's reCAPTCHA assessments.\n2. Select the **Accept the reCAPTCHA Terms of Service** checkbox.\n\n3. **Send alerts to owners:** Select this checkbox if you want to receive\n emails about the reCAPTCHA API, then click\n **Submit**.\n\n4. On the page that appears\n next, your public and private keys appear under **Site key** and **Secret\n key** , respectively. You use the site key when you [send the verify\n request](#send-request), and you use the secret key when you [validate the\n user response token](#validate-response).\n\nAdd the SafetyNet API dependency\n\nBefore using the reCAPTCHA API, add the SafetyNet API to your project.\nIf you are using Android Studio, add this dependency to your app-level Gradle\nfile. For more information, see [SafetyNet API setup](https://developer.android.com/training/safetynet#before-you-begin).\n\nUse the reCAPTCHA API\n\nThis section describes how to call the reCAPTCHA API to send a CAPTCHA\nverification request and receive the user response token.\n\nSend the verify request\n\nTo invoke the SafetyNet reCAPTCHA API, you call the\n[`verifyWithRecaptcha()`](https://developers.google.com/android/reference/com/google/android/gms/safetynet/SafetyNetClient.html#verifyWithRecaptcha(java.lang.String))\nmethod. Usually, this method corresponds to the user's selecting a UI element,\nsuch as a button, in your activity.\n\nWhen using the\n`verifyWithRecaptcha()`\nmethod in your app, you must do the following:\n\n- Pass in your API site key as a parameter.\n- Override the [`onSuccess()`](https://developers.google.com/android/reference/com/google/android/gms/tasks/OnSuccessListener.html#onSuccess(TResult)) and [`onFailure()`](https://developers.google.com/android/reference/com/google/android/gms/tasks/OnFailureListener.html#onFailure(java.lang.Exception)) methods to handle both possible outcomes of the verification request task. In particular, if the API passes an instance of [`ApiException`](https://developers.google.com/android/reference/com/google/android/gms/common/api/ApiException) into `onFailure()`, you need to handle each possible status code that you can retrieve using [`getStatusCode()`](https://developers.google.com/android/reference/com/google/android/gms/common/api/ApiException#getStatusCode()).\n\nThe following code snippet shows how to invoke this method: \n\nKotlin \n\n```kotlin\nfun onClick(view: View) {\n SafetyNet.getClient(this).verifyWithRecaptcha(YOUR_API_SITE_KEY)\n .addOnSuccessListener(this as Executor, OnSuccessListener { response -\u003e\n // Indicates communication with reCAPTCHA service was\n // successful.\n val userResponseToken = response.tokenResult\n if (response.tokenResult?.isNotEmpty() == true) {\n // Validate the user response token using the\n // https://developers.google.com/recaptcha/docs/verify.\n }\n })\n .addOnFailureListener(this as Executor, OnFailureListener { e -\u003e\n if (e is ApiException) {\n // An error occurred when communicating with the\n // reCAPTCHA service. https://developers.google.com/android/reference/com/google/android/gms/safetynet/SafetyNetStatusCodes to\n // handle the error appropriately.\n Log.d(TAG, \"Error: ${CommonStatusCodes.getStatusCodeString(e.statusCode)}\")\n } else {\n // A different, unknown type of error occurred.\n Log.d(TAG, \"Error: ${e.message}\")\n }\n })\n}\n```\n\nJava \n\n```java\npublic void onClick(View v) {\n SafetyNet.getClient(this).verifyWithRecaptcha(YOUR_API_SITE_KEY)\n .addOnSuccessListener((Executor) this,\n new OnSuccessListener\u003cSafetyNetApi.RecaptchaTokenResponse\u003e() {\n @Override\n public void onSuccess(SafetyNetApi.RecaptchaTokenResponse response) {\n // Indicates communication with reCAPTCHA service was\n // successful.\n String userResponseToken = response.getTokenResult();\n if (!userResponseToken.isEmpty()) {\n // Validate the user response token using the\n // https://developers.google.com/recaptcha/docs/verify.\n }\n }\n })\n .addOnFailureListener((Executor) this, new OnFailureListener() {\n @Override\n public void onFailure(@NonNull Exception e) {\n if (e instanceof ApiException) {\n // An error occurred when communicating with the\n // reCAPTCHA service. https://developers.google.com/android/reference/com/google/android/gms/safetynet/SafetyNetStatusCodes to\n // handle the error appropriately.\n ApiException apiException = (ApiException) e;\n int statusCode = apiException.getStatusCode();\n Log.d(TAG, \"Error: \" + CommonStatusCodes\n .getStatusCodeString(statusCode));\n } else {\n // A different, unknown type of error occurred.\n Log.d(TAG, \"Error: \" + e.getMessage());\n }\n }\n });\n}\n```\n\nValidate the user response token\n\nWhen the reCAPTCHA API executes the\n`onSuccess()`\nmethod, the user has successfully completed the CAPTCHA challenge. However, this\nmethod only indicates that the user has solved the CAPTCHA correctly. You still\nneed to validate the user's response token from your backend server.\n\nTo learn how to validate the user's response token, see [Verifying the user's\nresponse](https://developers.google.com/recaptcha/docs/verify)."]]