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

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

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