SafetyNet reCAPTCHA API

บริการ SafetyNet มี reCAPTCHA API ที่คุณใช้เพื่อปกป้องแอปจากปริมาณการเข้าชมที่เป็นอันตรายได้

reCAPTCHA เป็นบริการฟรีที่ใช้ระบบการประเมินความเสี่ยงขั้นสูงเพื่อปกป้องแอปของคุณจากสแปมและการกระทำที่เป็นการละเมิดอื่นๆ หากระบบสงสัยว่าผู้ใช้ที่โต้ตอบกับแอปของคุณอาจเป็นบ็อตแทนที่จะเป็นมนุษย์ ระบบจะแสดง CAPTCHA ที่มนุษย์ต้องแก้ก่อนที่แอปจะดำเนินการต่อได้

เอกสารนี้อธิบายวิธีผสานรวม reCAPTCHA API จาก SafetyNet เข้ากับแอป

ข้อกำหนดในการให้บริการเพิ่มเติม

การเข้าถึงหรือใช้ reCAPTCHA API จะถือว่าคุณยอมรับข้อกำหนดในการให้บริการของ Google APIs และข้อกำหนดในการให้บริการของ reCAPTCHA ต่อไปนี้ โปรดอ่านและทำความเข้าใจข้อกำหนดและนโยบายที่เกี่ยวข้องทั้งหมดก่อนเข้าถึง API

ข้อกำหนดในการให้บริการของ reCAPTCHA

คุณรับทราบและเข้าใจว่า reCAPTCHA API ทำงานโดยรวบรวมข้อมูลฮาร์ดแวร์และซอฟต์แวร์ เช่น ข้อมูลอุปกรณ์และแอปพลิเคชัน รวมถึงผลการตรวจสอบความสมบูรณ์ แล้วส่งข้อมูลดังกล่าวไปให้ Google วิเคราะห์ ตามส่วนที่ 3(ง) ของข้อกำหนดในการให้บริการของ Google APIs คุณยอมรับว่าหากคุณใช้ API ดังกล่าวก็จะต้องรับผิดชอบในการแจ้งเตือนหรือให้ความยินยอมที่จำเป็นในการรวบรวมและแชร์ข้อมูลนี้กับ Google

ลงทะเบียนคีย์คู่ reCAPTCHA

หากต้องการลงทะเบียนคีย์คู่เพื่อใช้กับ SafetyNet reCAPTCHA API ให้ไปที่ เว็บไซต์ลงชื่อสมัครใช้ reCAPTCHA Android, แล้วทำตามขั้นตอนต่อไปนี้

  1. กรอกข้อมูลต่อไปนี้ในแบบฟอร์มที่ปรากฏขึ้น

    • ป้ายกำกับ: ป้ายกำกับที่ไม่ซ้ำกันสำหรับคีย์ โดยทั่วไปคุณจะใช้ชื่อบริษัทหรือองค์กร
    • ประเภท reCAPTCHA: เลือก reCAPTCHA v2 แล้วเลือก reCAPTCHA Android
    • แพ็กเกจ: ระบุชื่อแพ็กเกจของแต่ละแอปที่ใช้คีย์ API นี้ แอปจะใช้ API ได้ก็ต่อเมื่อชื่อแพ็กเกจที่คุณป้อนตรงกับชื่อแพ็กเกจของแอปทุกประการ ป้อนชื่อแพ็กเกจแต่ละรายการในบรรทัดของตัวเอง
    • เจ้าของ: เพิ่มอีเมลของแต่ละบุคคลในองค์กรที่ตรวจสอบการประเมิน reCAPTCHA ของแอป
  2. เลือกช่องทำเครื่องหมายยอมรับข้อกำหนดในการให้บริการของ reCAPTCHA

  3. ส่งการแจ้งเตือนไปยังเจ้าของ: เลือกช่องทำเครื่องหมายนี้หากต้องการรับ อีเมลเกี่ยวกับ reCAPTCHA API แล้วคลิก ส่ง

  4. ในหน้าถัดไป คีย์สาธารณะและคีย์ส่วนตัวจะปรากฏในส่วนคีย์เว็บไซต์ และคีย์ลับ ตามลำดับ คุณจะใช้คีย์เว็บไซต์เมื่อคุณส่งคำขอให้ยืนยัน และใช้คีย์ลับเมื่อคุณตรวจสอบ โทเค็นการตอบกลับของผู้ใช้

เพิ่มการพึ่งพา SafetyNet API

ก่อนใช้ reCAPTCHA API ให้เพิ่ม SafetyNet API ลงในโปรเจ็กต์ หากใช้ Android Studio ให้เพิ่มทรัพยากร Dependency นี้ลงในไฟล์ Gradle ระดับแอป ดูข้อมูลเพิ่มเติมได้ที่การตั้งค่า SafetyNet API

ใช้ reCAPTCHA API

ส่วนนี้อธิบายวิธีเรียก reCAPTCHA API เพื่อส่งคำขอให้ยืนยัน CAPTCHA และรับโทเค็นการตอบกลับของผู้ใช้

ส่งคำขอให้ยืนยัน

หากต้องการเรียกใช้ SafetyNet reCAPTCHA API ให้เรียกใช้ verifyWithRecaptcha() เมธอด โดยปกติแล้วเมธอดนี้จะสอดคล้องกับการเลือกองค์ประกอบ UI เช่น ปุ่ม ของผู้ใช้ในกิจกรรมของคุณ

เมื่อใช้เมธอด verifyWithRecaptcha() ในแอป คุณต้องทำดังนี้

  • ส่งคีย์เว็บไซต์ API เป็นพารามิเตอร์
  • ลบล้างเมธอด onSuccess() และ onFailure() เพื่อจัดการผลลัพธ์ที่เป็นไปได้ทั้ง 2 อย่างของงานคำขอให้ยืนยัน โดยเฉพาะอย่างยิ่ง หาก API ส่งอินสแตนซ์ของ ApiException ไปยัง onFailure(), คุณต้องจัดการรหัสสถานะที่เป็นไปได้แต่ละรายการที่ดึงข้อมูลได้โดยใช้ getStatusCode()

ข้อมูลโค้ดต่อไปนี้แสดงวิธีเรียกใช้เมธอดนี้

Kotlin

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}")
                }
            })
}

Java

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 ได้อย่างถูกต้อง คุณยังคงต้องตรวจสอบโทเค็นการตอบกลับของผู้ใช้จากเซิร์ฟเวอร์แบ็กเอนด์

ดูวิธีตรวจสอบโทเค็นการตอบกลับของผู้ใช้ได้ที่การยืนยันคำตอบของผู้ใช้