Navigation SDK for iOS mit App Check schützen

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, wird sie vor schädlichen und nicht autorisierten Anfragen geschützt. So können Sie nicht autorisierte Belastungen auf Ihrer Abrechnung vermeiden. App Check verbessert auch die Echtzeit-Störungsmeldungen in Ihrem App-Ökosystem für die Flotte erheblich, was allen Fahrern zugutekommt, die Ihre App verwenden. Weitere Informationen finden Sie unter Störungsmeldungen.

Vorteile von App Check

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

Mit App Check können die wichtigsten Anfragen des Navigation SDK for iOS von schädlichen oder nicht autorisierten Quellen blockiert werden. Dies kommt Ihnen direkt zugute, da Ihr Projekt so vor Abrechnungsbetrug und Kontingenterschöpfung geschützt wird.

Störungsmeldungen

App Check wird dringend empfohlen, wenn Ihre App Echtzeitmeldungen zu Störungen und Abstimmungsfunktionen unterstützt. Wenn Sie App Check aktivieren, erhalten Ihre Fahrer die genauesten Routen, die alle Echtzeit-Feedbacks berücksichtigen.

Warum App Check für die Berichterstellung wichtig ist:

  • Hohe Anforderungen an die Vertrauenswürdigkeit bei Sperrungen: Ereignisse, die sich auf die Routenführung auswirken, z. B. Straßensperrungen, können die Routenführung für alle Fahrer erheblich verändern. Um die Karte vor potenziellem Vandalismus, Spam oder ungenauen Meldungen zu schützen, nutzt die Moderationsinfrastruktur von Google für Straßensperrungen starke Signale zur Geräte- und App-Integrität.
  • So werden Meldungen mit App Check validiert: Nutzermeldungen und ‑abstimmungen, die über das Navigation SDK for iOS gesendet werden, enthalten das App Check-Token. Dieses wird vom Google-Backend verwendet, um die Legitimität des Feedbacks zu prüfen. Dadurch wird die Vertrauenswürdigkeit erhöht und das Feedback kann auf seine Auswirkungen auf die Onlinekarte hin ausgewertet werden.
  • Auswirkungen, wenn App Check nicht verwendet wird: Berichte, die ohne gültiges App Check-Token eingereicht werden, werden im Rahmen eines Modells mit geringerem Vertrauen bewertet und möglicherweise nur als stille Signale verarbeitet. Das bedeutet, dass Ihre Nutzer zwar weiterhin Meldungen erstellen und abstimmen können, ihre Meldungen jedoch seltener auf der Karte angezeigt werden oder die Routen anderer Fahrer beeinflussen. Außerdem ist eine zusätzliche Validierung 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 für iOS auf nicht vertrauenswürdigen Geräten wie gerooteten Smartphones oder Smartphones mit Jailbreak ausgeführt wird. Wenn Sie diese Geräte unterstützen möchten, stellen Sie einen benutzerdefinierten Attestierungsanbieter bereit.

Übersicht über die Implementierungsschritte

Auf übergeordneter Ebene führen Sie die folgenden Schritte aus, um Ihre App in App Check zu integrieren:

  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 Attestierungsanbieter Ihrer Wahl aufgerufen, um die Integrität des Geräts oder der App zu prüfen.
  4. Navigation API und App Check API initialisieren
  5. Aktivieren Sie das Debugging. Dies ist während der Entwicklung oder in CI-Umgebungen (Continuous Integration) nützlich.
  6. Beobachten Sie die App-Anfragen, 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: Die von uns empfohlenen Attestierungsanbieter DeviceCheck oder App Attest unterliegen den von Apple festgelegten Kontingenten und Einschränkungen.
  • Startlatenz: In den meisten Fällen kommt es bei der regulären Nutzung nicht zu Latenzen, 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 nahtlose Leistung zu gewährleisten. Wenn jedoch kein gültiges App Check-Token vorhanden ist, kommt es beim Starten der App zu einer gewissen Latenz. Diese Latenz tritt beispielsweise bei Kaltstarts auf, wenn ein im Cache gespeichertes Token abgelaufen ist oder fehlt.
  • Token-TTL: Die Gültigkeitsdauer (TTL) bestimmt, wie lange das App Check-Token gültig ist, bevor es aktualisiert werden muss. Sie können diese Dauer in der Firebase Console auf einen Wert zwischen 30 Minuten und 7 Tagen festlegen. Eine Dauer von 1 Stunde wird als sichere Baseline empfohlen. Das SDK versucht jedoch automatisch, die Aktualisierung im Hintergrund nach etwa der Hälfte der TTL-Dauer durchzuführen. Eine detaillierte Anleitung für die Console finden Sie in der Dokumentation zu Firebase App Check.

App in App Check einbinden

Voraussetzungen und Anforderungen

  • Eine App, in der das Navigation SDK for iOS ab Version 11.0 installiert ist.
  • Die Paket-ID der App.
  • Ihre Team-ID finden Sie in der Apple Developer Console auf dem Tab „Membership“ (Mitgliedschaft).
  • Wenn Sie DeviceCheck verwenden möchten, benötigen Sie Ihre private Schlüsseldatei und Ihre Schlüssel-ID.
  • Sie müssen der Inhaber der Anwendung in der Google Cloud Console sein.
  • Die Projekt-ID Ihrer App aus der Google Cloud Console.

Schritt 1: Firebase zur 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 der Stammebene Ihres Projekts hinzu.

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 Standard-Attestierungsanbieter. 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 Factory so 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 (oder, wenn Sie Objective-C verwenden, 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 auf 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 for iOS erzwungen wurde, können die Funktionen Ihrer App, die vom Navigation SDK for iOS abhängen, nicht mehr in einem Simulator oder in einer CI-Umgebung (Continuous Integration) ausgeführt werden, da diese Umgebungen nicht als gültige Geräte gelten. Wenn Sie Ihre App während der Entwicklung und beim Testen in diesen Umgebungen ausführen möchten, müssen Sie einen Debug-Build Ihrer App erstellen, der den App Check-Debug-Anbieter anstelle eines Produktions-Attestierungsanbieters 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 das Logging für Ihr 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 hinzu. Weitere Informationen finden Sie in der Dokumentation zum Debug-Anbieter für Firebase App Check.

Schritt 6: App-Anfragen im Blick behalten und über Maßnahmen entscheiden

Bevor Sie die Erzwingung aktivieren, sollten Sie die App-Anfragen im Blick behalten, um sicherzustellen, dass Sie legitime Nutzer nicht beeinträchtigen.

  1. Rufen Sie in der Firebase Console den Bildschirm mit den App Check-Messwerten auf, um den Prozentsatz des verifizierten und nicht verifizierten Traffics zu sehen.
  2. Sobald Sie sicher sind, dass der Großteil Ihres Traffics verifiziert ist und legitime Nutzer auf eine Version Ihrer App mit Ihrer App Check-Implementierung aktualisiert haben, aktivieren Sie die Erzwingung.
  3. Wenn die Erzwingung aktiviert ist, lehnt App Check alle Zugriffe ohne gültiges App Check-Token ab.