Catch up on highlights from Firebase at Google I/O 2023. Learn more

Начните использовать проверку приложений с помощью специального поставщика на платформах Apple,Начните использовать проверку приложений с помощью специального поставщика на платформах Apple

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

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

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

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

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

    pod 'FirebaseAppCheck'

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

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

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

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

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

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

Быстрый

class YourCustomAppCheckProvider: NSObject, AppCheckProvider {
    var app: FirebaseApp

    init(withFirebaseApp app: FirebaseApp) {
        self.app = app
        super.init()
    }

    func getToken(completion handler: @escaping (AppCheckToken?, Error?) -> Void) {
        DispatchQueue.main.async {
            // Logic to exchange proof of authenticity for an App Check token.
            // ...

            // Create AppCheckToken object.
            let exp = Date(timeIntervalSince1970: expirationFromServer)
            let token = AppCheckToken(
                token: tokenFromServer,
                expirationDate: exp
            )

            // Pass the token or error to the completion handler.
            handler(token, nil)
        }
    }
}

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

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

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

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

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

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

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

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

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