Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

Firebaseのインストールを管理する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Firebase インストール サービス (FIS) は、Firebase アプリのインストール済みインスタンスごとに Firebase インストール ID (FID) を提供します。 Firebase インストール ID は、次の Firebase サービスによって内部的に使用されます。

Firebase サービスFirebase インストール機能
Firebase クラウド メッセージング

Firebase Cloud Messaging は、Firebase インストール ID を使用して、メッセージ配信用のデバイスをターゲットにします。

Firebase アプリ内メッセージング

Firebase In-App Messaging は、Firebase インストール ID を使用して、メッセージ配信用のデバイスをターゲットにします。

Firebase パフォーマンス モニタリング

Performance Monitoring は Firebase インストール ID を使用して、ネットワーク リソースにアクセスする一意の Firebase インストールの数を計算し、アクセス パターンが十分に匿名化されるようにします。また、Firebase Remote Config で Firebase インストール ID を使用して、パフォーマンス イベント レポートのレートを管理します。

Firebase Remote Config

Remote Config は、Firebase インストール ID を使用して構成値を選択し、エンドユーザー デバイスに返します。

ファイアベース ML

インストール認証トークンと呼ばれる認証情報は、Firebase ML がアプリ インスタンスと対話する際のデバイス認証に使用します。たとえば、デベロッパー モデルをアプリ インスタンスに配布する場合などです。

Firebase ユーザー セグメンテーション ストレージ

Firebase User Segmentation Storage は、Firebase インストール ID および関連する属性とセグメントを保存して、それらを使用する他の Firebase サービスにターゲティング情報を提供します。

通常、Firebase サービスは、開発者が FIS API を直接操作する必要なく、Firebase インストール サービスを使用します。ただし、アプリ開発者が次のように FIS API を直接呼び出したい場合があります。

  • Firebase インストールと、インストールに関連付けられたデータを削除するには。
  • 特定のアプリのインストールを対象とするために、識別子 (Firebase インストール ID) を取得するため。
  • インストール認証トークンを取得して、Firebase インストールを認証します。

FIS API の直接呼び出しを開始するには、SDK をアプリに追加します。

アプリに Firebase インストール SDK を追加する

iOS+

  1. Firebase インストールの依存関係を Podfile に追加します:
    pod 'FirebaseInstallations'
  2. pod installを実行し、作成された.xcworkspaceファイルを開きます。
  3. UIApplicationDelegateFirebaseCoreモジュールをインポートし、アプリ デリゲートが使用する他のすべてのFirebase モジュールをインポートします。たとえば、Cloud Firestore と認証を使用するには:

    迅速

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. アプリ デリゲートのapplication(_:didFinishLaunchingWithOptions:)メソッドでFirebaseApp共有インスタンスを構成します。

    迅速

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];

アンドロイド

Firebase インストール Android SDK の依存関係をモジュール (アプリレベル) の Gradle ファイル (通常はapp/build.gradle ) に追加します。

implementation 'com.google.firebase:firebase-installations:17.1.0'

JavaScript

ウェブ アプリケーションのホスト方法によっては、構成が自動的に処理されるか、 Firebase 構成オブジェクトの更新が必要になる場合があります。

たとえば、依存関係が index.html に追加されている場合は、依存関係を <head> 要素に追加します。

<script src="/__/firebase/9.14.0/firebase-installations.js"></script>

フラッター

  1. Flutter プロジェクトのルート ディレクトリから次のコマンドを実行して、Firebase インストール プラグインをインストールします。

    flutter pub add firebase_app_installations
    
  2. プロジェクトを再構築します。

    flutter run
    
  3. Firebase インストール プラグインをインポートします。

    import 'package:firebase_app_installations/firebase_app_installations.dart';
    

Firebase インストールを削除する

Firebase のインストールに関連付けられたデータは、通常、個人を特定するものではありません。それでも、このデータを管理および削除するオプションをユーザーに提供すると役立つ場合があります。

Firebase インストール ID は、すべてのアプリケーションのインストールごとに異なります。同じデバイス上の異なるアプリケーションには、異なる Firebase インストール ID があります。 Firebase インストール ID は、アプリのインストールと、それらのアプリのインストールに関連付けられたデータを識別します。

インストール ID を削除すると、そのインストール ID に関連付けられたデータは、Firebase インストール ID を使用してインストールを識別するすべての Firebase サービスのライブおよびバックアップ システムから 180 日以内に削除されます。このプロセスについては、削除と保持に関する Google の声明で大まかに説明されています。

アプリですべての FID 生成サービスを無効にしない限り、FIS は数日以内に新しい ID を作成します。 Firebase は、新しく作成された ID を新しい Firebase インストールと見なし、それを以前の ID またはデータに関連付けません。

クライアント API 呼び出しで FID を削除する

Firebase サービスによって生成された FID を削除するには、Firebase インストール SDK から適切なメソッドを呼び出します。

迅速

Installations.installations().delete { error in
  if let error = error {
    print("Error deleting installation: \(error)")
    return
  }
  print("Installation deleted");
}

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

サーバー API 呼び出しで FID を削除する

サーバー API 呼び出しで FID を削除するには、Firebase Admin SDK をサーバーに追加します(まだ追加していない場合)。

SDK が追加されたら、選択した言語で削除関数を呼び出して FID を削除します (注: Node.js を除き、これらのメソッドはインスタンス ID の命名を反映します。ただし、現在の Firebase で呼び出されると、実際にはすべて FID を削除します) 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)
}

サーバー API 呼び出しで Firebase インストール ID を削除すると、Firebase サービスはそのインストール ID に関連付けられたデータを削除するプロセスを開始し、1 ~ 2 日の間にその ID の新しいデータの受け入れを停止してから、クライアント アプリに通知します。 IDが削除されたこと。 Firebase がクライアント アプリに通知するまで、アプリの一部のサービスは引き続き ID をターゲットにする可能性があります。たとえば、Firebase インストールは数時間 FCM 通知を受信し続ける可能性があります。

現在の Firebase インストール ID を削除し、関連のない新しい ID で Firebase サービスをすぐに使用する場合は、クライアント API を使用して削除を処理します。

クライアント識別子を取得する

アプリの特定のインストールを識別する必要がある場合は、Firebase インストール ID を取得することで識別できます。たとえば、Firebase アプリ内メッセージングの開発中にテストを実行するには、Firebase インストール ID を使用して正しいテスト デバイスを特定し、ターゲットにすることができます。

Firebase インストール ID を取得するには:

迅速

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)")
}

Objective-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 サービスは、FIS から取得した認証トークンを使用して Firebase インストールを認証できます。たとえば、Remote Config の A/B テストを設計する場合、インストール認証トークンを使用して対象のテスト デバイスを認証できます。

インストール認証トークンは、インストールに関する次の情報を含む、JSON Web トークン (JWT) 形式の有効期間が短いベアラー トークンです。

  • Firebase インストール ID
  • 関連するプロジェクト ( projectNumber )
  • 関連する Firebase アプリケーション ID ( appId )
  • トークンの有効期限

インストール認証トークンは取り消すことができず、有効期限まで有効です。デフォルトのトークンの有効期間は 1 週間です。

インストール認証トークンを取得するには:

迅速

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)")
})

Objective-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

FirebaseInstallations.getInstance().getToken(/* forceRefresh */ true)
    .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 インストール ID のライフサイクルを監視する

アプリの通常の操作中、Firebase インストール ID (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()
}

Objective-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];
}];

新しい FID が割り当てられるたびに、NSNotificationName.InstallationIDDidChange という名前のNSNotificationName.InstallationIDDidChangeが既定の NSNotificationCenter にポストされます。

アンドロイド

Kotlin および Java クライアントは、失敗した呼び出しに応答して新しい FID を取得するための再試行ロジックを追加する必要があります。

JavaScript

Web アプリは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');
});

インスタンス ID から Firebase インストールに移行する

Firebase インストールが導入される前は、Firebase はアプリ インストールの識別子としてインスタンス ID SDK に依存していました。 Firebase のインストールは、信頼性、パフォーマンス、およびセキュリティにおいて、インスタンス ID よりも大きな利点を提供します。インスタンス ID SDK に依存する Firebase アプリは、Firebase インストールに移行する必要があります。

移行プロセスは、アプリによって異なります。

  • インスタンス ID API を直接呼び出さないアプリは、SDK バージョンを更新することで移行できます。ほとんどの Firebase アプリがこのカテゴリに分類されます。

  • インスタンス ID に対して明示的に API 呼び出しを行うアプリは、SDK バージョン更新し、コードを変更して、インスタンス ID メソッドを Firebase インストールまたは FCM の同等のものに置き換える必要があります。アプリがインスタンス ID を使用して FCM 登録トークンを取得したり、インスタンス ID を明示的に使用してアプリ インスタンスをターゲットにしたり、その他の目的で使用したりする場合は、アプリケーション コードを更新する必要があります。

現在、FIS は従来の識別子である Firebase インスタンス ID と下位互換性があります。 IID の削除は、次の Firebase SDK でデータ削除をリクエストする別の方法です。

  • iOS 6.14.0 以下
  • 2020 年 2 月 27 日より前の Android SDK

これは、アプリを Firebase インストールに移行する必要がないことを意味します。ただし、そうすることを強くお勧めします。

Firebase インストール用の最小 SDK バージョンへのアップグレード

インスタンス ID から Firebase インストールに移行するには、アプリケーションが少なくとも次の Firebase SDK のリストされている最小バージョン番号を使用していることを確認してください。

Firebase SDK Android の最小バージョン最小 iOS バージョン
Firebase クラウド メッセージングv20.3.0 v6.34.0
リモート設定v19.2.0 v6.24.0
Firebase 向け Google アナリティクス \ (Measurement 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

インスタンス ID API を明示的に呼び出すコードの更新

Android または Apple アプリが Instance ID SDK メソッドを直接使用している場合、その使用法を Firebase インストール SDK または FCM SDK の同一の代替手段に置き換えることができます。

識別子の取得

インスタンス ID を取得するメソッドは、インストール ID を取得するメソッドに置き換えられました。例えば:

迅速

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)"
  }
}

Objective-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)")
}

Objective-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")
    }
}

識別子の削除

インスタンス ID を削除するメソッドは、Firebase インストール ID を削除するメソッドに置き換えられます。例えば:

迅速

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);
  }
}];

アンドロイド

FirebaseInstanceId.deleteInstanceId();

迅速

func delete(completion: @escaping (Error?) -> Void)

Objective-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 インストールが導入される前は、FCM クライアントはインスタンス ID から登録トークンを取得していました。現在、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)"
  }
}

Objective-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)"
  }
}

Objective-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;
  }
}];