ใช้ App Check เพื่อรักษาความปลอดภัย Navigation SDK สำหรับ Android

Firebase App Check ช่วยปกป้องการเรียกใช้จากแอปของคุณไปยัง Google Maps Platform โดยการบล็อกการเข้าชมที่มาจากแหล่งที่มาอื่นที่ไม่ใช่แอปที่ถูกต้อง โดยจะขอการประเมินความถูกต้องของแอปหรืออุปกรณ์จากผู้ให้บริการรับรอง เช่น Play Integrity เมื่อผสานรวมแอปกับ App Check คุณจะเพิ่มการป้องกันคำขอที่เป็นอันตรายและไม่ได้รับอนุญาต ซึ่งจะช่วยปกป้องการเรียกเก็บเงินจากการเรียกเก็บเงินที่ไม่ได้รับอนุญาต นอกจากนี้ App Check ยังช่วยปรับปรุงการรายงานการหยุดชะงักแบบเรียลไทม์ในระบบนิเวศของแอป Fleet อย่างมาก ซึ่งจะเป็นประโยชน์ต่อคนขับทุกคนที่ใช้แอปของคุณ ดูข้อมูลเพิ่มเติมได้ที่การรายงานการหยุดชะงัก

เหตุใดจึงควรใช้ App Check

App Check ปกป้องพื้นที่ที่แตกต่างกัน 2 ส่วนของ Navigation SDK สำหรับ Android ได้แก่ ฟังก์ชันการนำทางหลักและการรายงานการหยุดชะงัก

App Check ช่วยบล็อกคำขอ Navigation SDK สำหรับ Android หลักจากแหล่งที่มาที่เป็นอันตรายหรือไม่ได้รับอนุญาต ซึ่งจะเป็นประโยชน์ต่อคุณโดยตรงด้วยการปกป้องโปรเจ็กต์จากการฉ้อโกงผ่านการเรียกเก็บเงินและการใช้โควต้าจนหมด

การรายงานการหยุดชะงัก

เราขอแนะนำให้ใช้ App Check หากแอปของคุณรองรับความสามารถในการรายงานการหยุดชะงักและการโหวตแบบเรียลไทม์ การเปิดใช้ App Check ช่วยให้คนขับได้รับเส้นทางที่แม่นยำที่สุดโดยพิจารณาจากความคิดเห็นแบบเรียลไทม์ทั้งหมด

เหตุผลที่ App Check มีความสำคัญต่อการรายงาน

  • เกณฑ์ความน่าเชื่อถือสูงสำหรับการปิดถนน: เหตุการณ์ที่ส่งผลต่อเส้นทาง เช่น การปิดถนน อาจเปลี่ยนแปลงลักษณะการกำหนดเส้นทางสำหรับผู้ขับขี่ทุกคนอย่างมาก โครงสร้างพื้นฐานการกลั่นกรองของ Google สำหรับการหยุดชะงักเนื่องจากการปิดถนนอาศัยสัญญาณความสมบูรณ์ของอุปกรณ์และแอปที่เข้มงวดเพื่อปกป้องแผนที่จากการทำลายข้อมูล สแปม หรือการรายงานที่ไม่ถูกต้องที่อาจเกิดขึ้น
  • วิธีที่ App Check ตรวจสอบรายงาน: รายงานและการโหวตของผู้ใช้ที่ส่งจาก Navigation SDK สำหรับ Android จะมีโทเค็น App Check ซึ่งแบ็กเอนด์ของ Google ใช้เพื่อตรวจสอบความถูกต้องของความคิดเห็น ซึ่งจะช่วยเพิ่มระดับความน่าเชื่อถือและช่วยให้ประเมินผลกระทบต่อแผนที่สดได้
  • ผลกระทบของการละเว้น App Check: รายงานที่ส่งโดยไม่มีโทเค็น App Check ที่ถูกต้องจะได้รับการประเมินภายใต้โมเดลที่มีความน่าเชื่อถือต่ำกว่า และอาจได้รับการประมวลผลเป็นสัญญาณแบบเงียบเท่านั้น ซึ่งหมายความว่าแม้ว่าผู้ใช้จะยังคงรายงานและโหวตได้ แต่รายงานของผู้ใช้มีแนวโน้มที่จะไม่ปรากฏบนแผนที่หรือส่งผลต่อเส้นทางของผู้ขับขี่รายอื่นๆ และจะต้องมีการตรวจสอบเพิ่มเติม

App Check เหมาะกับฉันไหม

เราขอแนะนำให้ใช้ App Check ในกรณีส่วนใหญ่ อย่างไรก็ตาม คุณไม่จำเป็นต้องใช้ App Check หรือระบบไม่รองรับ App Check ในสถานการณ์ต่อไปนี้

  • แอปส่วนตัวหรือแอปทดลอง: หากแอปของคุณไม่สามารถเข้าถึงได้แบบสาธารณะ ก็ไม่จำเป็นต้องใช้ App Check
  • อุปกรณ์ที่ถูกบุกรุก: ผู้ให้บริการเอกสารรับรองที่แนะนำจะป้องกันไม่ให้ Navigation SDK สำหรับ Android ทำงานในอุปกรณ์ที่ไม่น่าเชื่อถือ เช่น โทรศัพท์ที่รูทหรือเจลเบรคแล้ว หากต้องการรองรับอุปกรณ์เหล่านี้ ให้ติดตั้งใช้งานผู้ให้บริการเอกสารรับรองที่กำหนดเอง
  • อุปกรณ์ Android ที่ไม่ใช่ GMS: อุปกรณ์ Android ต้องใช้บริการของ Google Mobile (GMS) สำหรับ Play Integrity หากคุณวางแผนที่จะรองรับอุปกรณ์ Android ที่ไม่ใช่ GMS ให้ติดตั้งใช้งานผู้ให้บริการเอกสารรับรองที่กำหนดเอง

ภาพรวมของขั้นตอนการติดตั้งใช้งาน

โดยรวมแล้ว คุณจะต้องทำตามขั้นตอนต่อไปนี้เพื่อผสานรวมแอปกับ App Check

  1. เพิ่ม Firebase ไปยังแอปของคุณ
  2. เพิ่มไลบรารี App Check และเริ่มต้น App Check
  3. เพิ่มผู้ให้บริการโทเค็น ขั้นตอนนี้จะเรียกใช้ผู้ให้บริการเอกสารรับรองที่คุณเลือกเพื่อยืนยันความสมบูรณ์ของอุปกรณ์หรือแอป
  4. เริ่มต้น Navigation API และ App Check API
  5. เปิดใช้การแก้ไขข้อบกพร่อง ซึ่งจะเป็นประโยชน์ในระหว่างการพัฒนาหรือในสภาพแวดล้อมการรวมอย่างต่อเนื่อง (CI)
  6. ตรวจสอบคำขอแอปก่อนเปิดใช้การบังคับใช้ วิธีนี้จะช่วยให้คุณบังคับใช้ App Check ได้อย่างราบรื่นโดยไม่รบกวนผู้ใช้

ข้อควรพิจารณาเมื่อวางแผนการผสานรวม App Check

  • โควต้าของผู้ให้บริการเอกสารรับรอง: Play Integrity ซึ่งเป็นผู้ให้บริการเอกสารรับรองที่เราแนะนำมีขีดจำกัดการเรียกใช้รายวันสำหรับระดับการใช้งาน API มาตรฐาน ดูข้อมูลเพิ่มเติมเกี่ยวกับขีดจำกัดการเรียกใช้ได้ที่หน้าการตั้งค่าในเอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ Google Play Integrity
  • เวลาในการตอบสนองเมื่อเริ่มต้น: ในสถานการณ์ส่วนใหญ่ ผู้ใช้จะไม่พบเวลาในการตอบสนองระหว่างการใช้งานปกติ เนื่องจากระบบจะแคชโทเค็น App Check ไว้ในอุปกรณ์ ระบบจะรีเฟรชโทเค็น App Check ในเบื้องหลังโดยอัตโนมัติก่อนหมดอายุเพื่อรักษาประสิทธิภาพที่ราบรื่น อย่างไรก็ตาม หากไม่มีโทเค็น App Check ที่ถูกต้อง ผู้ใช้แอปจะพบเวลาในการตอบสนองเมื่อเริ่มต้นระบบ ตัวอย่างเช่น เวลาในการตอบสนองนี้จะเกิดขึ้นระหว่างการเริ่มระบบแบบ Cold Start เมื่อโทเค็นที่แคชไว้หมดอายุหรือหายไป
  • TTL ของโทเค็น: Time to Live (TTL) จะกำหนดระยะเวลาที่โทเค็น App Check มีผลก่อนที่จะต้องรีเฟรช คุณสามารถกำหนดค่าระยะเวลานี้ได้ตั้งแต่ 30 นาทีถึง 7 วันในคอนโซล Firebase เราขอแนะนำให้ใช้ระยะเวลา 1 ชั่วโมงเป็นเกณฑ์พื้นฐานที่ปลอดภัย แต่ SDK จะพยายามรีเฟรชในเบื้องหลังโดยอัตโนมัติที่ประมาณครึ่งหนึ่งของระยะเวลา TTL ดูวิธีการแบบทีละขั้นตอนในคอนโซลได้ที่เอกสารประกอบของ Firebase App Check

ผสานรวมแอปกับ App Check

ข้อกำหนดเบื้องต้นและข้อกำหนด

  • แอปที่ติดตั้ง Navigation SDK สำหรับ Android เวอร์ชัน 7.9 ขึ้นไป
  • ลายนิ้วมือของใบรับรอง SHA-256 ของแอป
  • ชื่อแพ็กเกจของแอป
  • คุณต้องเป็นเจ้าของแอปในคอนโซล Google Cloud
  • รหัสโปรเจ็กต์ของแอปจากคอนโซล Google Cloud

ขั้นตอนที่ 1: เพิ่ม Firebase ลงในแอป

ทำตามวิธีการในเอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์ Firebase เพื่อเพิ่ม Firebase ลงในแอป เพิ่มไฟล์ google-services.json ลงในไดเรกทอรีระดับแอปของโปรเจ็กต์

ขั้นตอนที่ 2: เพิ่มไลบรารี App Check และเริ่มต้น App Check

เพิ่มทรัพยากร Dependency ของ App Check ลงในไฟล์ build.gradle ของแอป

Groovy (build.gradle)

dependencies {
    // Import the Firebase BoM
    implementation platform('com.google.firebase:firebase-bom:34.17.0')
    // Add the dependency for the App Check library with Play Integrity
    implementation 'com.google.firebase:firebase-appcheck-playintegrity'
}

เริ่มต้น App Check ในคลาสแอปพลิเคชันหรือกิจกรรมหลัก โดยทำดังนี้

Java

import com.google.firebase.FirebaseApp;
import com.google.firebase.appcheck.FirebaseAppCheck;
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;

// Initialize Firebase App
FirebaseApp.initializeApp(/* context= */ this);

// Initialize App Check
FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance();
firebaseAppCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance());

Kotlin

import com.google.firebase.Firebase
import com.google.firebase.appcheck.appCheck
import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
import com.google.firebase.initialize

// Initialize Firebase App
Firebase.initialize(context = this)

// Initialize App Check
Firebase.appCheck.installAppCheckProviderFactory(
    PlayIntegrityAppCheckProviderFactory.getInstance(),
)

ขั้นตอนที่ 3: เพิ่มผู้ให้บริการโทเค็น

สร้างการใช้งานอินเทอร์เฟซ MapsAppCheckTokenProvider ผู้ให้บริการรายนี้จะดึงข้อมูลโทเค็น App Check จาก Firebase App Check แบบไม่พร้อมกัน และส่งโทเค็นเหล่านั้นไปยังสแต็กเครือข่าย Navigation SDK สำหรับ Android โดยใช้ MapsAppCheckTokenCallback

Java

import com.google.android.gms.maps.MapsAppCheckTokenCallback;
import com.google.android.gms.maps.MapsAppCheckTokenProvider;
import com.google.firebase.appcheck.FirebaseAppCheck;

public class NavigationTokenProvider implements MapsAppCheckTokenProvider {
  @Override
  public void fetchToken(MapsAppCheckTokenCallback callback) {
    FirebaseAppCheck.getInstance()
        .getAppCheckToken(false) // forcingRefresh = false
        .addOnSuccessListener(
            tokenResult -> {
              String token = tokenResult.getToken();
              callback.onSuccess(token);
            })
        .addOnFailureListener(
            e -> {
              callback.onFailure();
            });
  }
}

Kotlin

import com.google.android.gms.maps.MapsAppCheckTokenCallback
import com.google.android.gms.maps.MapsAppCheckTokenProvider
import com.google.firebase.appcheck.FirebaseAppCheck

class NavigationTokenProvider : MapsAppCheckTokenProvider {
    override fun fetchToken(callback: MapsAppCheckTokenCallback) {
        FirebaseAppCheck.getInstance()
            .getAppCheckToken(false)
            .addOnSuccessListener { tokenResult ->
                callback.onSuccess(tokenResult.token)
            }
            .addOnFailureListener {
                callback.onFailure()
            }
    }
}

ขั้นตอนที่ 4: เริ่มต้น Navigation API และ App Check API

เริ่มต้น Navigation SDK สำหรับ Android และลงทะเบียนอินสแตนซ์ผู้ให้บริการโทเค็นแบบรวมโดยใช้ MapsApiSettings.setAppCheckTokenProvider():

Java

import com.google.android.gms.maps.MapsApiSettings;

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, new NavigationTokenProvider());

Kotlin

import com.google.android.gms.maps.MapsApiSettings

// Register your App Check token provider before initializing Navigation SDK for Android
MapsApiSettings.setAppCheckTokenProvider(context, NavigationTokenProvider())

ขั้นตอนที่ 5: เปิดใช้การแก้ไขข้อบกพร่อง (ไม่บังคับ)

หลังจากบังคับใช้ App Check สำหรับ Navigation SDK สำหรับ Android แล้ว ฟีเจอร์ของแอปที่ขึ้นอยู่กับ Navigation SDK สำหรับ Android จะไม่ทำงานในเครื่องจำลองหรือจากสภาพแวดล้อมการรวมอย่างต่อเนื่อง (CI) เนื่องจากสภาพแวดล้อมเหล่านี้ไม่ถือว่าเป็นอุปกรณ์ที่ถูกต้อง หากต้องการเรียกใช้แอปในสภาพแวดล้อมเหล่านี้ระหว่างการพัฒนาและการทดสอบ คุณต้องสร้างบิลด์การแก้ไขข้อบกพร่องของแอปที่ใช้ผู้ให้บริการแก้ไขข้อบกพร่องของ App Check แทนผู้ให้บริการเอกสารรับรองเวอร์ชันที่ใช้งานจริง

  1. เพิ่มทรัพยากร Dependency ของผู้ให้บริการแก้ไขข้อบกพร่องลงในไฟล์ build.gradle ของแอป

    Groovy (build.gradle)

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug'
    }
  2. กำหนดค่า App Check ให้ใช้โรงงานผู้ให้บริการแก้ไขข้อบกพร่องในบิลด์การแก้ไขข้อบกพร่อง โดยทำดังนี้

    Java

    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory;
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory;
    
    if (BuildConfig.DEBUG) {
        firebaseAppCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance()
        );
    } else {
        firebaseAppCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance()
        );
    }

    Kotlin

    import com.google.firebase.Firebase
    import com.google.firebase.appcheck.appCheck
    import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory
    import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory
    
    if (BuildConfig.DEBUG) {
        Firebase.appCheck.installAppCheckProviderFactory(
            DebugAppCheckProviderFactory.getInstance(),
        )
    } else {
        Firebase.appCheck.installAppCheckProviderFactory(
            PlayIntegrityAppCheckProviderFactory.getInstance(),
        )
    }
  3. เปิดแอปในโปรแกรมจำลองหรืออุปกรณ์แก้ไขข้อบกพร่อง App Check จะพิมพ์โทเค็นการแก้ไขข้อบกพร่องในเครื่องไปยังเอาต์พุต logcat
  4. คัดลอกและลงทะเบียนโทเค็นการแก้ไขข้อบกพร่องนี้ในคอนโซล Firebase ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับผู้ให้บริการแก้ไขข้อบกพร่องของ Firebase App Check

ขั้นตอนที่ 6: ตรวจสอบคำขอของแอปและตัดสินใจเกี่ยวกับการบังคับใช้

ก่อนเปิดใช้การบังคับใช้ ให้ตรวจสอบคำขอของแอปเพื่อให้แน่ใจว่าคุณจะไม่รบกวนผู้ใช้ที่ถูกต้องตามกฎหมาย

  1. ไปที่หน้าจอเมตริก App Check ในคอนโซล Firebase เพื่อดูเปอร์เซ็นต์ของการเข้าชมที่ได้รับการยืนยันเทียบกับการเข้าชมที่ไม่ได้รับการยืนยัน
  2. เมื่อแน่ใจแล้วว่าการเข้าชมส่วนใหญ่ได้รับการยืนยันและผู้ใช้ที่ถูกต้องได้อัปเดตแอปเป็นเวอร์ชันที่มีการติดตั้งใช้งาน App Check แล้ว ให้เปิดใช้การบังคับใช้
  3. เมื่อเปิดใช้การบังคับใช้แล้ว App Check จะปฏิเสธการเข้าชมทั้งหมดที่ไม่มีโทเค็น App Check ที่ถูกต้อง