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

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

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

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

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
  • อุปกรณ์ที่ถูกบุกรุก: ผู้ให้บริการยืนยันตัวตนที่เราแนะนำจะป้องกันไม่ให้ Navigation SDK สำหรับ Android ทำงานในอุปกรณ์ที่ไม่น่าเชื่อถือ เช่น โทรศัพท์ที่รูทหรือเจลเบรคแล้ว หากต้องการรองรับอุปกรณ์เหล่านี้ ให้ติดตั้งใช้งานผู้ให้บริการยืนยันตัวตนที่กำหนดเอง
  • อุปกรณ์ Android ที่ไม่ใช่ GMS: อุปกรณ์ Android ต้องใช้ Google Mobile Services (GMS) สำหรับ Play Integrity หากคุณวางแผนที่จะรองรับอุปกรณ์ Android ที่ไม่ใช่ GMS ให้ติดตั้งใช้งานผู้ให้บริการยืนยันตัวตนที่กำหนดเอง

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

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

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

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

  • โควต้าผู้ให้บริการยืนยันตัวตน: ผู้ให้บริการยืนยันตัวตนที่เราแนะนำ ซึ่งก็คือ Play Integrity มีขีดจำกัดการเรียกใช้รายวันสำหรับระดับการใช้งาน Standard API ดูข้อมูลเพิ่มเติมเกี่ยวกับขีดจำกัดการเรียกใช้ได้ที่หน้า การตั้งค่า ในเอกสารประกอบสำหรับนักพัฒนาแอป Google Play Integrity
  • เวลาในการเริ่มต้น: ในสถานการณ์ส่วนใหญ่ ผู้ใช้จะไม่พบความหน่วงระหว่างการใช้งานปกติ เนื่องจากระบบจะแคชโทเค็น App Check ไว้ในอุปกรณ์ ระบบจะรีเฟรชโทเค็น App Check โดยอัตโนมัติในเบื้องหลังก่อนที่โทเค็นจะหมดอายุ เพื่อรักษาประสิทธิภาพการทำงานที่ราบรื่น อย่างไรก็ตาม หากไม่มีโทเค็น App Check ที่ถูกต้อง ผู้ใช้แอปจะพบความหน่วงในการเริ่มต้น เช่น ความหน่วงนี้จะเกิดขึ้นระหว่างการเริ่มต้นแบบเย็นเมื่อโทเค็นที่แคชไว้หมดอายุหรือหายไป
  • 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 ในคลาส Application หรือกิจกรรมหลัก

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 และ 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 ให้ใช้ Factory ของผู้ให้บริการการแก้ไขข้อบกพร่องในบิลด์การแก้ไขข้อบกพร่อง

    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 ที่ถูกต้อง