В этой статье рассказывается, как включить App Check в приложении Apple, используя собственного поставщика 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 (New).
- Отслеживайте показатели запросов 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 (New).
- Включите принудительное применение App Check для Cloud Functions.
Используйте App Check в средах отладки
Если после регистрации приложения в App Check вы хотите запустить его в среде, которую App Check обычно не классифицирует как действительную, например в симуляторе во время разработки или в среде непрерывной интеграции, вы можете создать отладочную сборку приложения, которая использует отладочный поставщик App Check вместо реального поставщика аттестации.
Подробнее о том, как использовать App Check с отладочным поставщиком на платформах Apple…