インスタンス ID は、アプリの個別のインストールを識別します。それぞれのインスタンス ID は特定のアプリやデバイスに固有であるため、Firebase サービスが特定のアプリ インスタンスを参照する手段になります。たとえば、Cloud Messaging はインスタンス ID を使用して、メッセージの送信先であるデバイスを判別します。
複数の Firebase サービスで、機能を実現するためにインスタンス ID を使用しています。
- アナリティクス
- Crashlytics
- Cloud Messaging
- Remote Config
インスタンス ID に関連付けられているアプリデータを管理する
インスタンス ID を使用してインストールを識別するサービスでは、データとデバイスを関連付けるためのキーとしてもインスタンス ID を使用します。たとえば、Crashlytics はインスタンス ID を使用してデバイスで発生するクラッシュを記録し、Remote Config はインスタンス ID を使用して構成を取得し、アナリティクスはインスタンス ID を使用して特定のユーザーを追跡します。
インスタンス ID に関連付けられているデータは、一般的には個人を識別するデータではありませんが、ユーザーがデータを管理するオプションとして役に立ちます。そのために、Firebase にはインスタンス ID に関連するデータ収集を管理する 2 つの手段が用意されています。
- インスタンス 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 インスタンス 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 を追加します(まだ追加していない場合)。
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 を使用するサービスの自動初期化を無効にして、代わりにそれらのサービスを手動で初期化する方法については、以下のガイドをご覧ください。
- Cloud Messaging: 自動初期化を禁止する(Android)または自動初期化を禁止する(iOS+)
- Crash Reporting: オプトイン レポートを有効にする
- アナリティクス: アナリティクス データの収集を構成する