1. Pengantar
Anda dapat menggunakan Firebase App Check dengan App Attest untuk melindungi layanan backend dan memverifikasi bahwa permintaan ke layanan Firebase berasal dari aplikasi asli Anda.
Umumnya, disarankan untuk melakukan aktivasi pengguna secara bertahap ke layanan App Attest agar tidak mencapai batas kuota. Untuk informasi selengkapnya, lihat dokumentasi "Mempersiapkan Penggunaan Layanan App Attest" Apple.
Kemampuan untuk merilis update aplikasi secara bertahap menggunakan fitur App Store Connect Apple, seperti yang dijelaskan dalam "Merilis update versi secara bertahap", dapat membuat peluncuran App Check menjadi lebih lancar. Ini adalah solusi yang sangat jelas dan sederhana. Namun, merilis update versi aplikasi secara bertahap tidak memungkinkan Anda mengontrol peluncuran atau mengubah perilaku aplikasi yang sudah diupdate tanpa memublikasikan versi aplikasi baru.
Salah satu cara untuk memiliki kontrol lebih besar atas App Check dengan peluncuran App Attest adalah dengan menggunakan Firebase Remote Config untuk mengaktifkan App Check dengan App Attest untuk sebagian pengguna aplikasi Anda pada satu waktu. Hal ini dapat membantu menghindari throttling dari server pengesahan. Google Analytics dapat digunakan untuk mengamati dampak peluncuran terhadap pengguna.
Hal yang akan Anda pelajari
Dalam codelab multilangkah ini, Anda akan mempelajari cara menggunakan Firebase Remote Config untuk meluncurkan App Check untuk aplikasi Anda.
Codelab ini menggunakan project Firebase berdasarkan aplikasi panduan memulai DatabaseExample dan terintegrasi dengan Firebase App Check, seperti yang dijelaskan dalam codelab Firebase App Check untuk Platform Apple. Aplikasi panduan memulai DatabaseExample memungkinkan pengguna untuk login dan menambahkan postingan menggunakan fitur Firebase Realtime Database.
Anda juga dapat menyesuaikan langkah-langkah dalam codelab ini untuk menguji aplikasi Anda sendiri.
Prasyarat
- Menyelesaikan codelab Firebase App Check untuk Platform Apple
Hal yang akan Anda perlukan
- Xcode 12.5 dan yang lebih baru
- Untuk pengujian App Attest:
- Akun Apple Developer yang dapat Anda gunakan untuk membuat ID aplikasi baru
- Aplikasi yang memiliki ID Aplikasi eksplisit dan mengaktifkan kemampuan App Attest. Lihat artikel Mendaftarkan ID Aplikasi dan Mengaktifkan kemampuan aplikasi jika Anda memerlukan bantuan terkait prosesnya.
- Perangkat iOS/iPadOS yang mendukung App Attest
- Project Firebase dengan:
- Aplikasi iOS yang dikonfigurasi (pelajari lebih lanjut)
- Google Analytics, Remote Config, dan App Check diaktifkan
- Akses ke project Firebase yang terkait dengan aplikasi Anda, dengan izin untuk membuat dan mengelola Remote Config serta untuk melihat Google Analytics
2. Membuat penyedia pengesahan kustom
Pada langkah ini, kita akan membuat class penyedia kustom untuk menyediakan token hanya jika App Attest diaktifkan. Remote Config mengandalkan instance aplikasi Firebase yang dikonfigurasi, dan penyedia kustom yang Anda terapkan pada langkah ini berfungsi sebagai placeholder untuk menyelesaikan konfigurasi.
Untuk menyelesaikan langkah-langkah berikut, Anda harus menambahkan Firebase
, FirebaseRemoteConfig
, dan FirebaseAnalytics
di bagian Framework, Library, dan Konten Tersemat aplikasi Anda di Xcode. Untuk contoh cara melakukannya, lihat codelab Pemeriksaan Aplikasi Firebase untuk platform Apple.
- Buat file "MyAppCheckProvider" yang merupakan subclass dari
NSObject
yang sesuai dengan protokolAppCheckProvider
. - Sertakan metode
getToken()
kosong yang akan Anda isi nanti.
Lihat contoh kode berikut untuk class penyedia kustom dengan metode getToken()
kosong.
// MyAppCheckProvider.swift
import Firebase
import FirebaseAnalytics
import FirebaseAppCheck
import FirebaseRemoteConfig
class MyAppCheckProvider: NSObject, AppCheckProvider {
func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {}
}
Untuk membuat instance AppAttestProvider
, Anda harus meneruskan instance FirebaseApp
yang sesuai. Buat properti tersimpan untuk properti tersebut dan terima sebagai parameter penginisialisasi:
// 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) {}
}
Meneruskan permintaan token ke penyedia App Attest
Sekarang Anda sudah memiliki semuanya untuk meneruskan permintaan token ke penyedia App Attest di metode getToken()
.
Catatan: Pelajari metode getToken()
lebih lanjut dalam Referensi Framework FirebaseAppCheck.
Tambahkan kode berikut ke metode getToken()
Anda:
// 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)
}
Kode sebelumnya memeriksa parameter boolean AppAttestEnabled
Remote Config (parameter Remote Config ini akan dibuat nanti di codelab). Jika nilainya salah, kode akan gagal, yang menunjukkan bahwa Pemeriksaan Aplikasi tidak diluncurkan di perangkat saat ini. Jika nilainya true, kode akan mencoba mendapatkan penyedia App Attest dan gagal jika tidak bisa mendapatkannya. Jika pemeriksaan error ini lulus, kode akan meneruskan permintaan token ke penyedia App Attest.
Menambahkan peristiwa Analytics
Dengan menambahkan peristiwa Analytics, Anda mendapatkan insight yang lebih baik tentang seberapa sukses peluncuran App Check. Analytics akan membantu menentukan apakah App Attest harus diaktifkan untuk audiens yang lebih luas.
Catat dua peristiwa Analytics: AppAttestSuccess jika berhasil, dan AppAttestFailure jika gagal. Dua peristiwa Analytics ini dapat membantu melacak keberhasilan peluncuran App Check dan membantu Anda memutuskan apakah peluncuran yang lebih besar harus dilanjutkan.
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. Memperbarui class Provider Factory
Setelah menerapkan logika untuk meneruskan permintaan token ke penyedia App Attest dan menambahkan beberapa peristiwa Analytics, Anda perlu memperbarui MyAppCheckProviderFactory.class
yang dibuat di codelab App Check untuk Platform Apple. Class ini akan menargetkan penyedia debug App Check untuk simulator, atau menargetkan penyedia kustom Anda.
Edit kode berikut di class MyAppCheckProviderFactory
yang Anda buat di codelab Firebase App Check untuk platform Apple:
// 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
}
}
Pastikan Anda telah menetapkan AppCheckProviderFactory
sebelum mengonfigurasi FirebaseApp
:
// DatabaseExampleApp.swift
import SwiftUI
import Firebase
import FirebaseAppCheck
@main
struct DatabaseExampleApp: App {
init() {
AppCheck.setAppCheckProviderFactory(MyAppCheckProviderFactory())
FirebaseApp.configure()
}
// ...
}
4. Menambahkan parameter Remote Config di Firebase console
Sekarang, Anda akan menambahkan parameter Remote Config AppAttestEnabled ke Firebase console. Metode getToken
Anda memerlukan parameter ini.
Untuk membuat parameter Remote Config di Firebase console :
- Buka Remote Config untuk project Anda lalu klik Add parameter. Jika ini pertama kalinya Anda menggunakan Remote Config, klik Create configuration.
- Di kolom Nama parameter (kunci), masukkan
AppAttestEnabled
. - Dari menu drop-down Jenis data, pilih Boolean.
- Dari drop-down Nilai default, pilih false.
Sebelum mengklik Simpan, buat nilai kondisional untuk 10% pengguna:
- Klik Tambahkan baru > Nilai bersyarat > Buat kondisi baru.
- Di kolom Nama, masukkan nama kondisi.
- Di bagian Berlaku jika..., pilih Pengguna dalam persentil acak, <=, lalu masukkan 10 di kolom %.
- Klik Buat condition.
Tetapkan nilai kondisional ke true sehingga App Attest diluncurkan ke 10% pengguna Anda.
- Tetapkan nilai ke true untuk kondisi yang baru saja Anda buat.
- Klik Save.
Setelah selesai, publikasikan perubahan Remote Config.
Menguji peluncuran di perangkat Anda
Untuk menguji berbagai nilai flag Remote Config di perangkat tanpa mengubah kode aplikasi, konfigurasikan eksperimen pada parameter AppAttestEnabled dengan mengikuti tutorial Membuat Eksperimen Firebase Remote Config dengan A/B Testing. Bagian tutorial "Memvalidasi eksperimen di perangkat pengujian" menjelaskan cara menetapkan nilai yang berbeda untuk perangkat pengujian.
Langkah terakhir adalah menggunakan Google Analytics untuk memantau keberhasilan peluncuran App Attest Anda.
5. Meninjau keberhasilan peluncuran AppCheck
Anda dapat mengukur keberhasilan peluncuran di dasbor Peristiwa Analytics. Perhatikan peristiwa AppAttestSuccess dan AppAttestFailure. Mungkin perlu waktu hingga 24 jam untuk melihat peristiwa di dasbor. Atau, Anda dapat mengaktifkan proses debug dan menggunakan DebugView untuk melihat peristiwa debug dengan lebih cepat.
Secara opsional, Anda dapat memantau dasbor Crashlytics untuk mengetahui peningkatan rasio error. Untuk informasi selengkapnya tentang cara menambahkan Crashlytics ke aplikasi Anda, lihat Memulai Firebase Crashlytics.
Setelah Anda melihat sebagian besar peristiwa AppAttestSuccess dan beberapa peristiwa AppAttestFailure, itu adalah pertanda baik bahwa Anda dapat meningkatkan persentase pengguna yang mengaktifkan App Attest dengan mengubah kondisi di parameter Remote Config AppAttestEnabled.
Opsional: Memanfaatkan Audiens Google Analytics
Jika ingin memanfaatkan peristiwa Analytics AppAttestEnabled lebih lanjut, Anda dapat membuat Audiens Analytics untuk melacak pengguna dengan AppAttestEnabled ditetapkan ke benar (true).
App Attest dirilis dengan iOS 14.0. Beberapa pengguna Anda mungkin tidak menggunakan rilis ini, sehingga tidak memenuhi syarat untuk App Attest. Anda dapat mencatat peristiwa Analytics lain untuk melacak pengguna ini, lalu menargetkan audiens tersebut untuk metode pengesahan lain, seperti DeviceCheck.
Opsional: Menggunakan Crashlytics untuk memantau error
Untuk lebih memahami stabilitas aplikasi Anda selama peluncuran, gunakan Firebase Crashlytics untuk memantau error dan non-fatal.
6. Selamat!
Anda berhasil meluncurkan App Check dengan Remote Config 🎉