Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Управление данными идентификатора экземпляра

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

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

Несколько сервисов Firebase используют идентификаторы экземпляров для реализации своих функций:

  • Аналитика
  • Crashlytics
  • Облачный обмен сообщениями
  • Удаленная конфигурация

Управление данными приложения, связанными с идентификаторами экземпляров

Службы, которые используют идентификаторы экземпляров для идентификации установок, также используют их в качестве ключа для связывания соответствующих данных с этим устройством. Например, Crashlytics использует идентификаторы экземпляров для записи сбоев, происходящих на устройстве, Remote Config использует их для получения конфигураций, а Analytics использует идентификаторы экземпляров для отслеживания определенных аудиторий.

Данные, связанные с идентификаторами экземпляров, как правило, не идентифицируют личность, но все же может быть полезно предоставить пользователям возможность управлять ими. С этой целью Firebase предлагает два способа управления сбором данных, связанных с идентификатором экземпляра:

  • Удалить идентификаторы экземпляров. Вы можете удалить идентификатор экземпляра с помощью вызова API на стороне сервера или клиента. При удалении идентификатора экземпляра удаляется сам идентификатор и все связанные с ним данные.
  • Отключите службы, которые генерируют идентификаторы. Большинство служб Firebase, использующих идентификаторы экземпляров, автоматически генерируют новый идентификатор, если его нет на устройстве при запуске. Чтобы ваше приложение не создавало нежелательные идентификаторы экземпляров, отключите автоматическую инициализацию для этих служб.

Удалить идентификатор экземпляра

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

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

Удалить идентификатор с помощью вызова клиентского API

Чтобы удалить идентификаторы, сгенерированные сервисами Firebase, вызовите соответствующий метод из Firebase Instance ID API:

Быстрый

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();

Удалить идентификатор с помощью вызова API сервера

Чтобы удалить идентификатор экземпляра с вызовами серверного API, добавьте Firebase Admin SDK на свой сервер , если вы еще этого не сделали.

После добавления удалите идентификаторы с помощью вызова функции удаления идентификатора экземпляра на выбранном вами языке:

Node.js

// An Instance ID sent from a client service SDK
const idToDelete = 'INSTANCE_ID';

admin.instanceId().deleteInstanceId(idToDelete);

Джава

// An Instance ID sent from a client service SDK
String idToDelete = "INSTANCE_ID";

FirebaseInstanceId.getInstance().deleteInstanceIdAsync(idToDelete).get();

питон

  from firebase_admin import instance_id

  # An Instance ID sent from a client service SDK
  id_to_delete = 'INSTANCE_ID'

  instance_id.delete_instance_id(id_to_delete)

Идти

client, err := app.InstanceId(ctx)
if err != nil {
  log.Fatalln("error initializing client", err)
}

iidToDelete := "INSTANCE_ID"
if err := client.DeleteInstanceId(ctx, iidToDelete); err != nil {
  log.Fatalln("error deleting iid", err)
}

Когда вы удаляете идентификатор экземпляра с помощью вызова API сервера, службы Firebase удаляют связанные данные, перестают принимать новые данные для этого идентификатора и в течение нескольких дней уведомляют клиентское приложение об удалении идентификатора. Пока Firebase не уведомит клиентское приложение, некоторые службы приложения могут иметь ограниченную функциональность.

Если вы хотите удалить текущий идентификатор экземпляра и немедленно использовать службы Firebase с новым независимым идентификатором, используйте один из клиентских API выше для обработки удаления.

Отключить создание идентификатора экземпляра

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

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

Прочтите приведенные ниже руководства, чтобы узнать, как отключить автоматическую инициализацию для служб, использующих Instance-ID, и вместо этого инициализировать их вручную: