میانای برنامه‌سازی کاربردی SafetyNet reCAPTCHA

سرویس SafetyNet شامل یک reCAPTCHA API است که می‌توانید از آن برای محافظت از برنامه‌تان دربرابر ترافیک مخرب استفاده کنید.

reCAPTCHA سرویسی رایگان است که از موتور تحلیل خطر پیشرفته‌ای برای محافظت از برنامه‌تان دربرابر هرزنامه و دیگر کنش‌های سوءاستفاده‌گرانه استفاده می‌کند. اگر سرویس مشکوک شود که کاربری که با برنامه شما تعامل دارد ممکن است به‌جای انسان، روبات باشد، یک CAPTCHA ارائه می‌دهد که انسان باید آن را حل کند تا برنامه شما بتواند به اجرا ادامه دهد.

این سند نحوه ادغام کردن reCAPTCHA API از SafetyNet در برنامه را توضیح می‌دهد.

شرایط خدمات تکمیلی

با دسترسی به reCAPTCHA API یا استفاده از آن، با شرایط خدمات Google APIs و «شرایط خدمات reCAPTCHA» زیر موافقت می‌کنید. لطفاً قبل‌از دسترسی به میاناهای برنامه‌سازی کاربردی، همه شرایط و خط‌مشی‌های ذی‌ربط را بخوانید و درک کنید.

شرایط خدمات reCAPTCHA

شما تصدیق می‌کنید و متوجه هستید که reCAPTCHA API با جمع‌آوری اطلاعات سخت‌افزاری و نرم‌افزاری، مثل داده‌های دستگاه و برنامه و نتایج بررسی‌های یکپارچگی، و ارسال آن داده‌ها به Google برای تجزیه‌وتحلیل کار می‌کند. مطابق با «ماده ‎3(d)» از «شرایط خدمات Google APIs»، موافقت می‌کنید که اگر از میاناهای برنامه‌سازی کاربردی استفاده کنید، مسئولیت ارائه هرگونه اعلان یا رضایت ضروری برای جمع‌آوری و هم‌رسانی این داده‌ها با Google برعهده شما خواهد بود.

ثبت جفت کلید reCAPTCHA

برای ثبت جفت کلید برای استفاده با SafetyNet reCAPTCHA API، به سایت ثبت‌نام reCAPTCHA Android بروید، سپس مراحل زیر را به‌ترتیب تکمیل کنید:

  1. در فرمی که نشان داده می‌شود، اطلاعات زیر را ارائه دهید:

    • برچسب: برچسبی منحصربه‌فرد برای کلیدتان. معمولاً از نام شرکت یا سازمانتان استفاده می‌کنید.
    • نوع reCAPTCHA: reCAPTCHA نسخه ۲، سپس reCAPTCHA Android را انتخاب کنید.
    • بسته‌ها: نام بسته هر برنامه‌ای را که از این کلید API استفاده می‌کند ارائه دهید. برای اینکه برنامه بتواند از API استفاده کند، نام بسته‌ای که وارد می‌کنید باید دقیقاً با نام بسته برنامه مطابقت داشته باشد. نام هر بسته را در خط جداگانه‌ای وارد کنید.
    • مالکان: برای هر فرد در سازمانتان که ارزیابی‌های reCAPTCHA برنامه‌تان را پایش می‌کند، نشانی ایمیل اضافه کنید.
  2. چارگوش پذیرفتن شرایط خدمات reCAPTCHA را انتخاب کنید.

  3. ارسال هشدار به مالکان: اگر می‌خواهید ایمیل‌هایی درباره «میانای برنامه‌سازی کاربردی reCAPTCHA» دریافت کنید، این چارگوش انتخاب را انتخاب کنید، سپس روی ارسال کلیک کنید.

  4. در صفحه‌ای که بعداز آن ظاهر می‌شود، کلیدهای عمومی و خصوصی شما به‌ترتیب در زیر کلید سایت و کلید مخفی ظاهر می‌شوند. هنگام ارسال درخواست درستی‌سنجی از کلید سایت استفاده می‌کنید و هنگام اعتبارسنجی کردن کد پاسخ کاربر از کلید مخفی استفاده می‌کنید.

افزودن وابستگی SafetyNet API

قبل‌از استفاده از reCAPTCHA API،‏ SafetyNet API را به پروژه‌تان اضافه کنید. اگر از «استودیو Android» استفاده می‌کنید، این وابستگی را به فایل Gradle در سطح برنامه اضافه کنید. برای اطلاعات بیشتر، راه‌اندازی SafetyNet API را ببینید.

استفاده از reCAPTCHA API

این بخش نحوه فراخوانی reCAPTCHA API را برای ارسال درخواست درستی‌سنجی CAPTCHA و دریافت کد پاسخ کاربر شرح می‌دهد.

ارسال درخواست درستی‌سنجی

برای فراخوانی SafetyNet reCAPTCHA API، روش verifyWithRecaptcha() را فراخوانی می‌کنید. معمولاً این روش با انتخاب عنصر میانای کاربر توسط کاربر، مثل دکمه، در فعالیت شما مطابقت دارد.

هنگام استفاده از روش verifyWithRecaptcha() در برنامه‌تان، باید کارهای زیر را انجام دهید:

  • کلید سایت میانای برنامه‌سازی کاربردی خود را به‌عنوان پارامتر ارسال کنید.
  • روش‌های onSuccess() و onFailure() را لغو کنید تا هر دو نتیجه احتمالی تکلیف درخواست درستی‌سنجی را مدیریت کنید. به‌ویژه، اگر «میانای برنامه‌سازی کاربردی» نمونه‌ای از ApiException را به onFailure() منتقل کند، باید هر رمز وضعیت احتمالی را که می‌توانید بااستفاده از getStatusCode() بازیابی کنید، مدیریت کنید.

تکه‌کد زیر نحوه فراخوانی این روش را نشان می‌دهد:

کاتلین

fun onClick(view: View) {
    SafetyNet.getClient(this).verifyWithRecaptcha(YOUR_API_SITE_KEY)
            .addOnSuccessListener(this as Executor, OnSuccessListener { response ->
                // Indicates communication with reCAPTCHA service was
                // successful.
                val userResponseToken = response.tokenResult
                if (response.tokenResult?.isNotEmpty() == true) {
                    // Validate the user response token using the
                    // reCAPTCHA siteverify API.
                }
            })
            .addOnFailureListener(this as Executor, OnFailureListener { e ->
                if (e is ApiException) {
                    // 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}")
                }
            })
}

جاوا

public void onClick(View v) {
    SafetyNet.getClient(this).verifyWithRecaptcha(YOUR_API_SITE_KEY)
        .addOnSuccessListener((Executor) this,
            new OnSuccessListener<SafetyNetApi.RecaptchaTokenResponse>() {
                @Override
                public void onSuccess(SafetyNetApi.RecaptchaTokenResponse response) {
                    // Indicates communication with reCAPTCHA service was
                    // successful.
                    String userResponseToken = response.getTokenResult();
                    if (!userResponseToken.isEmpty()) {
                        // Validate the user response token using the
                        // reCAPTCHA siteverify API.
                    }
                }
        })
        .addOnFailureListener((Executor) this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    if (e instanceof ApiException) {
                        // An error occurred when communicating with the
                        // reCAPTCHA service. Refer to the status code to
                        // handle the error appropriately.
                        ApiException apiException = (ApiException) e;
                        int statusCode = 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 را به‌درستی حل کرده است. همچنان باید کد پاسخ کاربر را از سرور زیرینه خودتان اعتبارسنجی کنید.

برای آشنایی با نحوه اعتبارسنجی کد پاسخ کاربر، به درستی‌سنجی پاسخ کاربر مراجعه کنید.