Android için Navigation SDK'nın güvenliğini sağlamak üzere Uygulama Kontrolü'nü kullanma
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. Bunu, Play Integrity gibi bir onay sağlayıcıdan uygulamanın veya cihazın gerçekliğinin değerlendirilmesini isteyerek yapar. 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, Android için Navigation SDK'sının iki farklı alanını korur: temel navigasyon işlevi ve kesinti raporlama.
Gezinme
App Check, kötü amaçlı veya yetkisiz kaynaklardan gelen Android için Navigation SDK isteklerinin engellenmesine yardımcı olur. Bu özellik, projenizi faturalandırma sahtekarlığına ve kota tükenmesine karşı koruyarak doğrudan size 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? Android 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 durumda, kullanıcılarınız bildirimde bulunup oy verebilse de 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?
Ç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 ihlal edilmiş cihazlar: Önerilen onay sağlayıcılar, Android için Navigation SDK'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.
- GMS olmayan Android cihazlar: Android cihazlarda Play Integrity için Google Mobil Hizmetleri (GMS) çalıştırılması gerekir. GMS olmayan Android cihazları desteklemeyi planlıyorsanız ö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:
- Firebase'i uygulamanıza ekleyin.
- App Check kitaplığını 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 şekilde, kullanıcılarınızı kesintiye uğratmadan App Check'i sorunsuz bir şekilde zorunlu kılabilirsiniz.
Uygulama Kontrolü entegrasyonu planlarken dikkat edilmesi gerekenler
- Onay Sağlayıcı Kotaları: Önerdiğimiz onay sağlayıcı Play Integrity'nin Standart API kullanım katmanı için günlük çağrı sınırı vardır. Arama sınırları hakkında daha fazla bilgi için Google Play Integrity geliştirici belgelerindeki Kurulum sayfasına bakın.
- 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 App Check jetonlarını arka planda otomatik olarak yeniler. Ancak geçerli bir Uygulama Denetimi jetonu yoksa uygulama kullanıcılarınız başlatma sırasında biraz gecikme yaşar. Ö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 olarak 1 saatlik süre önerilir ancak SDK, TTL süresinin yaklaşık yarısında otomatik olarak arka plan yenileme denemeleri yapar. Konsol talimatları için Firebase Uygulama Kontrolü belgelerine bakın.
Uygulamanızı App Check ile entegre etme
Ön koşullar ve gereksinimler
- Android için Navigasyon SDK'sının 7.9 veya sonraki sürümlerinin yüklü olduğu bir uygulama.
- Uygulamanızın SHA-256 sertifika parmak izi.
- Uygulamanızın paket adı.
- 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. google-services.json dosyanızı projenizin uygulama düzeyindeki dizinine ekleyin.
2. adım: App Check kitaplığını ekleyin ve App Check'i başlatın
App Check bağımlılığını uygulamanızın build.gradle dosyasına ekleyin:
Groovy (build.gradle)
dependencies { // Import the Firebase BoM implementation platform('com.google.firebase:firebase-bom:34.17.0') // Add the dependency for the App Check library with Play Integrity implementation 'com.google.firebase:firebase-appcheck-playintegrity' }
Uygulama sınıfınızda veya ana etkinliğinizde App Check'i başlatın:
Java
import com.google.firebase.FirebaseApp; import com.google.firebase.appcheck.FirebaseAppCheck; import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory; // Initialize Firebase App FirebaseApp.initializeApp(/* context= */ this); // Initialize App Check FirebaseAppCheck firebaseAppCheck = FirebaseAppCheck.getInstance(); firebaseAppCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance());
Kotlin
import com.google.firebase.Firebase import com.google.firebase.appcheck.appCheck import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory import com.google.firebase.initialize // Initialize Firebase App Firebase.initialize(context = this) // Initialize App Check Firebase.appCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance(), )
3. adım: Jeton sağlayıcıyı ekleyin
MapsAppCheckTokenProvider arayüzünün bir uygulamasını oluşturun. Bu sağlayıcı, Firebase Uygulama Kontrolü'nden Uygulama Kontrolü jetonlarını eşzamansız olarak getirir ve MapsAppCheckTokenCallback kullanarak Android ağ yığını için Navigation SDK'ya iletir:
Java
import com.google.android.gms.maps.MapsAppCheckTokenCallback; import com.google.android.gms.maps.MapsAppCheckTokenProvider; import com.google.firebase.appcheck.FirebaseAppCheck; public class NavigationTokenProvider implements MapsAppCheckTokenProvider { @Override public void fetchToken(MapsAppCheckTokenCallback callback) { FirebaseAppCheck.getInstance() .getAppCheckToken(false) // forcingRefresh = false .addOnSuccessListener( tokenResult -> { String token = tokenResult.getToken(); callback.onSuccess(token); }) .addOnFailureListener( e -> { callback.onFailure(); }); } }
Kotlin
import com.google.android.gms.maps.MapsAppCheckTokenCallback import com.google.android.gms.maps.MapsAppCheckTokenProvider import com.google.firebase.appcheck.FirebaseAppCheck class NavigationTokenProvider : MapsAppCheckTokenProvider { override fun fetchToken(callback: MapsAppCheckTokenCallback) { FirebaseAppCheck.getInstance() .getAppCheckToken(false) .addOnSuccessListener { tokenResult -> callback.onSuccess(tokenResult.token) } .addOnFailureListener { callback.onFailure() } } }
4. adım: Navigation ve App Check API'lerini başlatın
MapsApiSettings.setAppCheckTokenProvider() kullanarak Android için Navigation SDK'sını başlatın ve birleştirilmiş jeton sağlayıcı örneğinizi kaydedin:
Java
import com.google.android.gms.maps.MapsApiSettings; // Register your App Check token provider before initializing Navigation SDK for Android MapsApiSettings.setAppCheckTokenProvider(context, new NavigationTokenProvider());
Kotlin
import com.google.android.gms.maps.MapsApiSettings // Register your App Check token provider before initializing Navigation SDK for Android MapsApiSettings.setAppCheckTokenProvider(context, NavigationTokenProvider())
5. adım: Hata ayıklamayı etkinleştirin (isteğe bağlı)
Android için Navigasyon SDK'sında Uygulama Kontrolü zorunlu kılındıktan sonra, Android için Navigasyon SDK'sına bağlı olan uygulama özellikleriniz simülatörde veya sürekli entegrasyon (CI) ortamında çalışmaz. Bunun nedeni, bu ortamların geçerli cihaz olarak kabul edilmemesidir. Geliştirme ve test sırasında uygulamanızı bu ortamlarda çalıştırmak için uygulamanızın, üretim onay 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.
- Hata ayıklama sağlayıcı bağımlılığını uygulamanızın
build.gradledosyasına ekleyin:Groovy (build.gradle)
dependencies { implementation 'com.google.firebase:firebase-appcheck-debug' }
- Hata ayıklama derlemelerinizde hata ayıklama sağlayıcı fabrikasını kullanmak için App Check'i yapılandırın:
Java
import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory; import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory; if (BuildConfig.DEBUG) { firebaseAppCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance() ); } else { firebaseAppCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance() ); }
Kotlin
import com.google.firebase.Firebase import com.google.firebase.appcheck.appCheck import com.google.firebase.appcheck.debug.DebugAppCheckProviderFactory import com.google.firebase.appcheck.playintegrity.PlayIntegrityAppCheckProviderFactory if (BuildConfig.DEBUG) { Firebase.appCheck.installAppCheckProviderFactory( DebugAppCheckProviderFactory.getInstance(), ) } else { Firebase.appCheck.installAppCheckProviderFactory( PlayIntegrityAppCheckProviderFactory.getInstance(), ) }
- Uygulamanızı bir emülatörde veya hata ayıklama cihazında başlatın. App Check, logcat çıktınıza yerel bir hata ayıklama jetonu yazdırır.
- Bu hata ayıklama jetonunu kopyalayıp Firebase konsoluna kaydedin. 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.