iOS için Navigasyon SDK'sının güvenliğini sağlamak üzere Uygulama Kontrolü'nü kullanma

Firebase Uygulama Kontrolü, uygulamanızdan Google Haritalar Platformu'na yapılan çağrıları korumak için yasal uygulamalarınız dışındaki kaynaklardan gelen trafiği engeller. Bunu, App Attest gibi bir onay sağlayıcıdan uygulamanın veya cihazın orijinalliğinin değerlendirilmesini isteyerek yapar. Uygulamanızı Uygulama Kontrolü ile entegre ettiğinizde kötü amaçlı ve yetkisiz isteklere karşı koruma eklemiş olursunuz. Bu da faturalandırmanızı yetkisiz ödemelere karşı korur. Uygulama Kontrolü, filo uygulaması ekosisteminizdeki gerçek zamanlı aksaklık raporlamasını da önemli ölçüde iyileştirir. Böylece uygulamanızı kullanan tüm sürücüler bu özellikten yararlanabilir. Daha fazla bilgi için Aksaklık raporlama başlıklı makaleyi inceleyin.

Uygulama Kontrolü'nü neden kullanmalısınız?

Uygulama Kontrolü, iOS için Navigasyon SDK'sının iki farklı alanını korur: ana navigasyon işlevi ve aksaklık raporlama.

Uygulama Kontrolü, kötü amaçlı veya yetkisiz kaynaklardan gelen ana iOS için Navigasyon SDK'sı isteklerini engellemeye yardımcı olur. Bu, projenizi faturalandırma sahtekarlığından ve kota aşımından koruyarak size doğrudan fayda sağlar.

Aksaklık bildirme

Uygulamanız gerçek zamanlı aksaklık bildirme ve oylama özelliklerini destekliyorsa Uygulama Kontrolü'nü kullanmanız önemle tavsiye edilir. Uygulama Kontrolü'nü etkinleştirdiğinizde sürücülerinize tüm anlık geri bildirimleri dikkate alan en doğru rotalar sunulur.

Uygulama Kontrolü, raporlama için neden önemlidir?

  • Kapalı yollar için yüksek güven eşiği: Kapalı yol gibi rotayı etkileyen olaylar, tüm sürücülerin rota davranışını önemli ölçüde değiştirebilir. Google'ın kapalı yol aksaklıkları için moderasyon altyapısı, haritayı olası vandalizm, spam veya yanlış bildirimlerden korumak için güçlü cihaz ve uygulama bütünlüğü sinyallerini kullanır.
  • Uygulama Kontrolü, raporları nasıl doğrular? iOS için Navigasyon SDK'sından gönderilen kullanıcı raporları ve oyları, Uygulama Kontrolü jetonunu içerir. Bu jeton, Google'ın arka ucu tarafından geri bildirimin meşruiyetini doğrulamak, güven düzeyini artırmak ve canlı harita etkisi açısından değerlendirilmesini sağlamak için kullanılır.
  • Uygulama Kontrolü'nü kullanmamanın etkisi: Geçerli bir Uygulama Kontrolü jetonu olmadan gönderilen raporlar, daha düşük güvene sahip bir model kapsamında değerlendirilir ve yalnızca sessiz sinyaller olarak işlenebilir. Bu durumda kullanıcılarınız bildirimde bulunmaya ve oy vermeye devam edebilir ancak bildirimlerinin haritada görünme veya diğer sürücülerin rotalarını etkileme olasılığı daha düşüktür ve ek doğrulama gerekir.

Uygulama Kontrolü benim için uygun mu?

Uygulama Kontrolü çoğu durumda önerilir ancak aşağıdaki senaryolarda Uygulama Kontrolü gerekli değildir veya desteklenmez:

  • Özel veya deneysel uygulamalar: Uygulamanız herkese açık değilse Uygulama Kontrolü gerekli değildir.
  • Güvenliği ihlal edilmiş cihazlar: Önerilen onay sağlayıcılar, iOS için Navigasyon SDK'sının rootlanmış veya jailbreak'li telefonlar gibi güvenilmeyen cihazlarda çalışmasını engeller. Bu cihazları desteklemek için özel bir onay sağlayıcı dağıtın.

Uygulama adımlarına genel bakış

Genel olarak, uygulamanızı Uygulama Kontrolü ile entegre etmek için aşağıdaki adımları uygulamanız gerekir:

  1. Uygulamanıza Firebase'i ekleyin.
  2. Uygulama Kontrolü kitaplığını ekleyin ve Uygulama Kontrolü'nü başlatın.
  3. Jeton sağlayıcı ekleyin. Bu adım, cihazın veya uygulamanın bütünlüğünü doğrulamak için seçtiğiniz onay sağlayıcıyı çağırır.
  4. Navigation ve App Check API'lerini başlatın.
  5. Hata ayıklamayı etkinleştirin. Bu, geliştirme sırasında veya sürekli entegrasyon (CI) ortamlarında kullanışlıdır.
  6. Yaptırımı etkinleştirmeden önce uygulama isteklerinizi izleyin. Bu sayede, kullanıcılarınızı rahatsız etmeden Uygulama Kontrolü'nü sorunsuz bir şekilde uygulayabilirsiniz.

Uygulama Kontrolü entegrasyonu planlarken dikkat edilmesi gereken noktalar

  • Onay sağlayıcı kotaları: Önerdiğimiz onay sağlayıcılar (DeviceCheck veya App Attest), Apple tarafından belirlenen kotalara ve sınırlamalara tabidir.
  • Başlangıç Gecikmesi: Çoğu durumda, Uygulama Kontrolü jetonları cihazda önbelleğe alındığından kullanıcılarınız normal kullanım sırasında gecikme yaşamaz. Sistem, sorunsuz performans sağlamak için Uygulama Kontrolü jetonlarını süresi dolmadan önce arka planda otomatik olarak yeniler. Ancak geçerli bir Uygulama Kontrolü jetonu yoksa uygulama kullanıcılarınız başlangıçta bir miktar gecikme yaşar. Örneğin, önbelleğe alınmış bir jetonun süresi dolduğunda veya jeton eksik olduğunda soğuk başlatma sırasında bu gecikme yaşanır.
  • Jeton TTL'si: Geçerlilik süresi (TTL), Uygulama Kontrolü jetonunun yenilenmesi gerekmeden önce geçerli olduğu süreyi belirler. Bu süreyi Firebase konsolunda 30 dakika ile 7 gün arasında yapılandırabilirsiniz. Güvenli bir temel olarak 1 saatlik bir süre önerilir ancak SDK, TTL süresinin yaklaşık yarısında arka planda yenileme işlemlerini otomatik olarak dener. Adım adım konsol talimatları için Firebase Uygulama Kontrolü belgelerine bakın.

Uygulamanızı Uygulama Kontrolü ile entegre etme

Ön koşullar ve şartlar

  • iOS için Navigasyon SDK'sı 11.0 veya sonraki sürümlerin yüklü olduğu bir uygulama.
  • Uygulamanın paket kimliği.
  • Apple Developer Console'daki Üyelik sekmesinde bulunan Ekip Kimliğiniz.
  • DeviceCheck kullanmayı planlıyorsanız özel anahtar dosyanız ve anahtar kimliğiniz.
  • Google Cloud Console'da uygulamanın sahibi olmanız gerekir.
  • Uygulamanızın Google Cloud Console'daki proje kimliği.

1. adım: Uygulamanıza Firebase'i ekleyin

Firebase'i uygulamanıza eklemek için Firebase geliştirici belgelerindeki talimatları uygulayın. GoogleService-Info.plist dosyanızı değiştirilmemiş olarak projenizin kök düzeyine ekleyin.

AppDelegate dosyanızda aşağıdaki modülleri içe aktarın:

Swift

import FirebaseCore
import FirebaseAppCheck
import GoogleNavigation

Objective-C

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

2. adım: Uygulama Kontrolü kitaplığını ekleyin ve Uygulama Kontrolü'nü başlatın

Firebase, her varsayılan onay sağlayıcı için talimatlar sunar. Bu talimatlarda, Firebase projesi oluşturma ve Uygulama Kontrolü kitaplığını uygulamanıza ekleme adımları açıklanmaktadır. Uygulama Kontrolü'nü ilk kullanıma hazırlamak için sağlanan kod örneklerini uygulayın.

  1. Uygulama Kontrolü kitaplığını eklemek için Firebase talimatlarını uygulayın:
  2. AppDelegate uygulamanızda Uygulama Kontrolü'nü başlatın:
    • App Attest kullanıyorsanız AppCheckProviderFactory uygulamasını oluşturun ve FirebaseApp.configure() yöntemini çağırmadan önce kaydedin:

      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];
    • Bunun yerine DeviceCheck kullanıyorsanız fabrikayı aşağıdakileri kullanarak ayarlayın:

      Swift

      AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())

      Objective-C

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

3. adım: Jeton sağlayıcıyı ekleyin

Uygulamanızın kök düzeyinde AppCheckTokenProvider adlı bir dosya (veya Objective-C kullanıyorsanız AppCheckTokenProvider.h ve AppCheckTokenProvider.m adlı iki dosya) oluşturun.

Bu sınıf, GMSAppCheckTokenProvider protokolüne uymalı ve fetchAppCheckTokenWithCompletion yöntemini uygulamalıdır.

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. adım: Navigation ve App Check API'lerini başlatın

iOS için Gezinme SDK'sını ilk kullanıma hazırlayın ve jeton sağlayıcı örneğinizi GMSServices üzerinde kaydedin:

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. adım: Hata ayıklamayı etkinleştirme (isteğe bağlı)

iOS için Navigasyon SDK'sında Uygulama Kontrolü zorunlu kılındıktan sonra, uygulamanızın iOS için Navigasyon SDK'sına bağlı özellikleri simülatörde veya sürekli entegrasyon (CI) ortamında çalışmaz. Bunun nedeni, bu ortamların geçerli cihazlar olarak kabul edilmemesidir. Uygulamanızı geliştirme ve test aşamasında bu ortamlarda çalıştırmak için uygulamanızın, canlı sürüm onaylama sağlayıcısı yerine Uygulama Kontrolü hata ayıklama sağlayıcısını kullanan bir hata ayıklama derlemesini oluşturmanız gerekir.

  1. AppDelegate uygulamanızda hata ayıklama sağlayıcı fabrikasını yapılandırın:

    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. Xcode projenizde günlük kaydını etkinleştirin, uygulamayı başlatın ve konsol günlüğünde yerel hata ayıklama jetonunu bulun.
  3. Bu hata ayıklama jetonunu kopyalayıp Firebase konsoluna ekleyin. Daha fazla bilgi için Firebase Uygulama Kontrolü hata ayıklama sağlayıcısı belgelerini inceleyin.

6. adım: Uygulama isteklerinizi izleyin ve yaptırım kararı alın

Yaptırımı etkinleştirmeden önce, meşru kullanıcıları engellemeyeceğinizden emin olmak için uygulama isteklerinizi izleyin.

  1. Doğrulanmış ve doğrulanmamış trafiğin yüzdesini görmek için Firebase konsolundaki Uygulama Kontrolü metrikleri ekranını ziyaret edin.
  2. Trafiğinizin çoğunluğunun doğrulandığından ve meşru kullanıcıların uygulamanızın Uygulama Kontrolü uygulamanızı içeren bir sürümüne güncellediğinden emin olduktan sonra yaptırımı etkinleştirin.
  3. Yaptırım etkinleştirildikten sonra Uygulama Kontrolü, geçerli bir Uygulama Kontrolü jetonu olmayan tüm trafiği reddeder.