App Check zum Sichern des Navigation SDK for iOS verwenden

Firebase App Check schützt Aufrufe von Ihrer App an die Google Maps Platform, indem Traffic von anderen Quellen als Ihren legitimen Apps blockiert wird. Dazu wird bei einem Attestierungsanbieter wie App Attest eine Bewertung der Authentizität der App oder des Geräts angefordert. Wenn Sie Ihre App in App Check einbinden, schützen Sie sie vor schädlichen und nicht autorisierten Anfragen. Dadurch wird auch Ihre Abrechnung vor nicht autorisierten Belastungen geschützt. App Check verbessert auch die Echtzeit-Meldung von Störungen in Ihrem Flotten-App-Ökosystem erheblich, was allen Fahrern zugutekommt, die Ihre App verwenden. Weitere Informationen finden Sie unter Meldung von Störungen.

Vorteile von App Check

App Check schützt zwei unterschiedliche Bereiche des Navigation SDK for iOS: die Hauptnavigationsfunktion und die Meldung von Störungen.

Mit App Check können Hauptanfragen des Navigation SDK for iOS von schädlichen oder nicht autorisierten Quellen blockiert werden. Das schützt Ihr Projekt direkt vor Abrechnungsbetrug und Kontingentüberschreitung.

Störungen melden

App Check ist sehr empfehlenswert, wenn Ihre App Funktionen zum Melden und Abstimmen von Störungen in Echtzeit unterstützt. Wenn Sie App Check aktivieren, erhalten Ihre Fahrer die genauesten Routen, die alle Echtzeit-Rückmeldungen berücksichtigen.

Warum App Check für Berichte wichtig ist:

  • Hohe Vertrauensschwelle für Straßensperrungen:Ereignisse, die sich auf die Routen auswirken, z. B. Straßensperrungen, können das Routingverhalten für alle Fahrer erheblich verändern. Um die Karte vor potenziellem Vandalismus, Spam oder ungenauen Meldungen zu schützen, stützt sich die Moderationsinfrastruktur von Google für Störungen durch Straßensperrungen auf starke Geräte- und App-Integritätssignale.
  • So werden Berichte von App Check validiert:Nutzerberichte und ‑abstimmungen, die über das Navigation SDK for iOS gesendet werden, enthalten das App Check-Token. Dieses wird vom Backend von Google verwendet, um die Rechtmäßigkeit des Feedbacks zu validieren. Dadurch wird das Vertrauensniveau erhöht und das Feedback kann auf Auswirkungen auf die Live-Karte geprüft werden.
  • Auswirkungen des Weglassens von App Check:Berichte, die ohne gültiges App Check-Token eingereicht werden, werden nach einem Modell mit geringerem Vertrauen ausgewertet und möglicherweise nur als stille Signale verarbeitet. Das bedeutet, dass Ihre Nutzer zwar weiterhin Meldungen abgeben und abstimmen können, ihre Meldungen aber weniger wahrscheinlich auf der Karte angezeigt werden oder die Routen anderer Fahrer beeinflussen. Außerdem ist eine zusätzliche Bestätigung erforderlich.

Ist App Check das Richtige für mich?

App Check wird in den meisten Fällen empfohlen. In den folgenden Szenarien ist App Check jedoch nicht erforderlich oder wird nicht unterstützt:

  • Private oder experimentelle Apps:Wenn Ihre App nicht öffentlich zugänglich ist, ist App Check nicht erforderlich.
  • Manipulierte Geräte:Die empfohlenen Attestierungsanbieter verhindern, dass das Navigation SDK for iOS auf nicht vertrauenswürdigen Geräten wie gerooteten Smartphones oder Smartphones mit Jailbreak ausgeführt wird. Um diese Geräte zu unterstützen, müssen Sie einen benutzerdefinierten Attestierungsanbieter bereitstellen.

Übersicht über die Implementierungsschritte

Auf übergeordneter Ebene gehen Sie so vor, um Ihre App in App Check einzubinden:

  1. Fügen Sie Ihrer Anwendung Firebase hinzu.
  2. Fügen Sie die App Check-Bibliothek hinzu und initialisieren Sie App Check.
  3. Fügen Sie einen Tokenanbieter hinzu. In diesem Schritt wird der von Ihnen ausgewählte Attestierungsanbieter aufgerufen, um die Integrität des Geräts oder der App zu überprüfen.
  4. Initialisieren Sie die Navigation API und die App Check API.
  5. Aktivieren Sie das Debugging. Das ist während der Entwicklung oder in CI-Umgebungen (Continuous Integration) nützlich.
  6. Behalten Sie Ihre App-Anfragen im Blick, bevor Sie die Erzwingung aktivieren. So können Sie App Check nahtlos erzwingen, ohne Ihre Nutzer zu beeinträchtigen.

Überlegungen bei der Planung einer App Check-Integration

  • Kontingente für Attestierungsanbieter:Für die von uns empfohlenen Attestierungsanbieter DeviceCheck oder App Attest gelten Kontingente und Einschränkungen, die von Apple festgelegt werden.
  • Startlatenz:In den meisten Fällen werden Ihre Nutzer bei der regulären Nutzung keine Latenz bemerken, da App Check-Tokens auf dem Gerät im Cache gespeichert werden. Das System aktualisiert App Check-Tokens automatisch im Hintergrund, bevor sie ablaufen, um eine reibungslose Leistung zu gewährleisten. Wenn jedoch kein gültiges App Check-Token vorhanden ist, kann es beim Starten der App zu Latenzzeiten kommen. Diese Latenz tritt beispielsweise bei Kaltstarts auf, wenn ein im Cache gespeichertes Token abgelaufen ist oder fehlt.
  • Token-Gültigkeitsdauer (TTL):Die Gültigkeitsdauer (TTL) bestimmt, wie lange das App Check-Token gültig ist, bevor es aktualisiert werden muss. Sie können diesen Zeitraum in der Firebase Console auf 30 Minuten bis 7 Tage festlegen. Eine Dauer von einer Stunde wird als sichere Baseline empfohlen. Das SDK versucht jedoch automatisch, Hintergrundaktualisierungen nach etwa der Hälfte der TTL-Dauer durchzuführen. Eine detaillierte Anleitung für die Konsole finden Sie in der Firebase App Check-Dokumentation.

App in App Check einbinden

Voraussetzungen und Anforderungen

  • Eine App mit dem Navigation SDK for iOS Version 11.0 oder höher.
  • Die Paket-ID der App.
  • Ihre Team-ID auf dem Tab „Membership“ (Mitgliedschaft) in Ihrer Apple Developer Console.
  • Wenn Sie DeviceCheck verwenden möchten, benötigen Sie Ihre Datei mit dem privaten Schlüssel und die Schlüssel-ID.
  • Sie müssen Inhaber der App in der Google Cloud Console sein.
  • Die Projekt-ID Ihrer App aus der Google Cloud Console.

Schritt 1: Firebase zu Ihrer App hinzufügen

Folgen Sie der Anleitung in der Firebase-Entwicklerdokumentation, um Firebase zu Ihrer App hinzuzufügen. Fügen Sie die Datei GoogleService-Info.plist unverändert auf Stammebene Ihres Projekts ein.

Importieren Sie in der Datei AppDelegate die folgenden Module:

Swift

import FirebaseCore
import FirebaseAppCheck
import GoogleNavigation

Objective-C

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

Schritt 2: App Check-Bibliothek hinzufügen und App Check initialisieren

Firebase bietet Anleitungen für jeden Standardanbieter für die Geräteattestierung. In dieser Anleitung erfahren Sie, wie Sie ein Firebase-Projekt einrichten und die App Check-Bibliothek zu Ihrer App hinzufügen. Folgen Sie den bereitgestellten Codebeispielen, um App Check zu initialisieren.

  1. Folgen Sie der Firebase-Anleitung, um die App Check-Bibliothek hinzuzufügen:
  2. Initialisieren Sie App Check in Ihrer AppDelegate:
    • Wenn Sie App Attest verwenden, erstellen Sie eine Implementierung von AppCheckProviderFactory und registrieren Sie sie, bevor Sie FirebaseApp.configure() aufrufen:

      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];
    • Wenn Sie stattdessen DeviceCheck verwenden, legen Sie die Fabrikmethode mit dem folgenden Befehl fest:

      Swift

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Objective-C

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

Schritt 3: Tokenanbieter hinzufügen

Erstellen Sie im Stammverzeichnis Ihrer App eine Datei mit dem Namen AppCheckTokenProvider. Wenn Sie Objective-C verwenden, erstellen Sie zwei Dateien mit den Namen AppCheckTokenProvider.h und AppCheckTokenProvider.m.

Diese Klasse muss dem GMSAppCheckTokenProvider-Protokoll entsprechen und die Methode fetchAppCheckTokenWithCompletion implementieren.

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

Schritt 4: Navigation API und App Check API initialisieren

Initialisieren Sie das Navigation SDK for iOS und registrieren Sie Ihre Tokenanbieterinstanz unter 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];

Schritt 5: Debugging aktivieren (optional)

Nachdem App Check für das Navigation SDK für iOS erzwungen wurde, werden die Funktionen Ihrer App, die vom Navigation SDK für iOS abhängen, nicht in einem Simulator oder in einer CI-Umgebung (Continuous Integration) ausgeführt, da diese Umgebungen nicht als gültige Geräte gelten. Wenn Sie Ihre App während der Entwicklung und des Testens in diesen Umgebungen ausführen möchten, müssen Sie einen Debug-Build Ihrer App erstellen, der den App Check-Debug-Anbieter anstelle eines Attestierungsanbieters für die Produktion verwendet.

  1. Konfigurieren Sie die Debug-Anbieter-Factory in Ihrer 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];
  2. Aktivieren Sie die Protokollierung in Ihrem Xcode-Projekt, starten Sie die App und suchen Sie im Konsolenlog nach dem lokalen Debug-Token.
  3. Kopieren Sie dieses Debug-Token und fügen Sie es in der Firebase Console ein. Weitere Informationen finden Sie in der Dokumentation zum Firebase App Check-Debuganbieter.

Schritt 6: App-Anfragen überwachen und über die Durchsetzung entscheiden

Bevor Sie die Erzwingung aktivieren, sollten Sie die Anfragen Ihrer App im Blick behalten, damit Sie keine legitimen Nutzer beeinträchtigen.

  1. Auf dem Bildschirm „App Check-Messwerte“ in der Firebase Console können Sie den Prozentsatz des bestätigten im Vergleich zum nicht bestätigten Traffic sehen.
  2. Wenn Sie sicher sind, dass der Großteil Ihres Traffics bestätigt ist und berechtigte Nutzer auf eine Version Ihrer App aktualisiert haben, die Ihre App Check-Implementierung enthält, aktivieren Sie die Erzwingung.
  3. Wenn die Erzwingung aktiviert ist, lehnt App Check alle Zugriffe ohne gültiges App Check-Token ab.