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

Firebase Uygulama Kontrolü, yasal uygulamalarınız dışındaki kaynaklardan gelen trafiği engelleyerek uygulamanızdan Google Haritalar Platformu'na yapılan çağrılar için koruma sağlar. Bunu yapmak için Play Integrity gibi bir onay sağlayıcıdan uygulama veya cihazın orijinalliğinin değerlendirilmesini ister. 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ü, Android için Navigasyon SDK'sının iki farklı alanını korur: ana navigasyon işlevi ve kesinti raporlama.

Uygulama Kontrolü, kötü amaçlı veya yetkisiz kaynaklardan gelen ana Android için Navigasyon SDK'sı isteklerini engellemeye yardımcı olur. Bu sayede projeniz faturalandırma sahtekarlığına ve kota aşımına karşı korunur.

Kesinti raporlama

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? Android 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 için kullanılır. Bu sayede geri bildirimin güven düzeyi artar ve canlı harita etkisi açısından değerlendirilebilir.
  • 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, kullanıcılarınızın bildirimde bulunmaya ve oy vermeye devam edebileceği ancak bildirimlerinin haritada görünme veya diğer sürücülerin rotalarını etkileme olasılığının daha düşük olduğu ve ek doğrulama gerektireceği anlamına gelir.

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, Android için Navigasyon SDK'sının rootlanmış veya jailbreak'li telefonlar gibi güvenilir olmayan cihazlarda çalışmasını engeller. Bu cihazları desteklemek için özel bir onay sağlayıcı dağıtın.
  • GMS olmayan Android cihazlar: Android cihazların Play Integrity için Google Mobil Hizmetleri'ni (GMS) çalıştırması gerekir. GMS dışı Android cihazları desteklemeyi planlıyorsanız ö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 gerekenler

  • Onay Sağlayıcı Kotaları: Önerdiğimiz onay sağlayıcı olan Play Integrity'nin Standart API kullanım katmanı için günlük çağrı sınırı vardır. Çağrı sınırları hakkında daha fazla bilgi için Google Play Integrity geliştirici belgelerindeki Kurulum sayfasına bakın.
  • Başlatma Gecikmesi: Çoğu durumda, Uygulama Kontrolü jetonları cihazda önbelleğe alındığı için 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

  • Android için Navigasyon SDK'sı 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 belgelerindeki talimatları uygulayın. google-services.json dosyanızı projenizin uygulama düzeyindeki dizinine ekleyin.

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

Uygulama Kontrolü 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 Uygulama Kontrolü'nü 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ı, Uygulama Kontrolü jetonlarını Firebase Uygulama Kontrolü'nden eşzamansız olarak getirir ve MapsAppCheckTokenCallback kullanarak Android için Navigasyon SDK'sı ağ yığınına 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

Android için Navigasyon SDK'sını başlatın ve birleştirilmiş jeton sağlayıcı örneğinizi MapsApiSettings.setAppCheckTokenProvider() kullanarak 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ştirme (isteğe bağlı)

Android için Navigasyon SDK'sında Uygulama Kontrolü zorunlu kılındıktan sonra, uygulamanızın Android 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 cihaz 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. Uygulamanızın build.gradle dosyasına hata ayıklama sağlayıcısı bağımlılığını ekleyin:

    Groovy (build.gradle)

    dependencies {
        implementation 'com.google.firebase:firebase-appcheck-debug'
    }
  2. Uygulama Kontrolü'nü, hata ayıklama derlemelerinizde hata ayıklama sağlayıcı fabrikasını kullanacak şekilde 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(),
        )
    }
  3. Uygulamanızı bir emülatörde veya hata ayıklama cihazında başlatın. Uygulama Kontrolü, logcat çıkışınıza yerel bir hata ayıklama jetonu yazdırır.
  4. 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ı belgelerini inceleyin.

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

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.