Firebase Remote Config'i kullanarak Firebase Uygulama Kontrolü'nü kademeli olarak kullanıma sunun

1. Giriş

Arka uç hizmetlerinizi korumak ve Firebase hizmetlerine yönelik isteklerin orijinal uygulamanızdan geldiğini doğrulamak için Firebase Uygulama Kontrolü'nü Uygulama Attest ile birlikte kullanabilirsiniz.

Kota sınırlarına ulaşmamak için genellikle kullanıcıların App Attest hizmetine kademeli olarak katılması önerilir. Daha fazla bilgi için Apple'ın " Uygulama Onay Hizmetini Kullanmaya Hazırlanma " belgelerine bakın.

" Bir sürüm güncellemesini aşamalar halinde yayınlama " bölümünde açıklandığı gibi, Apple'ın App Store Connect özelliğini kullanarak uygulama güncellemelerini aşamalı olarak yayınlama yeteneği, Uygulama Kontrolü dağıtımını daha sorunsuz hale getirebilir. Bu basit ve basit bir çözümdür. Ancak bir uygulama sürümü güncellemesini aşamalı olarak yayınlamak, yeni bir uygulama sürümü yayınlamadan mevcut, güncellenmiş uygulamaların kullanıma sunulmasını kontrol etmenize veya davranışını değiştirmenize izin vermez.

App Attest ile Uygulama Kontrolü dağıtımınız üzerinde daha fazla kontrole sahip olmanın bir yolu, aynı anda uygulama kullanıcılarınızın belirli bir yüzdesi için App Attest ile Uygulama Kontrolü'nü etkinleştirmek üzere Firebase Remote Config'i kullanmaktır. Bu, doğrulama sunucularından kaynaklanan kısıtlamaların önlenmesine yardımcı olabilir. Google Analytics, kullanıma sunma işleminin kullanıcılar üzerindeki etkisini gözlemlemek için kullanılabilir.

Ne öğreneceksin

Bu çok adımlı codelab'de, uygulamanız için Uygulama Kontrolü'nü kullanıma sunmak üzere Firebase Remote Config'i nasıl kullanacağınızı öğreneceksiniz.

Bu codelab, DatabaseExample hızlı başlangıç ​​uygulamasını temel alan ve Firebase App Check for Apple Platforms kod laboratuvarında açıklandığı gibi Firebase App Check ile entegre bir Firebase projesi kullanır. DatabaseExample hızlı başlangıç ​​uygulaması, kullanıcıların Firebase Realtime Database'in özelliklerini kullanarak oturum açmasına ve gönderi eklemesine olanak tanır.

Kendi uygulamanızı test etmek için bu codelab'deki adımları da uyarlayabilirsiniz.

Önkoşullar

İhtiyacınız olan şey

2. Özel bir doğrulama sağlayıcısı oluşturun

Bu adımda, yalnızca App Attest etkinleştirildiğinde belirteç sağlamak için özel bir sağlayıcı sınıfı oluşturacağız. Remote Config, yapılandırılmış bir Firebase uygulama örneğine dayanır ve bu adımda uyguladığınız özel sağlayıcı, yapılandırmayı tamamlamak için yer tutucu görevi görür.

Aşağıdaki adımları tamamlamak için Xcode'daki uygulamanızın Çerçeveler, Kitaplıklar ve Gömülü İçerik bölümüne Firebase , FirebaseRemoteConfig ve FirebaseAnalytics eklemeniz gerekir. Bunun nasıl yapılacağına ilişkin bir örnek için Apple platformları codelab için Firebase Uygulama kontrolüne bakın.

  1. NSObject AppCheckProvider protokolüne uygun bir alt sınıfı olan bir " MyAppCheckProvider " dosyası oluşturun.
  2. Daha sonra dolduracağınız boş bir getToken() yöntemini ekleyin.

Boş getToken() yöntemine sahip özel sağlayıcı sınıfı için aşağıdaki örnek koda bakın.

// MyAppCheckProvider.swift

import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig

class MyAppCheckProvider: NSObject, AppCheckProvider {
  func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {}
}

AppAttestProvider oluşturmak için karşılık gelen FirebaseApp örneğini aktarmanız gerekir. Bunun için saklı bir özellik oluşturun ve bunu başlatıcı parametresi olarak kabul edin:

// MyAppCheckProvider.swift

import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig

class MyAppCheckProvider: NSObject, AppCheckProvider {
  // Firebase app instance served by the provider.
  let firebaseApp: FirebaseApp

  // The App Check provider factory should pass the FirebaseApp instance.
  init(app: FirebaseApp) {
    self.firebaseApp = app
    super.init()
  }

  func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {}
}

Belirteç isteğini App Attest sağlayıcısına iletin

Artık belirteç isteğini getToken() yönteminizdeki Uygulama Onay sağlayıcısına iletmek için her şeye sahipsiniz.

Not: FirebaseAppCheck Çerçeve Referansı'ndan getToken() yöntemi hakkında daha fazla bilgi edinin.

getToken() yönteminize aşağıdaki kodu ekleyin:

// MyAppCheckProvider.swift

import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig

class MyAppCheckProvider: NSObject, AppCheckProvider {
  // Firebase app instance served by the provider.
  let firebaseApp: FirebaseApp

  // The App Check provider factory should pass the FirebaseApp instance.
  init(app: FirebaseApp) {
    self.firebaseApp = app
    super.init()
  }

  private lazy var appAttestProvider = AppAttestProvider(app: firebaseApp)

  func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
    // Fetch App Attest flag from Remote Config
    let remoteConfig = RemoteConfig.remoteConfig(app: firebaseApp)
    remoteConfig.fetchAndActivate { remoteConfigStatus, error in
      // Get App Attest flag value
      let appAttestEnabled = remoteConfig.configValue(forKey: "AppAttestEnabled").boolValue

      guard appAttestEnabled else {
        // Skip attestation if App Attest is disabled. Another attestation
        // method like DeviceCheck may be used instead of just skipping.
        handler(nil, MyProviderError.appAttestIsDisabled)
        return
      }

      // Try to obtain an App Attest provider instance and fail if cannot
      guard let appAttestProvider = self.appAttestProvider else {
        handler(nil, MyProviderError.appAttestIsUnavailable)
        return
      }

      // If App Attest is enabled for the app instance, then forward the
      // Firebase App Check token request to the App Attest provider
      appAttestProvider.getToken(completion: handler)
    }
  }
}

enum MyProviderError: Error {
  case appAttestIsDisabled
  case appAttestIsUnavailable
  case unexpected(code: Int)
}

Önceki kod, Remote Config AppAttestEnabled boolean parametresini kontrol eder (bu Remote Config parametresi daha sonra codelab'de oluşturulacaktır). Değer yanlışsa kod başarısız olur ve Uygulama Kontrolü'nün geçerli cihazda kullanıma sunulmadığını gösterir. Değer doğruysa kod bir Uygulama Onay sağlayıcısı almaya çalışır ve bunu başaramazsa başarısız olur. Bu hata kontrolleri başarılı olursa kod, belirteç isteğini Uygulama Onay sağlayıcısına iletir.

Analytics etkinlikleri ekleme

Analytics etkinliklerini ekleyerek Uygulama Kontrolü kullanıma sunma işleminin ne kadar başarılı olduğuna ilişkin daha iyi analizler elde edersiniz. Analytics, Uygulama Attest'in daha geniş bir hedef kitle için etkinleştirilip etkinleştirilmeyeceğinin belirlenmesine yardımcı olacaktır.

İki Analytics olayını günlüğe kaydedin: Başarı durumunda AppAttestSuccess ve başarısızlık durumunda AppAttestFailure . Bu iki Analytics etkinliği, Uygulama Kontrolü kullanıma sunma işleminizin başarısını takip etmenize ve daha büyük bir kullanıma sunma işleminin devam edip etmeyeceğine karar vermenize yardımcı olabilir.

func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
  // Fetch Remote Config.
  let remoteConfig = RemoteConfig.remoteConfig(app: firebaseApp)
  remoteConfig.fetchAndActivate { remoteConfigStatus, error in
    // Get App Attest flag value from Remote Config.
    let appAttestEnabled = remoteConfig.configValue(forKey: "AppAttestEnabled").boolValue

    guard appAttestEnabled else {
      // Skip attestation if App Attest is disabled. Another attestation
      // method like DeviceCheck may be used instead of just skipping.
      handler(nil, MyProviderError.appAttestIsDisabled)
      return
    }

    // Try to obtain an App Attest provider instance and fail otherwise.
    guard let appAttestProvider = self.appAttestProvider else {
      handler(nil, MyProviderError.appAttestIsUnavailable)
      return
    }

    // If App Attest is enabled for the app instance, then forward the
    // Firebase App Check token request to the App Attest provider.
    appAttestProvider.getToken { token, error in
      // Log an Analytics event to track attestation success rate.
      let appAttestEvent: String
      if (token != nil && error == nil) {
        appAttestEvent = "AppAttestSuccess"
      } else {
        appAttestEvent = "AppAttestFailure"
      }
      Analytics.logEvent(appAttestEvent, parameters: nil)

      // Pass the result to the handler
      handler(token, error)
    }
  }
}

3. Sağlayıcı Fabrikası sınıfını güncelleyin

Belirteç isteğini App Attest sağlayıcısına iletme mantığını uyguladıktan ve bazı Analytics olaylarını ekledikten sonra, App Check for Apple Platforms kod laboratuvarında oluşturduğunuz MyAppCheckProviderFactory.class güncellemeniz gerekir. Bu sınıf, simülatörler için Uygulama Kontrolü hata ayıklama sağlayıcısını hedefleyecek, aksi takdirde özel sağlayıcınızı hedefleyecektir.

Firebase App Check for Apple platformları codelab'inde oluşturduğunuz MyAppCheckProviderFactory sınıfında aşağıdaki kodu düzenleyin:

// MyAppCheckProviderFactory.swift

import Firebase

class MyAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
      #if targetEnvironment(simulator)
      // App Attest is not available on simulators.
      // Use a debug provider.
      let provider = AppCheckDebugProvider(app: app)

      // Print only locally generated token to avoid a valid token leak on CI.
      print("Firebase App Check debug token: \(provider?.localDebugToken() ?? "" )")

      return provider
      #else
      if #available(iOS 14.0, *) {
        // Use your custom App Attest provider on real devices.
        return MyAppCheckProvider(app: app)
      } else {
        return DeviceCheckProvider(app: app)
      }
      #endif
  }
}

FirebaseApp yapılandırmadan önce AppCheckProviderFactory ayarladığınızı doğrulayın:

// DatabaseExampleApp.swift

import SwiftUI
import Firebase
import FirebaseAppCheck

@main
struct DatabaseExampleApp: App {
  init() {
    AppCheck.setAppCheckProviderFactory(MyAppCheckProviderFactory())
    FirebaseApp.configure()
  }

  // ...
}

4. Firebase konsoluna bir Remote Config parametresi ekleyin

Artık Remote Config parametresi AppAttestEnabled'ı Firebase konsoluna ekleyeceksiniz. getToken yönteminiz bu parametreyi gerektirir.

Firebase konsolunda Remote Config parametresi oluşturmak için:

  1. Projeniz için Remote Config'i açın ve Parametre ekle öğesine tıklayın. Remote Config'i ilk kez kullanıyorsanız Yapılandırma oluştur'u tıklayın.
  2. Parametre adı (anahtar) alanına AppAttestEnabled girin.
  3. Veri türü açılır menüsünden Boolean öğesini seçin.
  4. Varsayılan değer açılır menüsünden false öğesini seçin.

Firebase konsolunda Remote Config Parameter oluşturma

Kaydet'e tıklamadan önce kullanıcıların %10'u için koşullu bir değer oluşturun:

  1. Yeni ekle > Koşullu değer > Yeni koşul oluştur'u tıklayın.
  2. Ad alanına bir koşul adı girin.
  3. Şu durumda uygulanır: altında, Rastgele yüzdelik dilimde Kullanıcı , <= öğesini seçin ve ardından % alanına 10 girin.
  4. Koşul oluştur'u tıklayın.

Firebase konsolunda Remote Config koşulu tanımlama

App Attest'in kullanıcılarınızın %10'una sunulması için koşullu değeri true olarak ayarlayın.

  1. Yeni oluşturduğunuz koşul için değeri true olarak ayarlayın.
  2. Kaydet'i tıklayın.

Firebase konsolunda Remote Config parametresini inceleme

İşiniz bittiğinde Remote Config değişikliklerini yayınlayın.

Cihazınızda kullanıma sunulmasını test edin

Uygulama kodunu değiştirmeden cihazınızdaki farklı Remote Config bayrağı değerlerini test etmek için A/B Testi ile Firebase Remote Config Denemeleri Oluşturma eğiticisini izleyerek AppAttestEnabled parametresinde bir deneme yapılandırın. " Deneyinizi bir test cihazında doğrulayın " eğitim bölümü, test cihazınıza nasıl farklı değerler atayacağınızı açıklar.

Son adım, App Attest kullanıma sunma işleminizin başarısını izlemek için Google Analytics'i kullanmaktır.

5. AppCheck kullanıma sunma işleminizin başarısını gözden geçirin

Kullanıma sunma işleminizin başarısını Analytics Etkinlikleri kontrol panelinde ölçebilirsiniz. AppAttestSuccess ve AppAttestFailure olaylarını izleyin. Etkinliklerin kontrol panelinde görülmesi 24 saat kadar sürebilir. Alternatif olarak, hata ayıklamayı etkinleştirebilir ve hata ayıklama olaylarını daha hızlı görmek için DebugView'ı kullanabilirsiniz.

İsteğe bağlı olarak, kilitlenme oranlarındaki artışları Crashlytics kontrol panelinden izleyebilirsiniz. Crashlytics'i uygulamanıza ekleme hakkında daha fazla bilgi için bkz. Firebase Crashlytics'i kullanmaya başlayın .

Çoğunlukla AppAttestSuccess olaylarını ve az sayıda AppAttestFailure olayını gördüğünüzde, Remote Config parametresi AppAttestEnabled'daki koşulu değiştirerek App Attest'in etkin olduğu kullanıcıların yüzdesini artırabileceğiniz iyi bir işarettir.

Firebase konsolunda Analytics etkinliklerini inceleme

İsteğe bağlı: Google Analytics Hedef Kitlesinden Yararlanın

AppAttestEnabled Analytics etkinliğinden daha fazla yararlanmak istiyorsanız AppAttestEnabled true olarak ayarlanmış kullanıcıları izlemek için bir Analytics Hedef Kitlesi oluşturabilirsiniz.

App Attest iOS 14.0 ile yayınlandı. Kullanıcılarınızdan bazıları bu sürümde olmayabilir ve bu nedenle Uygulama Onayına uygun olmayabilir. Bu kullanıcıları izlemek için başka bir Analytics etkinliğini günlüğe kaydedebilir, ardından bu kitleyi DeviceCheck gibi başka bir doğrulama yöntemi için hedefleyebilirsiniz.

İsteğe bağlı: Kilitlenmeleri izlemek için Crashlytics'i kullanın

Kullanıma sunma sırasında uygulamanızın kararlılığını daha iyi anlamak amacıyla kilitlenmeleri ve ölümcül olmayan durumları izlemek için Firebase Crashlytics'i kullanın.

6. Tebrikler!

Remote Config ile Uygulama Kontrolü'nü başarıyla kullanıma sundunuz 🎉

Ek kaynaklar: