ใช้ App Check เพื่อรักษาความปลอดภัยของ Navigation SDK สำหรับ iOS
Firebase App Check ช่วยปกป้องการเรียกจากแอปของคุณไปยัง Google Maps Platform โดยการบล็อกการเข้าชมที่มาจากแหล่งอื่นที่ไม่ใช่แอปที่ถูกต้อง โดยจะดำเนินการนี้ด้วยการขอให้ผู้ให้บริการรับรอง เช่น App Attest ประเมินความถูกต้องของแอปหรืออุปกรณ์ เมื่อผสานรวมแอปกับ App Check คุณจะเพิ่มการป้องกันคำขอที่เป็นอันตรายและไม่ได้รับอนุญาต ซึ่งจะช่วยปกป้องการเรียกเก็บเงินจากการเรียกเก็บเงินที่ไม่ได้รับอนุญาต นอกจากนี้ App Check ยังช่วยปรับปรุงการรายงานการหยุดชะงักแบบเรียลไทม์ในระบบนิเวศของแอปสำหรับกลุ่มยานพาหนะได้อย่างมาก ซึ่งจะเป็นประโยชน์ต่อคนขับทุกคนที่ใช้แอปของคุณ ดูข้อมูลเพิ่มเติมได้ที่การรายงานการหยุดชะงัก
เหตุใดจึงควรใช้ App Check
App Check ปกป้อง 2 ส่วนที่แตกต่างกันของ Navigation SDK สำหรับ iOS ได้แก่ ฟังก์ชันการนำทางหลักและการรายงานการหยุดชะงัก
การนำทาง
App Check ช่วยบล็อกคำขอ Navigation SDK หลักสำหรับ iOS จากแหล่งที่มาที่เป็นอันตรายหรือไม่ได้รับอนุญาต ซึ่งจะเป็นประโยชน์ต่อคุณโดยตรงด้วยการปกป้องโปรเจ็กต์จากการเรียกเก็บเงินที่ไม่ถูกต้องและการใช้โควต้าจนหมด
การรายงานการหยุดชะงัก
เราขอแนะนำให้ใช้ App Check หากแอปของคุณรองรับความสามารถในการรายงานและการโหวตการหยุดชะงักแบบเรียลไทม์ การเปิดใช้ App Check จะช่วยให้มั่นใจได้ว่าคนขับจะได้รับเส้นทางที่แม่นยำที่สุดซึ่งพิจารณาจากความคิดเห็นแบบเรียลไทม์ทั้งหมด
เหตุผลที่ App Check มีความสำคัญต่อการรายงาน
- เกณฑ์ความน่าเชื่อถือสูงสำหรับการปิดถนน: เหตุการณ์ที่ส่งผลต่อเส้นทาง เช่น การปิดถนน อาจเปลี่ยนลักษณะการกำหนดเส้นทางสำหรับผู้ขับขี่ทั้งหมดได้อย่างมาก โครงสร้างพื้นฐานในการกลั่นกรองของ Google สำหรับการหยุดชะงักเนื่องจากการปิดถนนอาศัยสัญญาณความสมบูรณ์ของอุปกรณ์และแอปที่แข็งแกร่งเพื่อปกป้องแผนที่จากการก่อกวน สแปม หรือการรายงานที่ไม่ถูกต้องที่อาจเกิดขึ้น
- วิธีที่ App Check ตรวจสอบรายงาน: รายงานและคะแนนของผู้ใช้ที่ส่งจาก Navigation SDK สำหรับ iOS จะมีโทเค็น App Check ซึ่งแบ็กเอนด์ของ Google ใช้เพื่อตรวจสอบความถูกต้องของความคิดเห็น ซึ่งจะเพิ่มระดับความน่าเชื่อถือและทำให้สามารถประเมินผลกระทบต่อแผนที่สดได้
- ผลกระทบของการละเว้น App Check: รายงานที่ส่งโดยไม่มีโทเค็น App Check ที่ถูกต้องจะได้รับการประเมินภายใต้โมเดลที่มีความน่าเชื่อถือต่ำกว่า และอาจได้รับการประมวลผลเป็นสัญญาณเงียบเท่านั้น ซึ่งหมายความว่าแม้ผู้ใช้จะยังคงรายงานและโหวตได้ แต่รายงานของผู้ใช้มีแนวโน้มที่จะมองเห็นได้น้อยลงบนแผนที่ หรือส่งผลต่อเส้นทางของผู้ขับขี่รายอื่นๆ และจะต้องมีการตรวจสอบเพิ่มเติม
App Check เหมาะกับฉันไหม
เราขอแนะนำให้ใช้ App Check ในกรณีส่วนใหญ่ แต่ไม่จำเป็นต้องใช้หรือระบบไม่รองรับ App Check ในสถานการณ์ต่อไปนี้
- แอปส่วนตัวหรือแอปทดลอง: หากแอปของคุณไม่สามารถเข้าถึงได้แบบสาธารณะ ก็ไม่จำเป็นต้องใช้ App Check
- อุปกรณ์ที่ถูกบุกรุก: ผู้ให้บริการการรับรองที่แนะนำจะป้องกันไม่ให้ Navigation SDK สำหรับ iOS ทำงานในอุปกรณ์ที่ไม่น่าเชื่อถือ เช่น โทรศัพท์ที่รูทหรือเจลเบรกแล้ว หากต้องการรองรับอุปกรณ์เหล่านี้ ให้ติดตั้งใช้งานผู้ให้บริการการรับรองที่กำหนดเอง
ภาพรวมของขั้นตอนการติดตั้งใช้งาน
ในระดับสูง คุณจะต้องทำตามขั้นตอนต่อไปนี้เพื่อผสานรวมแอปกับ App Check
- เพิ่ม Firebase ไปยังแอป
- เพิ่มไลบรารี App Check และเริ่มต้น App Check
- เพิ่มผู้ให้บริการโทเค็น ขั้นตอนนี้จะเรียกผู้ให้บริการการรับรองที่คุณเลือกเพื่อยืนยันความสมบูรณ์ของอุปกรณ์หรือแอป
- เริ่มต้นใช้งาน Navigation API และ App Check API
- เปิดใช้การแก้ไขข้อบกพร่อง ซึ่งจะเป็นประโยชน์ในระหว่างการพัฒนาหรือในสภาพแวดล้อมการรวมอย่างต่อเนื่อง (CI)
- ตรวจสอบคำขอของแอปก่อนเปิดใช้การบังคับใช้ วิธีนี้จะช่วยให้คุณบังคับใช้ App Check ได้อย่างราบรื่นโดยไม่รบกวนผู้ใช้
ข้อควรพิจารณาเมื่อวางแผนการผสานรวม App Check
- โควต้าผู้ให้บริการการรับรอง: ผู้ให้บริการการรับรองที่เราแนะนำอย่าง DeviceCheck หรือ App Attest จะขึ้นอยู่กับโควต้าและข้อจำกัดที่ Apple กำหนด
- เวลาในการตอบสนองเมื่อเริ่มต้น: ในกรณีส่วนใหญ่ ผู้ใช้จะไม่พบเวลาในการตอบสนองระหว่างการใช้งานปกติ เนื่องจากโทเค็น 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 สำหรับ iOS เวอร์ชัน 11.0 ขึ้นไป
- รหัสชุดของแอป
- รหัสทีมจากแท็บการเป็นสมาชิกในคอนโซลนักพัฒนาแอปของ Apple
- หากคุณวางแผนที่จะใช้ DeviceCheck คุณจะต้องมีไฟล์คีย์ส่วนตัวและรหัสคีย์
- คุณต้องเป็นเจ้าของแอปในคอนโซล Google Cloud
- รหัสโปรเจ็กต์ของแอปจากคอนโซล Google Cloud
ขั้นตอนที่ 1: เพิ่ม Firebase ไปยังแอป
ทําตามวิธีการในเอกสารประกอบสําหรับนักพัฒนาแอป Firebase เพื่อเพิ่ม Firebase ลงในแอป เพิ่มไฟล์ GoogleService-Info.plist โดยไม่ต้องแก้ไขลงในระดับรูทของโปรเจ็กต์
ในไฟล์ AppDelegate ให้นำเข้าโมดูลต่อไปนี้
Swift
import FirebaseCore import FirebaseAppCheck import GoogleNavigation
Objective-C
@import FirebaseCore; @import FirebaseAppCheck; @import GoogleNavigation;
ขั้นตอนที่ 2: เพิ่มไลบรารี App Check และเริ่มต้น App Check
Firebase มีวิธีการสำหรับผู้ให้บริการการรับรองเริ่มต้นแต่ละราย วิธีการเหล่านี้จะแสดงวิธีตั้งค่าโปรเจ็กต์ Firebase และเพิ่มไลบรารี App Check ลงในแอป ทำตามตัวอย่างโค้ดที่ให้ไว้เพื่อเริ่มต้น App Check
- ทําตามวิธีการของ Firebase เพื่อเพิ่มไลบรารี App Check ดังนี้
- เริ่มต้น App Check ใน
AppDelegateโดยทำดังนี้- หากคุณใช้ App Attest ให้สร้างการติดตั้งใช้งาน
AppCheckProviderFactoryและลงทะเบียนก่อนเรียกใช้FirebaseApp.configure()โดยทำดังนี้Swift
class YourAppCheckProviderFactory: NSObject, AppCheckProviderFactory { func createProvider(with app: FirebaseApp) -> AppCheckProvider? { return AppAttestProvider(app: app) } } // In application(_:didFinishLaunchingWithOptions:) let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory) FirebaseApp.configure()
Objective-C
#import <FirebaseCore/FirebaseCore.h> #import <FirebaseAppCheck/FirebaseAppCheck.h> @interface YourAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory> @end @implementation YourAppCheckProviderFactory - (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app { return [[FIRAppAttestProvider alloc] initWithApp:app]; } @end // In application:didFinishLaunchingWithOptions: YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory]; [FIRApp configure];
- หากใช้ DeviceCheck แทน ให้ตั้งค่า Factory โดยใช้ข้อมูลต่อไปนี้
Swift
AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())
Objective-C
FIRDeviceCheckProviderFactory *providerFactory = [[FIRDeviceCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory];
- หากคุณใช้ App Attest ให้สร้างการติดตั้งใช้งาน
ขั้นตอนที่ 3: เพิ่มผู้ให้บริการโทเค็น
สร้างไฟล์ชื่อ AppCheckTokenProvider (หรือหากใช้ Objective-C ให้สร้าง 2 ไฟล์ชื่อ AppCheckTokenProvider.h และ AppCheckTokenProvider.m) ที่ระดับรูทของแอป
คลาสนี้ต้องเป็นไปตามโปรโตคอล GMSAppCheckTokenProvider และติดตั้งเมธอด fetchAppCheckTokenWithCompletion
Swift
import Foundation import FirebaseAppCheck import GoogleNavigation class AppCheckTokenProvider: NSObject, GMSAppCheckTokenProvider { func fetchAppCheckToken(completion: @escaping (String?, Error?) -> Void) { AppCheck.appCheck().token(forcingRefresh: false) { token, error in if let error = error { print("App Check Error: \(error)") completion(nil, error) return } guard let token = token else { completion(nil, NSError(domain: "AppCheck", code: -1, userInfo: [NSLocalizedDescriptionKey: "Token is nil"])) return } print("App Check Token: \(token.token)") completion(token.token, nil) } } }
Objective-C
// AppCheckTokenProvider.h #import <Foundation/Foundation.h> #import <GoogleNavigation/GoogleNavigation.h> NS_ASSUME_NONNULL_BEGIN @interface AppCheckTokenProvider : NSObject <GMSAppCheckTokenProvider> @end NS_ASSUME_NONNULL_END
// AppCheckTokenProvider.m #import "AppCheckTokenProvider.h" #import <FirebaseAppCheck/FirebaseAppCheck.h> @implementation AppCheckTokenProvider - (void)fetchAppCheckTokenWithCompletion:(void (^)(NSString * _Nullable token, NSError * _Nullable error))completion { [[FIRAppCheck appCheck] tokenForcingRefresh:NO completion:^(FIRAppCheckToken * _Nullable token, NSError * _Nullable error) { if (token) { completion(token.token, nil); } else { completion(nil, error); } }]; } @end
ขั้นตอนที่ 4: เริ่มต้นใช้งาน API การนำทางและ App Check
เริ่มต้น Navigation SDK สำหรับ iOS และลงทะเบียนอินสแตนซ์ผู้ให้บริการโทเค็นใน GMSServices
Swift
// In application(_:didFinishLaunchingWithOptions:) GMSServices.provideAPIKey("YOUR_API_KEY") // Register your App Check token provider before initializing Navigation SDK for iOS GMSServices.appCheckTokenProvider = AppCheckTokenProvider()
Objective-C
// In application:didFinishLaunchingWithOptions: [GMSServices provideAPIKey:@"YOUR_API_KEY"]; // Register your App Check token provider before initializing Navigation SDK for iOS GMSServices.appCheckTokenProvider = [[AppCheckTokenProvider alloc] init];
ขั้นตอนที่ 5: เปิดใช้การแก้ไขข้อบกพร่อง (ไม่บังคับ)
หลังจากบังคับใช้ App Check สำหรับ Navigation SDK สำหรับ iOS แล้ว ฟีเจอร์ของแอปที่ขึ้นอยู่กับ Navigation SDK สำหรับ iOS จะไม่ทำงานในโปรแกรมจำลองหรือจากสภาพแวดล้อมการผสานรวมอย่างต่อเนื่อง (CI) เนื่องจากสภาพแวดล้อมเหล่านี้ไม่ถือเป็นอุปกรณ์ที่ถูกต้อง หากต้องการเรียกใช้แอปในสภาพแวดล้อมเหล่านี้ระหว่างการพัฒนาและการทดสอบ คุณต้องสร้างบิลด์การแก้ไขข้อบกพร่องของแอปที่ใช้ผู้ให้บริการแก้ไขข้อบกพร่องของ App Check แทนผู้ให้บริการการรับรองเวอร์ชันที่ใช้งานจริง
- กำหนดค่าโรงงานผู้ให้บริการแก้ไขข้อบกพร่องใน
AppDelegateดังนี้Swift
#if targetEnvironment(simulator) let providerFactory = AppCheckDebugProviderFactory() #else let providerFactory = YourAppCheckProviderFactory() #endif AppCheck.setAppCheckProviderFactory(providerFactory)
Objective-C
#if TARGET_OS_SIMULATOR id<FIRAppCheckProviderFactory> providerFactory = [[FIRAppCheckDebugProviderFactory alloc] init]; #else id<FIRAppCheckProviderFactory> providerFactory = [[YourAppCheckProviderFactory alloc] init]; #endif [FIRAppCheck setAppCheckProviderFactory:providerFactory];
- เปิดใช้การบันทึกในโปรเจ็กต์ Xcode เปิดแอป และค้นหาโทเค็นการแก้ไขข้อบกพร่องในเครื่องในบันทึกคอนโซล
- คัดลอกและเพิ่มโทเค็นการแก้ไขข้อบกพร่องนี้ลงในคอนโซล Firebase ดูรายละเอียดเพิ่มเติมได้ในเอกสารประกอบของผู้ให้บริการแก้ไขข้อบกพร่องของ Firebase App Check
ขั้นตอนที่ 6: ตรวจสอบคำขอของแอปและตัดสินใจเกี่ยวกับการบังคับใช้
ก่อนเปิดใช้การบังคับใช้ ให้ตรวจสอบคำขอของแอปเพื่อให้แน่ใจว่าคุณจะไม่รบกวนผู้ใช้ที่ถูกต้อง
- ไปที่หน้าจอเมตริก App Check ในคอนโซล Firebase เพื่อดูเปอร์เซ็นต์ของการเข้าชมที่ยืนยันแล้วเทียบกับการเข้าชมที่ยังไม่ได้ยืนยัน
- เมื่อแน่ใจว่าการเข้าชมส่วนใหญ่ได้รับการยืนยันแล้ว และผู้ใช้ที่ถูกต้องได้อัปเดตแอปเป็นเวอร์ชันที่มีการติดตั้งใช้งาน App Check แล้ว ให้เปิดใช้การบังคับใช้
- เมื่อเปิดการบังคับใช้แล้ว App Check จะปฏิเสธการเข้าชมทั้งหมดที่ไม่มีโทเค็น App Check ที่ถูกต้อง