Как начать использовать App Check с собственным поставщиком на платформах Apple

В этой статье рассказывается, как включить App Check в приложении для iOS, используя собственного поставщика App Check. Когда вы включаете App Check, только ваше приложение может получить доступ к ресурсам Firebase проекта.

Если вы хотите использовать App Check со встроенными поставщиками, ознакомьтесь с документацией по App Check с App Attest и App Check с DeviceCheck.

Подготовка

1. Как добавить библиотеку App Check в приложение

  1. Для установки зависимостей 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

Когда вы поймете, как App Check повлияет на пользователей, и будете готовы к переходу, включите принудительное применение App Check:

Используйте App Check в среде отладки

Если после регистрации приложения для использования App Check вы хотите запустить его в среде, которую App Check обычно не считает действительной, например в симуляторе во время разработки или в среде непрерывной интеграции (CI), вы можете создать отладочную сборку приложения, в которой вместо реального поставщика аттестации используется отладочный поставщик App Check.

Подробнее о том, как использовать App Check с поставщиком отладочной информации на платформах Apple…