В этой статье рассказывается, как включить App Check в приложении для iOS, используя собственного поставщика App Check. Когда вы включаете App Check, только ваше приложение может получить доступ к ресурсам Firebase проекта.
Если вы хотите использовать App Check со встроенными поставщиками, ознакомьтесь с документацией по App Check с App Attest и App Check с DeviceCheck.
Подготовка
Добавьте Firebase в проект для Apple, если вы ещё этого не сделали.
Реализуйте логику на стороне сервера для собственного поставщика App Check.
1. Как добавить библиотеку App Check в приложение
Для установки зависимостей Firebase и управления ими используйте Swift Package Manager.
Откройте проект приложения в Xcode и перейдите в меню File (Файл) > Add Packages (Добавить пакеты), добавьте хранилище Firebase SDK для платформ Apple (
https://github.com/firebase/firebase-ios-sdk) и выберите библиотеку FirebaseAppCheck.
2. Реализуйте протоколы App Check
Сначала вам нужно создать классы, реализующие протоколы AppCheckProvider и AppCheckProviderFactory.
В вашем классе AppCheckProvider должен быть метод getToken(completion:), который собирает информацию, необходимую вашему поставщику App Check для подтверждения подлинности, и отправляет ее в службу получения токенов в обмен на токен App Check. SDK App Check обрабатывает кеширование токенов, поэтому всегда получайте новый токен в реализации getToken(completion:).
Swift
class YourCustomAppCheckProvider: NSObject, AppCheckProvider { var app: FirebaseApp init(withFirebaseApp app: FirebaseApp) { self.app = app super.init() } func getToken() async throws -> AppCheckToken { let getTokenTask = Task { () -> AppCheckToken in // ... // Create AppCheckToken object. let exp = Date(timeIntervalSince1970: expirationFromServer) let token = AppCheckToken( token: tokenFromServer, expirationDate: exp ) if Date() > exp { throw NSError(domain: "ExampleError", code: 1, userInfo: nil) } return token } return try await getTokenTask.value } }
Objective-C
@interface YourCustomAppCheckProvider : NSObject <FIRAppCheckProvider> @property FIRApp *app; - (id)initWithApp:(FIRApp *)app; @end @implementation YourCustomAppCheckProvider - (id)initWithApp:app { self = [super init]; if (self) { self.app = app; } return self; } - (void)getTokenWithCompletion:(nonnull void (^)(FIRAppCheckToken * _Nullable, NSError * _Nullable))handler { dispatch_async(dispatch_get_main_queue(), ^{ // Logic to exchange proof of authenticity for an App Check token. // ... // Create FIRAppCheckToken object. NSTimeInterval exp = expirationFromServer; FIRAppCheckToken *token = [[FIRAppCheckToken alloc] initWithToken:tokenFromServer expirationDate:[NSDate dateWithTimeIntervalSince1970:exp]]; // Pass the token or error to the completion handler. handler(token, nil); }); } @end
Также реализуйте класс AppCheckProviderFactory, который создает экземпляры реализации AppCheckProvider:
Swift
class YourCustomAppCheckProviderFactory: NSObject, AppCheckProviderFactory { func createProvider(with app: FirebaseApp) -> AppCheckProvider? { return YourCustomAppCheckProvider(withFirebaseApp: app) } }
Objective-C
@interface YourCustomAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory> @end @implementation YourCustomAppCheckProviderFactory - (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app { return [[YourCustomAppCheckProvider alloc] initWithApp:app]; } @end
3. Инициализация App Check
Добавьте следующий код инициализации в делегат приложения или инициализатор приложения:
Swift
let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory) FirebaseApp.configure()
Objective-C
YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory]; [FIRApp configure];
Дальнейшие действия
После установки библиотеки App Check в приложении начните распространять обновленную версию среди пользователей.
Обновленное клиентское приложение начнет отправлять токены App Check вместе с каждым запросом к Firebase, но продукты Firebase не будут требовать действительности токенов, пока вы не включите принудительное применение в разделе App Check консоли Firebase.
Отслеживание показателей и включение принудительного применения
Однако перед тем, как включить принудительное применение, убедитесь, что это не помешает работе ваших существующих законных пользователей. Если вы заметили подозрительное использование ресурсов приложения, рекомендуем включить принудительное применение правил раньше.
Чтобы принять решение, изучите App Check показатели для используемых вами сервисов:
- Отслеживайте показатели запросов App Check для Firebase AI Logic, SQL Connect, Realtime Database, Cloud Firestore, Cloud Storage, Authentication, Google Identity для iOS, Maps JavaScript API и Places API (новый).
- Отслеживайте показатели запросов App Check для Cloud Functions.
Как включить принудительное применение App Check
Когда вы поймете, как App Check повлияет на пользователей, и будете готовы к переходу, включите принудительное применение App Check:
- Включите принудительное применение App Check для Firebase AI Logic, SQL Connect, Realtime Database, Cloud Firestore, Cloud Storage, Authentication, Google Identity для iOS, Maps JavaScript API и Places API (новой версии).
- Включите принудительное применение App Check для Cloud Functions.
Используйте App Check в среде отладки
Если после регистрации приложения для использования App Check вы хотите запустить его в среде, которую App Check обычно не считает действительной, например в симуляторе во время разработки или в среде непрерывной интеграции (CI), вы можете создать отладочную сборку приложения, в которой вместо реального поставщика аттестации используется отладочный поставщик App Check.
Подробнее о том, как использовать App Check с поставщиком отладочной информации на платформах Apple…