iOS için Navigasyon SDK'sını güvence altına almak için App Check'i kullanın.
Firebase Uygulama Kontrolü, geçerli uygulamalarınız dışındaki kaynaklardan gelen trafiği engelleyerek uygulamanızdan Google Haritalar Platformu'na yapılan çağrıları korur. Bu işlem için App Attest gibi bir onay sağlayıcıdan uygulamanın veya cihazın gerçekliğinin değerlendirilmesi istenir. Uygulamanızı Uygulama Kontrolü ile entegre ettiğinizde kötü amaçlı ve yetkisiz isteklere karşı koruma eklersiniz. Bu da faturalandırmanızı yetkisiz ödemelerden korur. App Check, filonuzun uygulama ekosisteminde gerçek zamanlı kesinti raporlamasını da önemli ölçüde iyileştirerek uygulamanızı kullanan tüm sürücülere fayda sağlar. Daha fazla bilgi için Kesinti raporlama başlıklı makaleyi inceleyin.
App Check'i neden kullanmalısınız?
App Check, iOS için Navigation SDK'nın iki farklı alanını korur: temel navigasyon işlevi ve aksaklık raporlama.
Gezinme
Uygulama Kontrolü, iOS için ana Navigasyon SDK'sına yapılan isteklerin kötü amaçlı veya yetkisiz kaynaklardan gelmesini engellemeye yardımcı olur. Bu durum, projenizi faturalandırma dolandırıcılığından ve kota aşımından koruyarak size doğrudan fayda sağlar.
Kesinti bildirme
Uygulamanızda anlık kesinti bildirme ve oylama özellikleri destekleniyorsa Uygulama Kontrolü'nü kullanmanız önemle tavsiye edilir. Uygulama Kontrolü'nü etkinleştirdiğinizde sürücüleriniz, tüm anlık geri bildirimleri dikkate alan en doğru rotaları alır.
Raporlama açısından Uygulama Denetimi neden önemlidir?
- Kapanışlar için yüksek güven eşiği: Yol kapanışları gibi rotayı etkileyen olaylar, tüm sürücülerin yönlendirme davranışını önemli ölçüde değiştirebilir. Haritayı olası vandalizm, spam veya yanlış bildirimlerden korumak için Google'ın yol kapatma kesintileriyle ilgili moderasyon altyapısında güçlü cihaz ve uygulama bütünlüğü sinyalleri kullanılır.
- Uygulama Kontrolü, raporları nasıl doğrular? iOS için Navigation SDK'dan gönderilen kullanıcı raporları ve oyları, geri bildirimin geçerliliğini doğrulamak için Google'ın arka ucu tarafından kullanılan Uygulama Kontrolü jetonunu içerir. Bu jeton, geri bildirimin güven düzeyini yükseltir ve canlı harita üzerindeki etkisinin değerlendirilmesine olanak tanır.
- App Check'in atlanmasının etkisi: Geçerli bir App Check 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, kullanıcılarınızın hala rapor gönderebileceği ve oy kullanabileceği anlamına gelir; ancak raporlarının haritada görünme veya diğer sürücülerin rotalarını etkileme olasılığı daha düşüktür ve ek doğrulama gerektirecektir.
Uygulama Kontrolü benim için uygun mu?
Çoğu durumda App Check önerilir. Ancak aşağıdaki senaryolarda App Check'e gerek yoktur veya App Check desteklenmez:
- Özel veya deneysel uygulamalar: Uygulamanıza herkes erişemiyorsa Uygulama Denetimi gerekmez.
- Güvenliği tehlikeye atılmış cihazlar: Önerilen doğrulama sağlayıcıları, iOS için Navigasyon SDK'sının rootlu veya jailbreak yapılmış telefonlar gibi güvenilmez 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ış
Uygulamanızı App Check ile entegre etmek için genel olarak şu adımları uygulayacaksınız:
- Uygulamanıza Firebase'i ekleyin.
- App Check kütüphanesini ekleyin ve App Check'i başlatın.
- Jeton sağlayıcı ekleyin. Bu adımda, cihazın veya uygulamanın bütünlüğünü doğrulamak için seçtiğiniz onay sağlayıcı çağrılır.
- Navigation ve App Check API'lerini başlatın.
- Hata ayıklamayı etkinleştirin. Bu, geliştirme sırasında veya sürekli entegrasyon (CI) ortamlarında kullanışlıdır.
- Yaptırımı etkinleştirmeden önce uygulama isteklerinizi izleyin. Bu sayede, kullanıcılarınızı rahatsız etmeden uygulama denetimini sorunsuz bir şekilde uygulayabilirsiniz.
Uygulama Kontrolü entegrasyonu planlarken dikkat edilmesi gerekenler
- Onay Sağlayıcı Kotaları: Önerdiğimiz onay sağlayıcıları olan DeviceCheck veya App Attest, Apple tarafından belirlenen kotalara ve sınırlamalara tabidir.
- Başlatma Gecikmesi: App Check jetonları cihazda önbelleğe alındığından, kullanıcılarınız çoğu durumda normal kullanım sırasında gecikme yaşamaz. Sistem, sorunsuz performans sağlamak için uygulama doğrulama belirteçlerini süresi dolmadan önce arka planda otomatik olarak yeniler. Ancak, geçerli bir Uygulama Kontrolü belirteci mevcut değilse, uygulama kullanıcılarınız başlatma sırasında bir gecikme yaşayacaktır. Örneğin, bu gecikme, önbelleğe alınmış bir jetonun süresi dolduğunda veya jeton eksik olduğunda soğuk başlatmalar sırasında meydana gelir.
- 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 süre olarak 1 saatlik bir süre önerilir, ancak SDK otomatik olarak TTL süresinin yaklaşık yarısında arka planda yenileme girişiminde bulunur. Konsol talimatları için Firebase Uygulama Kontrolü belgelerine bakın.
Uygulamanızı App Check ile entegre etme
Ön koşullar ve gereksinimler
- iOS için Navigasyon SDK'sının 11.0 veya sonraki sürümlerinin yüklü olduğu bir uygulama
- Uygulamanın paket kimliği.
- Apple Developer Console'unuzdaki Üyelik sekmesinde yer alan Ekip Kimliğiniz.
- DeviceCheck'i 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: Firebase'i uygulamanıza ekleyin
Firebase'i uygulamanıza eklemek için Firebase geliştirici dokümanlarındaki talimatları uygulayın. GoogleService-Info.plist dosyanızı değiştirilmemiş şekilde projenizin kök düzeyine ekleyin.
AppDelegate dosyanıza 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: App Check kitaplığını ekleyin ve App Check'i başlatın
Firebase, her varsayılan onay sağlayıcı için talimatlar sunar. Bu talimatlarda, Firebase projesinin nasıl oluşturulacağı ve App Check kitaplığının uygulamanıza nasıl ekleneceği açıklanmaktadır. App Check'i başlatmak için sağlanan kod örneklerini uygulayın.
- Uygulama Kontrolü kitaplığını eklemek için Firebase talimatlarını uygulayın:
AppDelegateiçinde App Check'i başlatın:- App Attest kullanıyorsanız
AppCheckProviderFactoryişlevini uygulayın veFirebaseApp.configure()işlevini ç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 aşağıdaki bilgileri kullanarak fabrikayı ayarlayın:
Swift
AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())
Objective-C
FIRDeviceCheckProviderFactory *providerFactory = [[FIRDeviceCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory];
- App Attest kullanıyorsanız
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 uygun olmalı 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 Navigation SDK'sını başlatın (GMSServices kullanarak) ve paylaşılan opak hizmetler tutamacını GMSServices olarak yayınlayarak jeton sağlayıcı örneğinizi kaydedin:
Swift
// In application(_:didFinishLaunchingWithOptions:) GMSServices.provideAPIKey("YOUR_API_KEY") // Register your App Check token provider before initializing Navigation SDK for iOS if let services = GMSServices.sharedServices() as? GMSServices { services.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 *)[GMSServices sharedServices]).appCheckTokenProvider = [[AppCheckTokenProvider alloc] init];
5. adım: Hata ayıklamayı etkinleştirin (isteğe bağlı)
iOS için Navigasyon SDK'sı için Uygulama Kontrolü zorunlu kılındıktan sonra, iOS için Navigasyon SDK'sına bağlı olan uygulama özellikleriniz, bu ortamlar geçerli cihaz olarak kabul edilmediğinden simülatörde veya sürekli entegrasyon (CI) ortamında çalışmaz. Uygulamanızı geliştirme ve test aşamalarında bu ortamlarda çalıştırmak için, üretim doğrulama sağlayıcısı yerine Uygulama Kontrolü hata ayıklama sağlayıcısını kullanan bir hata ayıklama derlemesi oluşturmanız gerekir.
AppDelegatedosyanı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];
- Xcode projenizde günlük kaydını etkinleştirin, uygulamayı başlatın ve konsol günlüğünde yerel hata ayıklama jetonunu bulun.
- 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ı dokümanlarına bakın.
6. adım: Uygulama isteklerinizi izleyin ve yaptırım konusunda karar verin
Yaptırımı etkinleştirmeden önce, meşru kullanıcıların hizmetten yararlanmasını engellemeyeceğinizden emin olmak için uygulama isteklerinizi izleyin.
- Doğrulanmış ve doğrulanmamış trafiğin yüzdesini görmek için Firebase konsolundaki Uygulama Kontrolü metrikleri ekranını ziyaret edin.
- Trafiğinizin büyük bir kısmının doğrulanmış olduğundan ve meşru kullanıcıların, App Check uygulamanızı içeren bir uygulama sürümüne güncellediğinden emin olduğunuzda zorunlu kılmayı etkinleştirin.
- Zorunlu kılma etkinleştirildikten sonra Uygulama Kontrolü, geçerli bir Uygulama Kontrolü jetonu içermeyen tüm trafiği reddeder.