管理实例 ID 数据

实例 ID 用于标识已安装的每个应用实例。由于每个实例 ID 对于特定应用和设备都是独一无二的,因此这些 ID 为 Firebase 服务提供了一种指代特定应用实例的方式。例如,Cloud Messaging 使用实例 ID 来确定向哪些设备发送消息。

多项 Firebase 服务使用实例 ID 来支持其功能:

  • Analytics
  • Crashlytics
  • Cloud Messaging
  • Remote Config

管理与实例 ID 关联的应用数据

服务使用实例 ID 来标识已安装的应用,也使用这些 ID 作为键,将相关数据与该设备关联。例如,Crashlytics 使用实例 ID 记录设备上发生的崩溃情况,Remote Config 使用这些 ID 提取配置,而 Analytics 使用实例 ID 跟踪特定受众群体。

与实例 ID 关联的数据通常不属于个人身份信息,但是向用户提供一种管理这些数据的方式仍然会有助益。为此,Firebase 提供了两种方式来管理与实例 ID 相关的数据收集:

  • 删除实例 ID。您可以通过服务器端或客户端 API 调用来删除实例 ID。删除实例 ID 会删除 ID 本身以及与其关联的所有数据。
  • 停用生成 ID 的服务。对于大多数使用实例 ID 的 Firebase 服务,如果这些服务启动时设备还没有 ID,则会自动生成一个新 ID。为了确保您的应用不会创建不需要的实例 ID,请为这些服务停用自动初始化。

删除实例 ID

删除实例 ID 会同时删除上面列出的任何一项 Firebase 服务中与该 ID 关联的数据。这样,便可以通过删除 ID 来方便地清除用户数据,但同时也要注意:如果您使用多项依赖于实例 ID 的服务,则删除 ID 会清除所有这些服务中的数据。

除非您在应用中停用所有实例 ID 生成服务,否则实例 ID 服务会在几天内创建一个新 ID。Firebase 会将新建的 ID 视为全新的应用实例,并且不会以任何方式将其与以前的 ID 相关联。

通过客户端 API 调用删除 ID

如需删除 Firebase 服务生成的 ID,请通过 Firebase Instance ID API 调用相应的方法:

Swift

InstanceID.instanceID().deleteID { error in
  if let error = error {
    print("Error deleting instance ID: \(error)")
  }
}

Objective-C

[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
  if error != nil {
    NSLog(@"Error deleting instance ID: %@", error);
  }
}];

Android

FirebaseInstanceId.deleteInstanceId();

通过服务器 API 调用删除 ID

如需通过服务器 API 调用来删除实例 ID,请将 Firebase Admin SDK 添加至您的服务器(如果您还没有添加)。

添加后,请根据所选语言通过调用实例 ID 删除函数来删除 ID:

Node.js

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

admin.instanceId().deleteInstanceId(idToDelete);

Java

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

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

Python

  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)

Go

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 调用删除实例 ID 后,Firebase 服务会删除关联的数据,停止接受该 ID 的新数据,并会在几天内通知客户端应用相应 ID 已被删除。在 Firebase 通知客户端应用之前,应用的部分服务可能会遇到功能减少的情况。

如果您要删除当前的实例 ID,并立即将新的独立 ID 用于 Firebase 服务,请使用上述的一种客户端 API 来处理删除事宜。

禁止生成实例 ID

当使用实例 ID 的服务在目前还没有 ID 的应用中初始化时,会自动生成一个新 ID。通常,这些服务还会在您的应用启动时自动初始化。如需禁止生成实例 ID,您必须为使用这些实例 ID 的服务停用自动初始化。

一种常见的方法是为用户提供一个可选择同意数据收集的选项:为使用实例 ID 的服务停用自动初始化,实现一个提示用户是否同意数据收集的对话框,并在得到用户同意后手动重新启用这些服务。

阅读下面的指南,了解如何为使用实例 ID 的服务停用自动初始化并改为手动初始化: