Служба установки Firebase (FIS) предоставляет идентификатор установки Firebase (FID) для каждого установленного экземпляра приложения Firebase. Идентификатор установки Firebase используется внутри этих служб Firebase:
Служба Firebase | Функциональность установки Firebase |
---|---|
Firebase Cloud Messaging | Firebase Cloud Messaging использует идентификаторы установки Firebase для целевых устройств для доставки сообщений. |
Firebase Crashlytics | Firebase Crashlytics меняет UUID установки Crashlytics на основе изменений идентификатора установки экземпляра приложения Firebase. В будущем идентификатор установки может использоваться для включения функций, улучшающих службы отчетов о сбоях и управления сбоями. |
Firebase In-App Messaging | Firebase In-App Messaging использует идентификаторы установки Firebase для целевых устройств для доставки сообщений. |
Firebase Performance Monitoring | Performance Monitoring использует идентификаторы установки Firebase для расчета количества уникальных установок Firebase, имеющих доступ к сетевым ресурсам, чтобы гарантировать достаточную анонимность шаблонов доступа. Он также использует идентификаторы установки Firebase с Firebase Remote Config для управления частотой отчетов о событиях производительности. |
Firebase Remote Config | Remote Config использует идентификаторы установки Firebase для выбора значений конфигурации для возврата на устройства конечных пользователей. |
Firebase ML | Учетные данные, называемые токенами аутентификации установки, используются Firebase ML для аутентификации устройства при взаимодействии с экземплярами приложения, например, для распространения моделей разработчика по экземплярам приложения. |
Хранилище сегментации пользователей Firebase | В хранилище сегментации пользователей Firebase хранятся идентификаторы установки Firebase , а также связанные атрибуты и сегменты для предоставления информации о таргетинге другим службам Firebase, которые их используют. |
Обычно службы Firebase используют службу установки Firebase , не требуя от разработчиков прямого взаимодействия с API FIS. Однако в некоторых случаях разработчикам приложений может потребоваться прямой вызов FIS API, например:
- Чтобы удалить установку Firebase и данные, связанные с ней.
- Для получения идентификаторов (идентификаторов установки Firebase ) для таргетинга на определенные установки приложений.
- Чтобы получить токены аутентификации установки для аутентификации установок Firebase.
Чтобы начать работу с прямым вызовом FIS API, добавьте SDK в свое приложение.
Добавьте SDK для установки Firebase в свое приложение.
iOS+
- Добавьте зависимость для установок Firebase в свой подфайл:
pod 'FirebaseInstallations'
- Запустите
pod install
и откройте созданный файл.xcworkspace
. - Импортируйте модуль
FirebaseCore
в свойUIApplicationDelegate
, а также любые другие модули Firebase, которые использует ваш делегат приложения. Например, чтобы использовать Cloud Firestore и Authentication :SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Быстрый
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Цель-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Настройте общий экземпляр
FirebaseApp
в методеapplication(_:didFinishLaunchingWithOptions:)
делегата вашего приложения:SwiftUI
// Use Firebase library to configure APIs FirebaseApp.configure()
Быстрый
// Use Firebase library to configure APIs FirebaseApp.configure()
Цель-C
// Use Firebase library to configure APIs [FIRApp configure];
- Если вы используете SwiftUI, вам необходимо создать делегат приложения и прикрепить его к структуре вашего
App
черезUIApplicationDelegateAdaptor
илиNSApplicationDelegateAdaptor
. Вы также должны отключить переключение делегатов приложений. Дополнительную информацию смотрите в инструкциях SwiftUI .SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
Андроид
Добавьте зависимость для установки Android SDK Firebase в файл Gradle вашего модуля (на уровне приложения) (обычно app/build.gradle
):
implementation 'com.google.firebase:firebase-installations:18.0.0'
JavaScript
В зависимости от того, как размещено ваше веб-приложение, ваша конфигурация может обрабатываться автоматически или вам может потребоваться обновить объект конфигурации Firebase .
Например, если ваши зависимости добавлены в index.html, добавьте зависимость в элемент <head>:
<script src="/__/firebase/10.13.2/firebase-installations.js"></script>
трепетать
В корневом каталоге вашего проекта Flutter выполните следующую команду, чтобы установить плагин установки Firebase :
flutter pub add firebase_app_installations
Перестройте свой проект:
flutter run
Импортируйте плагин установки Firebase :
import 'package:firebase_app_installations/firebase_app_installations.dart';
Удаление установки Firebase
Данные, связанные с установкой Firebase , обычно не идентифицируют личность. Тем не менее, может быть полезно предоставить пользователям возможность управлять этими данными и удалять их.
Идентификаторы установки Firebase различны для каждой установки каждого приложения; разные приложения на одном устройстве имеют разные идентификаторы установки Firebase . Идентификаторы установки Firebase идентифицируют установки приложений и данные, связанные с этими установками приложений.
Когда вы удаляете идентификатор установки, данные, привязанные к этому идентификатору установки, удаляются из действующих и резервных систем всех сервисов Firebase, которые используют идентификаторы установки Firebase для идентификации установок, в течение 180 дней. Этот процесс подробно описан в заявлении Google об удалении и сохранении .
Если вы не отключите все службы, генерирующие FID, в своем приложении, FIS создаст новый идентификатор в течение нескольких дней. Firebase считает вновь созданный идентификатор новой установкой Firebase и никак не связывает его с предыдущим идентификатором или данными.
Удаление FID с помощью вызова клиентского API
Чтобы удалить FID, созданные службами Firebase, вызовите соответствующий метод из установочного SDK Firebase :
Быстрый
do { try await Installations.installations().delete() print("Installation deleted"); } catch { print("Error deleting installation: \(error)") }
Цель-C
[[FIRInstallations installations] deleteWithCompletion:^(NSError *error) { if (error != nil) { NSLog(@"Error deleting Installation %@", error); return; } NSLog(@"Installation deleted"); }];
Java
FirebaseInstallations.getInstance().delete() .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d("Installations", "Installation deleted"); } else { Log.e("Installations", "Unable to delete Installation"); } } });
Kotlin+KTX
FirebaseInstallations.getInstance().delete().addOnCompleteListener { task -> if (task.isComplete) { Log.d("Installations", "Installation deleted") } else { Log.e("Installations", "Unable to delete Installation") } }
JavaScript
await firebase.installations().delete();
Dart
await FirebaseInstallations.instance.delete();
Удаление FID с помощью вызова API сервера
Чтобы удалить FID с помощью вызова API сервера, добавьте Firebase Admin SDK на свой сервер , если вы еще этого не сделали.
После добавления SDK удалите FID с помощью вызова функции удаления на выбранном вами языке (примечание: за исключением Node.js, эти методы отражают именование идентификатора экземпляра. Однако все они фактически удаляют FID при вызове с любым текущим Firebase). СДК).
Node.js
// An FIDsent from a client service SDK
const idToDelete = 'eyJhbGciOiJFUzI1N_iIs5';
admin.installations().deleteInstallation(idToDelete);
Java
// An FID sent from a client service SDK
String idToDelete = "eyJhbGciOiJFUzI1N_iIs5";
FirebaseInstanceId.getInstance().deleteInstanceIdAsync(idToDelete).get();
Питон
from firebase_admin import instance_id
# An FID sent from a client service SDK
id_to_delete = 'eyJhbGciOiJFUzI1N_iIs5'
instance_id.delete_instance_id(id_to_delete)
Идти
client, err := app.InstanceId(ctx)
if err != nil {
log.Fatalln("error initializing client", err)
}
iidToDelete := "eyJhbGciOiJFUzI1N_iIs5"
if err := client.DeleteInstanceId(ctx, iidToDelete); err != nil {
log.Fatalln("error deleting FID", err)
}
Когда вы удаляете идентификатор установки Firebase с помощью вызова API сервера, службы Firebase запускают процесс удаления данных, связанных с этим идентификатором установки, прекращают принимать новые данные для этого идентификатора в течение 1–2 дней, а затем уведомляют клиентское приложение. что идентификатор был удален. Пока Firebase не уведомит клиентское приложение, некоторые службы приложения могут по-прежнему ориентироваться на этот идентификатор — например, установка Firebase может продолжать получать уведомления FCM в течение нескольких часов.
Если вы хотите удалить текущий идентификатор установки Firebase и немедленно использовать службы Firebase с новым несвязанным идентификатором, используйте клиентский API для обработки удаления.
Получить идентификаторы клиентов
Если вам необходимо идентифицировать конкретные установки вашего приложения, вы можете сделать это, получив идентификатор установки Firebase . Например, чтобы создать сегменты установок приложения для импорта BiqQuery или выполнить тестирование во время разработки Firebase In-App Messaging , вы можете определить и настроить таргетинг на правильные устройства, используя соответствующие идентификаторы установки Firebase .
Чтобы получить идентификатор установки Firebase :
Быстрый
do { let id = try await Installations.installations().installationID() print("Installation ID: \(id)") } catch { print("Error fetching id: \(error)") }
Цель-C
[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) { if (error != nil) { NSLog(@"Error fetching Installation ID %@", error); return; } NSLog(@"Installation ID: %@", identifier); }];
Java
FirebaseInstallations.getInstance().getId() .addOnCompleteListener(new OnCompleteListener<String>() { @Override public void onComplete(@NonNull Task<String> task) { if (task.isSuccessful()) { Log.d("Installations", "Installation ID: " + task.getResult()); } else { Log.e("Installations", "Unable to get Installation ID"); } } });
Kotlin+KTX
FirebaseInstallations.getInstance().id.addOnCompleteListener { task -> if (task.isSuccessful) { Log.d("Installations", "Installation ID: " + task.result) } else { Log.e("Installations", "Unable to get Installation ID") } }
JavaScript
const installationId = await firebase.installations().getId(); console.log(installationId);
Dart
String id = await FirebaseInstallations.instance.getId();
Получить токены аутентификации установки
Службы Firebase могут аутентифицировать установки Firebase с помощью токенов аутентификации, полученных из FIS. Например, при разработке A/B-тестов для Remote Config вы можете аутентифицировать целевое тестовое устройство с помощью токена аутентификации установки.
Токен аутентификации установки — это кратковременный токен носителя в формате веб-токена JSON (JWT), содержащий следующую информацию для установки:
- Идентификатор установки Firebase
- Связанный проект (
projectNumber
) - Связанный идентификатор приложения Firebase (
appId
). - Срок действия токена
Токен аутентификации установки не может быть отозван и остается действительным до истечения срока его действия. Срок действия токена по умолчанию составляет одну неделю.
Чтобы получить токен аутентификации установки:
Быстрый
do { let result = try await Installations.installations() .authTokenForcingRefresh(true) print("Installation auth token: \(result.authToken)") } catch { print("Error fetching token: \(error)") }
Цель-C
[[FIRInstallations installations] authTokenForcingRefresh:true completion:^(FIRInstallationsAuthTokenResult *result, NSError *error) { if (error != nil) { NSLog(@"Error fetching Installation token %@", error); return; } NSLog(@"Installation auth token: %@", [result authToken]); }];
Java
FirebaseInstallations.getInstance().getToken(/* forceRefresh */true) .addOnCompleteListener(new OnCompleteListener<InstallationTokenResult>() { @Override public void onComplete(@NonNull Task<InstallationTokenResult> task) { if (task.isSuccessful() && task.getResult() != null) { Log.d("Installations", "Installation auth token: " + task.getResult().getToken()); } else { Log.e("Installations", "Unable to get Installation auth token"); } } });
Kotlin+KTX
val forceRefresh = true FirebaseInstallations.getInstance().getToken(forceRefresh) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d("Installations", "Installation auth token: " + task.result?.token) } else { Log.e("Installations", "Unable to get Installation auth token") } }
JavaScript
const installationToken = await firebase.installations() .getToken(/* forceRefresh */ true); console.log(installationToken);
Dart
String token = await FirebaseInstallations.instance.getToken();
Отслеживайте жизненный цикл идентификатора установки Firebase
Во время нормальной работы приложения идентификаторы установки Firebase (FID) не требуют специального мониторинга. Однако приложения, которые явно извлекают и используют FID, должны добавить логику для отслеживания потенциального удаления или ротации FID. Вот несколько случаев, когда FID можно удалить или повернуть:
- Удаление или переустановка приложения, например, когда конечный пользователь устанавливает его на новое устройство.
- Конечный пользователь очищает кеш приложения или устройства.
- Удаление FID запускается на серверной стороне из-за неактивности приложения (в настоящее время пороговое значение для этого составляет 270 дней бездействия).
Когда в таких случаях приложения подвергаются ротации или удалению FID, им назначается новый FID. Кроме того, токен аутентификации установки, связанный с удаленным FID, удаляется независимо от его срока действия и заменяется новым токеном аутентификации установки.
Приложения могут отслеживать эти изменения и реагировать соответствующим образом.
Чтобы контролировать вращение ПИД:
Быстрый
installationIDObserver = NotificationCenter.default.addObserver( forName: .InstallationIDDidChange, object: nil, queue: nil ) { (notification) in // Fetch new Installation ID Task { await self.fetchInstallationToken() } }
Цель-C
__weak __auto_type weakSelf = self; self.installationIDObserver = [[NSNotificationCenter defaultCenter] addObserverForName: FIRInstallationIDDidChangeNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull notification) { // Fetch new Installation ID [weakSelf fetchInstallationsID]; }];
NSNotification с именем NSNotificationName.InstallationIDDidChange
публикуется в NSNotificationCenter по умолчанию всякий раз, когда назначается новый FID.
Андроид
Клиенты Kotlin и Java должны добавить логику повторов для ответа на неудачные вызовы для получения нового FID.
JavaScript
Веб-приложения могут подписаться на перехватчик onIdChange
.
Всякий раз, когда создается новый FID, запускается обратный вызов по подписке:
await firebase.installations().onIdChange((newId) => { console.log(newId); // TODO: Handle new installation ID. });
Dart
FirebaseInstallations.instance.onIdChange.listen((token) {
print('FID token: $token');
});
Миграция с идентификатора экземпляра на установки Firebase
До появления установок Firebase Firebase использовала SDK Instance ID для идентификаторов установок приложений. Установки Firebase обеспечивают значительные преимущества по сравнению с Instance ID в надежности, производительности и безопасности. Приложения Firebase, зависящие от SDK идентификатора экземпляра, следует перенести на установки Firebase .
Процесс миграции зависит от вашего приложения:
Приложения, которые не вызывают напрямую API-интерфейсы идентификатора экземпляра, можно перенести , обновив версии своих SDK . Большинство приложений Firebase попадают в эту категорию.
Приложения, которые явно выполняют вызовы API к идентификатору экземпляра, должны обновить версии SDK и внести изменения в код , чтобы заменить методы идентификатора экземпляра их установками Firebase или эквивалентами FCM . Если ваше приложение использует идентификатор экземпляра для получения токенов регистрации FCM или явно использует идентификатор экземпляра для целевых экземпляров приложения или для любых других целей, вам необходимо обновить код приложения.
В настоящее время FIS обратно совместим с устаревшим идентификатором Firebase Instance ID. Удаление IID — это альтернативный метод запроса удаления данных с помощью следующих SDK Firebase:
- iOS 6.14.0 и ниже
- Android SDK, выпущенные ранее 27 февраля 2020 г.
Это означает, что приложениям не требуется мигрировать на установки Firebase ; однако это настоятельно рекомендуется.
Обновление до минимальных версий SDK для установок Firebase
Чтобы перейти с идентификатора экземпляра на установки Firebase , убедитесь, что ваши приложения используют по крайней мере указанные минимальные номера версий следующих SDK Firebase:
Firebase SDK | Минимальная версия Android | Минимальная версия iOS |
Облачный обмен сообщениями Firebase | v20.3.0 | v6.34.0 |
Удаленная настройка | v19.2.0 | v6.24.0 |
Google Analytics для Firebase \ (SDK для измерения) | v17.4.4 | v6.18.0 |
Обмен сообщениями в приложении | v19.0.7 | v6.24.0 |
Мониторинг производительности | v19.0.8 | v6.21.0 |
Крашлитикс | v17.2.1 | v6.23.0 |
ML-комплект | v22.1.2 | v6.28.0 |
Обновление кода, который явно вызывает API идентификатора экземпляра.
Если ваше приложение Android или Apple напрямую использует методы Instance ID SDK, вы можете заменить это использование идентичными альтернативами в установочном SDK Firebase или FCM SDK.
Получение идентификатора
Методы получения идентификаторов экземпляров заменены методами получения идентификатора установки. Например:
До
Быстрый
Messaging.messaging().token { token, error in if let error = error { print("Error fetching remote FCM registration token: \(error)") } else if let token = token { print("Remote instance ID token: \(token)") self.remoteFCMTokenMessage.text = "Remote FCM registration token: \(token)" } }
Цель-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error fetching the remote FCM registration token: %@", error); } else { NSLog(@"Remote FCM registration token: %@", token); NSString* message = [NSString stringWithFormat:@"FCM registration token: %@", token]; self.remoteFCMTokenMessage.text = message; } }];
Java
FirebaseInstanceId.getInstance().getInstanceId() .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() { @Override public void onComplete(@NonNull Task<InstanceIdResult> task) { Log.d("IID_TOKEN", task.getResult().getToken()); } });
Kotlin+KTX
FirebaseInstanceId.getInstance().instanceId .addOnSuccessListener { result -> Log.d("IID_TOKEN", result.token) }
После
Быстрый
do { let id = try await Installations.installations().installationID() print("Installation ID: \(id)") } catch { print("Error fetching id: \(error)") }
Цель-C
[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) { if (error != nil) { NSLog(@"Error fetching Installation ID %@", error); return; } NSLog(@"Installation ID: %@", identifier); }];
Java
FirebaseInstallations.getInstance().getId() .addOnCompleteListener(new OnCompleteListener<String>() { @Override public void onComplete(@NonNull Task<String> task) { if (task.isSuccessful()) { Log.d("Installations", "Installation ID: " + task.getResult()); } else { Log.e("Installations", "Unable to get Installation ID"); } } });
Kotlin+KTX
FirebaseInstallations.getInstance().id.addOnCompleteListener { task -> if (task.isSuccessful) { Log.d("Installations", "Installation ID: " + task.result) } else { Log.e("Installations", "Unable to get Installation ID") } }
Удаление идентификатора
Методы удаления идентификаторов экземпляров заменяются методами удаления идентификаторов установки Firebase . Например:
До
Быстрый
InstanceID.instanceID().deleteID { error in
if let error = error {
print("Error deleting instance ID: \(error)")
}
}
Цель-C
[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
if error != nil {
NSLog(@"Error deleting instance ID: %@", error);
}
}];
Андроид
FirebaseInstanceId.deleteInstanceId();
После
Быстрый
func delete(completion: @escaping (Error?) -> Void)
Цель-C
- (void)deleteWithCompletion:(nonnull void (^)(NSError *_Nullable))completion;
Java
FirebaseInstallations.getInstance().delete() .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d("Installations", "Installation deleted"); } else { Log.e("Installations", "Unable to delete Installation"); } } });
Kotlin+KTX
FirebaseInstallations.getInstance().delete().addOnCompleteListener { task -> if (task.isComplete) { Log.d("Installations", "Installation deleted") } else { Log.e("Installations", "Unable to delete Installation") } }
Получение регистрационного токена FCM
До появления установки Firebase клиенты FCM получали регистрационные токены из идентификатора экземпляра. Теперь FCM SDK предоставляет методы для получения регистрационного токена.
До
Java
FirebaseInstanceId.getInstance().getInstanceId() .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() { @Override public void onComplete(@NonNull Task<InstanceIdResult> task) { if (!task.isSuccessful()) { Log.w(TAG, "getInstanceId failed", task.getException()); return; } // Get new Instance ID token String token = task.getResult().getToken(); // Log and toast String msg = getString(R.string.msg_token_fmt, token); Log.d(TAG, msg); Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } });
Kotlin+KTX
FirebaseInstanceId.getInstance().instanceId .addOnCompleteListener(OnCompleteListener { task -> if (!task.isSuccessful) { Log.w(TAG, "getInstanceId failed", task.exception) return@OnCompleteListener } // Get new Instance ID token val token = task.result?.token // Log and toast val msg = getString(R.string.msg_token_fmt, token) Log.d(TAG, msg) Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show() })
Быстрый
Messaging.messaging().token { token, error in if let error = error { print("Error fetching remote FCM registration token: \(error)") } else if let token = token { print("Remote instance ID token: \(token)") self.remoteFCMTokenMessage.text = "Remote FCM registration token: \(token)" } }
Цель-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) { if (error != nil) { NSLog(@"Error fetching the remote FCM registration token: %@", error); } else { NSLog(@"Remote FCM registration token: %@", token); NSString* message = [NSString stringWithFormat:@"FCM registration token: %@", token]; self.remoteFCMTokenMessage.text = message; } }];
После
Java
FirebaseMessaging.getInstance().getToken() .addOnCompleteListener(new OnCompleteListener<String>() { @Override public void onComplete(@NonNull Task<String> task) { if (!task.isSuccessful()) { Log.w(TAG, "Fetching FCM registration token failed", task.getException()); return; } // Get new FCM registration token String token = task.getResult(); // Log and toast String msg = getString(R.string.msg_token_fmt, token); Log.d(TAG, msg); Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } });
Kotlin+KTX
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task -> if (!task.isSuccessful) { Log.w(TAG, "Fetching FCM registration token failed", task.exception) return@OnCompleteListener } // Get new FCM registration token val token = task.result // Log and toast val msg = getString(R.string.msg_token_fmt, token) Log.d(TAG, msg) Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show() })
Быстрый
Messaging.messaging().token { token, error in if let error = error { print("Error fetching FCM registration token: \(error)") } else if let token = token { print("FCM registration token: \(token)") self.fcmRegTokenMessage.text = "Remote FCM registration token: \(token)" } }
Цель-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) { if (error != nil) { NSLog(@"Error getting FCM registration token: %@", error); } else { NSLog(@"FCM registration token: %@", token); self.fcmRegTokenMessage.text = token; } }];