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

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