Служба установки Firebase (FIS) предоставляет идентификатор установки Firebase (FID) для каждого установленного экземпляра приложения Firebase. Идентификатор установки Firebase используется внутри этих служб Firebase:
Служба Firebase | Функциональность установки Firebase |
---|---|
Облачный обмен сообщениями Firebase | Firebase Cloud Messaging использует идентификаторы установки Firebase для целевых устройств для доставки сообщений. |
Firebase Крашлитикс | 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, не требуя от разработчиков прямого взаимодействия с API FIS. Однако в некоторых случаях разработчикам приложений может потребоваться прямой вызов 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
в методе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:17.2.0'
JavaScript
В зависимости от того, как размещено ваше веб-приложение, ваша конфигурация может обрабатываться автоматически или вам может потребоваться обновить объект конфигурации Firebase .
Например, если ваши зависимости добавлены в index.html, добавьте зависимость в элемент <head>:
<script src="/__/firebase/10.7.0/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). СДК).
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:
Быстрый
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, удаляется независимо от его срока действия и заменяется новым токеном проверки подлинности установки.
Приложения могут отслеживать эти изменения и реагировать соответствующим образом.
Чтобы контролировать вращение ПИД:
Быстрый
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');
});
Миграция с идентификатора экземпляра на установки 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
Чтобы перейти с Instance ID на установки Firebase, убедитесь, что ваши приложения используют по крайней мере указанные минимальные номера версий следующих Firebase SDK:
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) }
После
Быстрый
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; } }];
Служба установки Firebase (FIS) предоставляет идентификатор установки Firebase (FID) для каждого установленного экземпляра приложения Firebase. Идентификатор установки Firebase используется внутри этих служб Firebase:
Служба Firebase | Функциональность установки Firebase |
---|---|
Облачный обмен сообщениями Firebase | Firebase Cloud Messaging использует идентификаторы установки Firebase для целевых устройств для доставки сообщений. |
Firebase Крашлитикс | 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, не требуя от разработчиков прямого взаимодействия с API FIS. Однако в некоторых случаях разработчикам приложений может потребоваться прямой вызов 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
в методе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:17.2.0'
JavaScript
В зависимости от того, как размещено ваше веб-приложение, ваша конфигурация может обрабатываться автоматически или вам может потребоваться обновить объект конфигурации Firebase .
Например, если ваши зависимости добавлены в index.html, добавьте зависимость в элемент <head>:
<script src="/__/firebase/10.7.0/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). СДК).
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:
Быстрый
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, удаляется независимо от его срока действия и заменяется новым токеном проверки подлинности установки.
Приложения могут отслеживать эти изменения и реагировать соответствующим образом.
Чтобы контролировать вращение ПИД:
Быстрый
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');
});
Миграция с идентификатора экземпляра на установки 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
Чтобы перейти с Instance ID на установки Firebase, убедитесь, что ваши приложения используют по крайней мере указанные минимальные номера версий следующих Firebase SDK:
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) }
После
Быстрый
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; } }];