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

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

เหตุใดจึงควรใช้ 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
  • อุปกรณ์ที่ถูกบุกรุก: ผู้ให้บริการการรับรองที่แนะนำจะป้องกันไม่ให้ 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 มีขีดจำกัดการเรียกใช้รายวันสำหรับระดับการใช้งาน 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: เริ่มต้นใช้งาน API การนำทางและ App Check

เริ่มต้น 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 ที่ถูกต้อง