Служба установки Firebase (FIS) предоставляет идентификатор установки Firebase (FID) для каждого установленного экземпляра приложения Firebase. Идентификатор установки Firebase используется внутри этих служб Firebase:
Служба Firebase | Функциональность установки Firebase |
---|---|
Облачные сообщения Firebase | Firebase Cloud Messaging использует идентификаторы установки Firebase для целевых устройств для доставки сообщений. |
Firebase Crashlytics | Firebase Crashlytics меняет UUID установки Crashlytics на основе изменений в идентификаторе установки Firebase экземпляра приложения. В будущем идентификатор установки может использоваться для включения функций, улучшающих отчеты о сбоях и службы управления сбоями. |
Обмен сообщениями в приложении Firebase | Firebase In-App Messaging использует идентификаторы установки Firebase для целевых устройств для доставки сообщений. |
Мониторинг производительности Firebase | Мониторинг производительности использует идентификаторы установки Firebase для подсчета количества уникальных установок Firebase, которые обращаются к сетевым ресурсам, чтобы обеспечить достаточную анонимность шаблонов доступа. Он также использует идентификаторы установки Firebase с Firebase Remote Config для управления частотой отчетов о событиях производительности. |
Удаленная конфигурация Firebase | Remote Config использует идентификаторы установки Firebase для выбора значений конфигурации, которые будут возвращены на устройства конечных пользователей. |
Firebase ML | Учетные данные, называемые токенами проверки подлинности установки , используются Firebase ML для проверки подлинности устройства при взаимодействии с экземплярами приложения, например, для распространения моделей разработчика на экземпляры приложений. |
Хранилище сегментации пользователей Firebase | Хранилище сегментации пользователей Firebase хранит идентификаторы установки Firebase и связанные с ними атрибуты и сегменты, чтобы предоставлять информацию о таргетинге другим службам Firebase, которые их используют. |
Как правило, службы Firebase используют службу установки Firebase, не требуя от разработчиков прямого взаимодействия с FIS API. Однако бывают случаи, когда разработчики приложений могут напрямую вызывать FIS API, например:
- Чтобы удалить установку Firebase и данные, связанные с установкой.
- Чтобы получить идентификаторы (идентификаторы установки Firebase), чтобы ориентироваться на определенные установки приложений.
- Чтобы получить токены авторизации установки для аутентификации установок Firebase.
Чтобы начать работу с прямым вызовом FIS API, добавьте SDK в свое приложение.
Добавьте SDK для установки Firebase в свое приложение.
iOS+
- Добавьте зависимость для установки Firebase в свой подфайл:
pod 'FirebaseInstallations'
- Запустите
pod install
и откройте созданный файл.xcworkspace
. - Импортируйте модуль
FirebaseCore
в свойUIApplicationDelegate
, а также любые другие модули Firebase, которые использует ваш делегат приложения. Например, чтобы использовать Cloud Firestore и аутентификацию:SwiftUI
import SwiftUI import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Быстрый
import FirebaseCore import FirebaseFirestore import FirebaseAuth // ...
Цель-C
@import FirebaseCore; @import FirebaseFirestore; @import FirebaseAuth; // ...
- Настройте общий экземпляр
FirebaseApp
в методе applicationapplication(_: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
. Вы также должны отключить swizzling делегата приложения. Дополнительные сведения см. в инструкциях SwiftUI .SwiftUI
@main struct YourApp: App { // register app delegate for Firebase setup @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate var body: some Scene { WindowGroup { NavigationView { ContentView() } } } }
Андроид
Добавьте зависимость для установки Firebase Android SDK в файл Gradle вашего модуля (на уровне приложения) (обычно app/build.gradle
):
implementation 'com.google.firebase:firebase-installations:17.1.3'
JavaScript
В зависимости от того, как размещено ваше веб-приложение, ваша конфигурация может обрабатываться автоматически или вам может потребоваться обновить объект конфигурации Firebase .
Например, если ваши зависимости добавлены в index.html, добавьте зависимость в элемент <head>:
<script src="/__/firebase/9.22.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:
Быстрый
Installations.installations().delete { error in if let error = error { print("Error deleting installation: \(error)") return } print("Installation deleted"); }
Цель-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 SDK).
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. Например, чтобы выполнить тестирование во время разработки Firebase In-App Messaging, вы можете определить и выбрать правильное тестовое устройство, используя его идентификатор установки Firebase.
Чтобы получить идентификатор установки Firebase:
Быстрый
Installations.installations().installationID { (id, error) in if let error = error { print("Error fetching id: \(error)") return } guard let id = id else { return } print("Installation ID: \(id)") }
Цель-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
) - Срок действия токена
Маркер аутентификации установки не может быть отозван и остается действительным до истечения срока его действия. Срок жизни токена по умолчанию составляет одну неделю.
Чтобы получить токен авторизации установки:
Быстрый
Installations.installations().authTokenForcingRefresh(true, completion: { (result, error) in if let error = error { print("Error fetching token: \(error)") return } guard let result = result else { return } print("Installation auth token: \(result.authToken)") })
Цель-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, удаляется независимо от срока его действия и заменяется новым токеном проверки подлинности установки.
Приложения могут отслеживать эти изменения и реагировать соответствующим образом.
Чтобы контролировать вращение FID:
Быстрый
installationIDObserver = NotificationCenter.default.addObserver( forName: .InstallationIDDidChange, object: nil, queue: nil ) { (notification) in // Fetch new Installation ID 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');
});
Переход с Instance ID на установки Firebase
До внедрения установок Firebase Firebase полагался на SDK Instance ID для идентификаторов установок приложений. Установка Firebase обеспечивает значительные преимущества по сравнению с Instance ID в надежности, производительности и безопасности. Приложения Firebase, зависящие от SDK Instance ID, должны быть перенесены на установки Firebase.
Процесс миграции отличается в зависимости от вашего приложения:
Приложения, которые напрямую не вызывают API-интерфейсы Instance ID, можно перенести, обновив свои версии 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
Чтобы перейти с Instance ID на установки Firebase, убедитесь, что ваши приложения используют как минимум указанные минимальные номера версий следующих Firebase SDK:
SDK Firebase | Минимальная версия Android | Минимальная версия iOS |
Облачные сообщения Firebase | v20.3.0 | v6.34.0 |
Удаленная конфигурация | v19.2.0 | v6.24.0 |
Google Аналитика для Firebase \ (SDK для измерений) | v17.4.4 | v6.18.0 |
Обмен сообщениями в приложении | v19.0.7 | v6.24.0 |
Мониторинг производительности | v19.0.8 | v6.21.0 |
Crashlytics | v17.2.1 | v6.23.0 |
МЛ комплект | v22.1.2 | v6.28.0 |
Обновление кода, который явно вызывает API идентификатора экземпляра
Если ваше приложение Android или Apple напрямую использует методы SDK Instance ID, вы можете заменить это использование идентичными альтернативами в 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) }
После
Быстрый
Installations.installations().installationID { (id, error) in if let error = error { print("Error fetching id: \(error)") return } guard let id = id else { return } print("Installation ID: \(id)") }
Цель-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 Installations клиенты 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; } }];