Как использовать проверку приложений для защиты Navigation SDK для iOS
Проверка приложений Firebase защищает вызовы платформы Google Карт из вашего приложения, блокируя трафик из других источников. Для этого он запрашивает оценку подлинности приложения или устройства у поставщика аттестации, например App Attest. Интегрировав приложение с Проверкой приложений, вы защитите его от вредоносных и несанкционированных запросов, а значит и от несанкционированных списаний средств. Проверка приложений также значительно улучшает отчеты о сбоях в реальном времени в экосистеме приложений для автопарка, что приносит пользу всем водителям, использующим ваше приложение. Подробнее об отчетах о сбоях…
Зачем использовать проверку приложений?
Проверка приложений защищает две разные области Navigation SDK для iOS: основную функцию навигации и отчеты о сбоях.
Навигация
Проверка приложений помогает блокировать основные запросы Navigation SDK для iOS из вредоносных или неавторизованных источников. Это защищает ваш проект от мошеннического списания средств и исчерпания квот.
Сообщения о сбоях
Мы настоятельно рекомендуем использовать Проверку приложений, если в вашем приложении есть функции голосования и отправки сообщений о сбоях в реальном времени. Включив Проверку приложений, вы обеспечите водителей самыми точными маршрутами, учитывающими все отзывы в реальном времени.
Почему Проверка приложений важна для отчетов
- Высокий уровень доверия для перекрытых участков. События, влияющие на маршрут, такие как перекрытые участки дорог, могут значительно изменить поведение прокладки маршрута для всех водителей. Чтобы защитить карту от потенциального вандализма, спама и неточных сообщений, инфраструктура модерации Google для перекрытых участков полагается на надежные сигналы целостности устройства и целостности приложения.
- Как Проверка приложений проверяет отчеты. Отчеты пользователей и голоса, отправленные из Navigation SDK для iOS, включают токен Проверки приложений, который используется серверной частью Google для подтверждения легитимности отзыва, повышения уровня доверия к нему и оценки его влияния на онлайн-карту.
- Последствия отказа от Проверки приложений. Жалобы, отправленные без действительного токена Проверки приложений, оцениваются по модели с более низким уровнем доверия и могут обрабатываться только как негласные сигналы. Это значит, что пользователи по-прежнему могут отправлять сообщения и голосовать, но их сообщения с меньшей вероятностью будут видны на карте или повлияют на маршруты других водителей и потребуют дополнительной проверки.
Подходит ли мне Проверка приложений?
Проверка приложений рекомендуется в большинстве случаев, однако она не требуется или не поддерживается в следующих сценариях:
- Частные или экспериментальные приложения. Если ваше приложение недоступно широкой публике, проверка приложений не требуется.
- Взломанные устройства. Рекомендуемые поставщики аттестации не позволяют Navigation SDK для iOS работать на ненадежных устройствах, например телефонах с root-доступом или незаконно разблокированных. Чтобы поддерживать такие устройства, разверните стороннего поставщика аттестации.
Обзор этапов реализации
Чтобы интегрировать приложение с Проверкой приложений, выполните следующие действия:
- Добавьте Firebase в приложение.
- Добавьте библиотеку App Check и инициализируйте App Check.
- Добавьте поставщика токенов. На этом этапе вызывается выбранный вами поставщик аттестации, который проверяет целостность устройства или приложения.
- Инициализируйте Navigation API и App Check API.
- Включите отладку. Это полезно при разработке или в средах непрерывной интеграции.
- Прежде чем включить принудительное применение, отслеживайте запросы приложения. Таким образом вы сможете включить Проверку приложений, не мешая пользователям.
Что нужно учитывать при планировании интеграции с Проверкой приложений
- Квоты поставщиков подтверждения. На рекомендуемых нами поставщиков подтверждения, DeviceCheck и App Attest, распространяются квоты и ограничения, установленные Apple.
- Задержка при запуске. В большинстве случаев пользователи не сталкиваются с задержками при обычном использовании, поскольку токены Проверки приложений кешируются на устройстве. Система автоматически обновляет токены Проверки приложений в фоновом режиме до истечения срока их действия, чтобы обеспечить бесперебойную работу. Однако если действительный токен Проверки приложений отсутствует, пользователи могут столкнуться с задержкой при запуске приложения. Например, задержка возникает при холодном запуске, когда срок действия токена в кеше истек или токен отсутствует.
- Время жизни токена (TTL). Время жизни (TTL) определяет, как долго токен Проверки приложений будет действителен, прежде чем его нужно будет обновить. В консоли Firebase можно задать продолжительность от 30 минут до 7 дней. Рекомендуется установить продолжительность в один час, но SDK автоматически пытается обновить данные в фоновом режиме примерно через половину времени TTL. Пошаговые инструкции по работе с консолью можно найти в документации по Проверке приложений Firebase.
Интегрируйте приложение с Проверкой приложений
Требования
- Приложение с Navigation SDK для iOS версии 11.0 или более поздней.
- Идентификатор пакета приложения.
- Идентификатор команды, указанный на вкладке Membership (Участие) в Apple Developer Console.
- Если вы планируете использовать DeviceCheck, вам понадобятся файл закрытого ключа и идентификатор ключа.
- Вы должны быть владельцем приложения в консоли Google Cloud.
- Идентификатор проекта вашего приложения из консоли Google Cloud.
Шаг 1. Добавьте Firebase в приложение
Добавьте Firebase в приложение, следуя инструкциям в документации для разработчиков Firebase. Добавьте файл GoogleService-Info.plist без изменений в корневой каталог проекта.
Импортируйте в файл AppDelegate следующие модули:
Swift
import FirebaseCore import FirebaseAppCheck import GoogleNavigation
Objective-C
@import FirebaseCore; @import FirebaseAppCheck; @import GoogleNavigation;
Шаг 2. Добавьте библиотеку App Check и инициализируйте App Check
В Firebase есть инструкции для каждого поставщика аттестации по умолчанию. В этих инструкциях рассказывается, как настроить проект Firebase и добавить библиотеку проверки приложений в приложение. Чтобы инициализировать проверку приложений, следуйте приведенным примерам кода.
- Добавьте библиотеку App Check, следуя инструкциям Firebase:
- Инициализируйте проверку приложений в
AppDelegate:- Если вы используете App Attest, создайте реализацию
AppCheckProviderFactoryи зарегистрируйте ее перед вызовомFirebaseApp.configure():Swift
class YourAppCheckProviderFactory: NSObject, AppCheckProviderFactory { func createProvider(with app: FirebaseApp) -> AppCheckProvider? { return AppAttestProvider(app: app) } } // In application(_:didFinishLaunchingWithOptions:) let providerFactory = YourAppCheckProviderFactory() AppCheck.setAppCheckProviderFactory(providerFactory) FirebaseApp.configure()
Objective-C
#import <FirebaseCore/FirebaseCore.h> #import <FirebaseAppCheck/FirebaseAppCheck.h> @interface YourAppCheckProviderFactory : NSObject <FIRAppCheckProviderFactory> @end @implementation YourAppCheckProviderFactory - (nullable id<FIRAppCheckProvider>)createProviderWithApp:(FIRApp *)app { return [[FIRAppAttestProvider alloc] initWithApp:app]; } @end // In application:didFinishLaunchingWithOptions: YourAppCheckProviderFactory *providerFactory = [[YourAppCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory]; [FIRApp configure];
- Если вы используете DeviceCheck, задайте фабрику следующим образом:
Swift
AppCheck.setAppCheckProviderFactory(DeviceCheckProviderFactory())
Objective-C
FIRDeviceCheckProviderFactory *providerFactory = [[FIRDeviceCheckProviderFactory alloc] init]; [FIRAppCheck setAppCheckProviderFactory:providerFactory];
- Если вы используете App Attest, создайте реализацию
Шаг 3. Добавьте поставщика токенов
Создайте файл с названием AppCheckTokenProvider (или, если вы используете Objective-C, два файла с названиями AppCheckTokenProvider.h и AppCheckTokenProvider.m) на корневом уровне приложения.
Этот класс должен соответствовать протоколу GMSAppCheckTokenProvider и реализовывать метод fetchAppCheckTokenWithCompletion.
Swift
import Foundation import FirebaseAppCheck import GoogleNavigation class AppCheckTokenProvider: NSObject, GMSAppCheckTokenProvider { func fetchAppCheckToken(completion: @escaping (String?, Error?) -> Void) { AppCheck.appCheck().token(forcingRefresh: false) { token, error in if let error = error { print("App Check Error: \(error)") completion(nil, error) return } guard let token = token else { completion(nil, NSError(domain: "AppCheck", code: -1, userInfo: [NSLocalizedDescriptionKey: "Token is nil"])) return } print("App Check Token: \(token.token)") completion(token.token, nil) } } }
Objective-C
// AppCheckTokenProvider.h #import <Foundation/Foundation.h> #import <GoogleNavigation/GoogleNavigation.h> NS_ASSUME_NONNULL_BEGIN @interface AppCheckTokenProvider : NSObject <GMSAppCheckTokenProvider> @end NS_ASSUME_NONNULL_END
// AppCheckTokenProvider.m #import "AppCheckTokenProvider.h" #import <FirebaseAppCheck/FirebaseAppCheck.h> @implementation AppCheckTokenProvider - (void)fetchAppCheckTokenWithCompletion:(void (^)(NSString * _Nullable token, NSError * _Nullable error))completion { [[FIRAppCheck appCheck] tokenForcingRefresh:NO completion:^(FIRAppCheckToken * _Nullable token, NSError * _Nullable error) { if (token) { completion(token.token, nil); } else { completion(nil, error); } }]; } @end
Шаг 4. Инициализируйте Navigation API и App Check API
Инициализируйте Navigation SDK для iOS и зарегистрируйте экземпляр поставщика токенов в GMSServices:
Swift
// In application(_:didFinishLaunchingWithOptions:) GMSServices.provideAPIKey("YOUR_API_KEY") // Register your App Check token provider before initializing Navigation SDK for iOS GMSServices.appCheckTokenProvider = AppCheckTokenProvider()
Objective-C
// In application:didFinishLaunchingWithOptions: [GMSServices provideAPIKey:@"YOUR_API_KEY"]; // Register your App Check token provider before initializing Navigation SDK for iOS GMSServices.appCheckTokenProvider = [[AppCheckTokenProvider alloc] init];
Шаг 5. Включите отладку (необязательно)
После того как для Navigation SDK для iOS будет включена проверка приложений, функции вашего приложения, зависящие от Navigation SDK для iOS, не будут работать в симуляторе или в среде непрерывной интеграции, поскольку эти среды не считаются действительными устройствами. Чтобы запустить приложение в этих средах во время разработки и тестирования, вам необходимо создать отладочную сборку приложения, которая использует отладочный поставщик Проверки приложений вместо рабочего поставщика аттестации.
- Настройте фабрику отладочных поставщиков в файле
AppDelegate:Swift
#if targetEnvironment(simulator) let providerFactory = AppCheckDebugProviderFactory() #else let providerFactory = YourAppCheckProviderFactory() #endif AppCheck.setAppCheckProviderFactory(providerFactory)
Objective-C
#if TARGET_OS_SIMULATOR id<FIRAppCheckProviderFactory> providerFactory = [[FIRAppCheckDebugProviderFactory alloc] init]; #else id<FIRAppCheckProviderFactory> providerFactory = [[YourAppCheckProviderFactory alloc] init]; #endif [FIRAppCheck setAppCheckProviderFactory:providerFactory];
- Включите ведение журнала в проекте Xcode, запустите приложение и найдите локальный токен отладки в журнале консоли.
- Скопируйте и добавьте этот токен отладки в консоль Firebase. Подробную информацию можно найти в документации по отладочному поставщику Проверки приложений Firebase.
Шаг 6. Отслеживайте запросы приложения и принимайте решения о принудительных мерах
Прежде чем включить принудительное применение, отслеживайте запросы приложения, чтобы убедиться, что вы не заблокируете добросовестных пользователей.
- Чтобы посмотреть процент подтвержденного и неподтвержденного трафика, перейдите на экран показателей Проверки приложений в консоли Firebase.
- Когда вы убедитесь, что большая часть трафика проверена и добросовестные пользователи обновили приложение до версии с Проверкой приложений, включите принудительное применение.
- После этого Проверка приложений будет отклонять весь трафик без действительного токена.