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

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