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
- Xcode 12.5+
- Uygulama Onay testi için:
- Yeni uygulama tanımlayıcıları oluşturmanıza olanak tanıyan bir Apple Geliştirici hesabı
- Uygulama Onaylama özelliği etkinleştirilmiş, açık bir Uygulama Kimliğine sahip bir uygulama. İşlemle ilgili yardıma ihtiyacınız varsa Uygulama Kimliğini Kaydetme ve Uygulama yeteneklerini etkinleştirme makalelerine bakın.
- App Attest'i destekleyen bir iOS/ıpados cihazı
- Aşağıdakileri içeren Firebase projesi:
- Yapılandırılmış bir iOS uygulaması ( daha fazla bilgi edinin )
- Google Analytics , Uzaktan Yapılandırma ve Uygulama Kontrolü etkin
- Remote Config oluşturma ve yönetme ve Google Analytics'i görüntüleme izinleriyle uygulamanızın ilişkili Firebase projesine erişim
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.
-
NSObject
AppCheckProvider
protokolüne uygun bir alt sınıfı olan bir " MyAppCheckProvider " dosyası oluşturun. - 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:
- 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.
- Parametre adı (anahtar) alanına
AppAttestEnabled
girin. - Veri türü açılır menüsünden Boolean öğesini seçin.
- Varsayılan değer açılır menüsünden false öğesini seçin.
Kaydet'e tıklamadan önce kullanıcıların %10'u için koşullu bir değer oluşturun:
- Yeni ekle > Koşullu değer > Yeni koşul oluştur'u tıklayın.
- Ad alanına bir koşul adı girin.
- Şu durumda uygulanır: altında, Rastgele yüzdelik dilimde Kullanıcı , <= öğesini seçin ve ardından % alanına 10 girin.
- Koşul oluştur'u tıklayın.
App Attest'in kullanıcılarınızın %10'una sunulması için koşullu değeri true olarak ayarlayın.
- Yeni oluşturduğunuz koşul için değeri true olarak ayarlayın.
- Kaydet'i tıklayın.
İş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.
İ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 🎉