Начните использовать App Check с помощью специального поставщика на платформах Apple.

На этой странице показано, как включить проверку приложений в приложении Apple с помощью собственного поставщика проверки приложений . Включив проверку приложений, вы гарантируете, что только ваше приложение сможет получить доступ к ресурсам Firebase вашего проекта.

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

Прежде чем вы начнете

1. Добавьте библиотеку проверки приложений в свое приложение.

  1. Добавьте зависимость для проверки приложений в Podfile вашего проекта:

    pod 'FirebaseAppCheck'

    Или, альтернативно, вместо этого вы можете использовать Swift Package Manager .

    Кроме того, убедитесь, что вы используете последнюю версию любой клиентской библиотеки службы Firebase, от которой вы зависите.

  2. Запустите pod install и откройте созданный файл .xcworkspace .

2. Внедрите протоколы проверки приложений.

Во-первых, вам необходимо создать классы, реализующие протоколы AppCheckProvider и AppCheckProviderFactory .

Ваш класс AppCheckProvider должен иметь метод getToken(completion:) , который собирает любую информацию, необходимую вашему пользовательскому поставщику проверки приложений в качестве доказательства подлинности, и отправляет ее в службу получения токенов в обмен на токен проверки приложений. SDK App Check занимается кэшированием токенов, поэтому всегда получайте новый токен в своей реализации getToken(completion:) .

Быстрый

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
  }

}

Цель-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 :

Быстрый

class YourCustomAppCheckProviderFactory: NSObject, AppCheckProviderFactory {
  func createProvider(with app: FirebaseApp) -> AppCheckProvider? {
    return YourCustomAppCheckProvider(withFirebaseApp: app)
  }
}

Цель-C

@interface YourCustomAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory>
@end

@implementation YourCustomAppCheckProviderFactory

- (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app {
    return [[YourCustomAppCheckProvider alloc] initWithApp:app];
}

@end

3. Инициализировать проверку приложения

Добавьте следующий код инициализации в делегат приложения или инициализатор приложения:

Быстрый

let providerFactory = YourAppCheckProviderFactory()
AppCheck.setAppCheckProviderFactory(providerFactory)

FirebaseApp.configure()

Цель-C

YourAppCheckProviderFactory *providerFactory =
        [[YourAppCheckProviderFactory alloc] init];
[FIRAppCheck setAppCheckProviderFactory:providerFactory];

[FIRApp configure];

Следующие шаги

После установки библиотеки App Check в ваше приложение начните распространять обновленное приложение среди своих пользователей.

Обновленное клиентское приложение начнет отправлять токены проверки приложений вместе с каждым запросом к Firebase, но продукты Firebase не будут требовать, чтобы токены были действительными, пока вы не включите принудительное применение в разделе «Проверка приложений» консоли Firebase.

Отслеживайте показатели и обеспечивайте принудительное применение

Однако прежде чем включать принудительное применение, вы должны убедиться, что это не повредит работе существующих законных пользователей. С другой стороны, если вы заметили подозрительное использование ресурсов вашего приложения, возможно, вам захочется включить принудительное применение раньше.

Чтобы принять это решение, вы можете просмотреть показатели проверки приложений для используемых вами сервисов:

Включить принудительное выполнение проверки приложений

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

Используйте проверку приложений в средах отладки

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

См. раздел «Использование проверки приложений с поставщиком отладки на платформах Apple» .