Menggunakan App Check untuk mengamankan Navigation SDK for iOS

Firebase App Check memberikan perlindungan untuk panggilan dari aplikasi Anda ke Google Maps Platform dengan memblokir traffic yang berasal dari sumber selain aplikasi Anda yang sah. Hal ini dilakukan dengan meminta evaluasi keaslian aplikasi atau perangkat dari penyedia pengesahan seperti App Attest. Saat mengintegrasikan aplikasi Anda dengan App Check, Anda menambahkan perlindungan terhadap permintaan berbahaya dan tidak sah, yang pada gilirannya melindungi penagihan Anda dari tagihan yang tidak sah. App Check juga meningkatkan kualitas pelaporan gangguan real-time secara signifikan dalam ekosistem aplikasi armada Anda, sehingga menguntungkan semua pengemudi yang menggunakan aplikasi Anda. Untuk mengetahui informasi selengkapnya, lihat Pelaporan gangguan.

Mengapa menggunakan App Check?

App Check melindungi dua area berbeda dari Navigation SDK for iOS: fungsi navigasi utama dan pelaporan gangguan.

App Check membantu memblokir permintaan Navigation SDK for iOS utama dari sumber yang berbahaya atau tidak sah. Hal ini secara langsung menguntungkan Anda dengan melindungi project Anda dari penipuan tagihan dan kehabisan kuota.

Pelaporan gangguan

App Check sangat direkomendasikan jika aplikasi Anda mendukung kemampuan pelaporan dan pemungutan suara gangguan secara real-time. Dengan mengaktifkan App Check, pengemudi Anda akan mendapatkan rute paling akurat yang memperhitungkan semua masukan real-time.

Alasan pentingnya App Check untuk pelaporan:

  • Bar kepercayaan tinggi untuk penutupan: Peristiwa yang memengaruhi rute, seperti penutupan jalan, dapat mengubah perilaku pemilihan rute secara signifikan untuk semua pengemudi. Untuk melindungi peta dari potensi vandalisme, spam, atau pelaporan yang tidak akurat, infrastruktur moderasi Google untuk gangguan penutupan jalan mengandalkan sinyal integritas aplikasi dan perangkat yang kuat.
  • Cara App Check memvalidasi laporan: Laporan dan suara pengguna yang dikirim dari Navigation SDK for iOS menyertakan token App Check, yang digunakan oleh backend Google untuk memvalidasi keabsahan masukan, sehingga meningkatkan tingkat kepercayaannya dan memungkinkan masukan tersebut dievaluasi untuk mengetahui dampaknya pada peta aktif.
  • Dampak penghapusan App Check: Laporan yang dikirimkan tanpa token App Check yang valid dievaluasi berdasarkan model yang kurang tepercaya dan dapat diproses hanya sebagai sinyal senyap. Artinya, meskipun pengguna Anda masih dapat melaporkan dan memberikan suara, laporan mereka cenderung tidak terlihat di peta atau memengaruhi rute pengemudi lain dan akan memerlukan validasi tambahan.

Apakah App Check cocok untuk saya?

App Check direkomendasikan dalam sebagian besar kasus; namun, App Check tidak diperlukan atau tidak didukung dalam skenario berikut:

  • Aplikasi pribadi atau eksperimental: Jika aplikasi Anda tidak dapat diakses secara publik, App Check tidak diperlukan.
  • Perangkat yang disusupi: Penyedia pengesahan yang direkomendasikan mencegah Navigation SDK for iOS berjalan di perangkat yang tidak tepercaya, seperti ponsel yang di-root atau di-jailbreak. Untuk mendukung perangkat ini, deploy penyedia pengesahan kustom.

Ringkasan langkah-langkah penerapan

Secara umum, Anda akan mengikuti langkah-langkah berikut untuk mengintegrasikan aplikasi dengan App Check:

  1. Tambahkan Firebase ke aplikasi Anda.
  2. Tambahkan library App Check dan lakukan inisialisasi App Check.
  3. Tambahkan penyedia token. Langkah ini memanggil penyedia pengesahan pilihan Anda untuk memverifikasi integritas perangkat atau aplikasi.
  4. Lakukan inisialisasi Navigation API dan App Check API.
  5. Aktifkan proses debug. Hal ini berguna selama pengembangan atau di lingkungan continuous integration (CI).
  6. Pantau permintaan aplikasi Anda sebelum mengaktifkan penerapan. Dengan begitu, Anda dapat menerapkan App Check dengan lancar tanpa mengganggu pengguna.

Pertimbangan saat merencanakan integrasi App Check

  • Kuota Penyedia Pengesahan: Penyedia pengesahan yang kami rekomendasikan, yaitu DeviceCheck atau App Attest, tunduk pada kuota dan batasan yang ditetapkan oleh Apple.
  • Latensi Startup: Dalam sebagian besar situasi, pengguna Anda tidak akan mengalami latensi selama penggunaan rutin, karena token App Check di-cache di perangkat. Sistem secara otomatis memperbarui token App Check di latar belakang sebelum masa berlakunya berakhir untuk mempertahankan performa yang lancar. Namun, jika token App Check yang valid tidak ada, pengguna aplikasi Anda akan mengalami beberapa latensi saat startup. Misalnya, latensi ini terjadi selama cold start saat token yang di-cache telah habis masa berlakunya atau tidak ada.
  • TTL token: Time to live (TTL) menentukan durasi token App Check berlaku sebelum perlu di-refresh. Anda dapat mengonfigurasi durasi ini dari 30 menit hingga 7 hari di Firebase console. Durasi 1 jam direkomendasikan sebagai dasar pengukuran yang aman, tetapi SDK akan otomatis mencoba refresh di latar belakang pada sekitar setengah durasi TTL. Untuk mengetahui petunjuk konsol langkah demi langkah, lihat dokumentasi Firebase App Check.

Mengintegrasikan aplikasi Anda dengan App Check

Prasyarat dan persyaratan

  • Aplikasi dengan Navigation SDK for iOS versi 11.0 atau yang lebih baru terinstal.
  • ID paket aplikasi.
  • ID Tim Anda dari tab Keanggotaan di konsol Apple Developer Anda.
  • Jika Anda berencana menggunakan DeviceCheck, file kunci pribadi dan ID kunci Anda.
  • Anda harus menjadi pemilik aplikasi di konsol Google Cloud.
  • Project ID aplikasi Anda dari Konsol Google Cloud.

Langkah 1: Tambahkan Firebase ke aplikasi Anda

Ikuti petunjuk dalam dokumentasi developer Firebase untuk menambahkan Firebase ke aplikasi Anda. Tambahkan file GoogleService-Info.plist Anda, tanpa diubah, ke tingkat root project Anda.

Dalam file AppDelegate, impor modul berikut:

Swift

import FirebaseCore
import FirebaseAppCheck
import GoogleNavigation

Objective-C

@import FirebaseCore;
@import FirebaseAppCheck;
@import GoogleNavigation;

Langkah 2: Tambahkan library App Check dan inisialisasi App Check

Firebase memberikan petunjuk untuk setiap penyedia pengesahan default. Petunjuk ini menunjukkan cara menyiapkan project Firebase dan menambahkan library App Check ke aplikasi Anda. Ikuti contoh kode yang diberikan untuk menginisialisasi App Check.

  1. Ikuti petunjuk Firebase untuk menambahkan library App Check:
  2. Lakukan inisialisasi App Check di AppDelegate Anda:
    • Jika Anda menggunakan App Attest, buat penerapan AppCheckProviderFactory dan daftarkan sebelum memanggil 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];
    • Jika Anda menggunakan DeviceCheck, tetapkan pabrik menggunakan perintah berikut:

      Swift

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Objective-C

      FIRDeviceCheckProviderFactory *providerFactory = [[FIRDeviceCheckProviderFactory alloc] init];
      [FIRAppCheck setAppCheckProviderFactory:providerFactory];

Langkah 3: Tambahkan penyedia token

Buat file bernama AppCheckTokenProvider (atau, jika Anda menggunakan Objective-C, dua file bernama AppCheckTokenProvider.h dan AppCheckTokenProvider.m) di tingkat root aplikasi Anda.

Class ini harus sesuai dengan protokol GMSAppCheckTokenProvider dan menerapkan metode 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

Langkah 4: Lakukan inisialisasi Navigation API dan App Check API

Lakukan inisialisasi Navigation SDK for iOS dan daftarkan instance penyedia token Anda di 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];

Langkah 5: Aktifkan proses debug (opsional)

Setelah App Check diterapkan untuk Navigation SDK for iOS, fitur aplikasi Anda yang bergantung pada Navigation SDK for iOS tidak akan berjalan di simulator atau dari lingkungan continuous integration (CI) karena lingkungan ini tidak memenuhi syarat sebagai perangkat yang valid. Untuk menjalankan aplikasi di lingkungan ini selama pengembangan dan pengujian, Anda perlu membuat build debug aplikasi yang menggunakan penyedia debug App Check, bukan penyedia pengesahan produksi.

  1. Konfigurasi factory penyedia debug di AppDelegate Anda:

    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];
  2. Aktifkan logging di project Xcode Anda, luncurkan aplikasi, dan temukan token debug lokal di log konsol.
  3. Salin dan tambahkan token debug ini ke Firebase Console. Untuk mengetahui detail selengkapnya, lihat dokumentasi penyedia debug Firebase App Check.

Langkah 6: Pantau permintaan aplikasi Anda dan putuskan penegakan

Sebelum mengaktifkan penerapan, pantau permintaan aplikasi Anda untuk memastikan bahwa Anda tidak akan mengganggu pengguna yang sah.

  1. Buka layar metrik App Check di Firebase console untuk melihat persentase traffic terverifikasi versus tidak terverifikasi.
  2. Setelah Anda yakin bahwa sebagian besar traffic Anda diverifikasi dan pengguna yang sah telah mengupdate ke versi aplikasi yang berisi penerapan App Check, aktifkan penerapan.
  3. Setelah penerapan diaktifkan, App Check akan menolak semua traffic tanpa token App Check yang valid.