web-dev-qa-db-ja.com

Firebaseからすべてのデバイストークンを取得する方法

Firebaseからデバイストークン(FCM登録トークン)を取得する方法

私はfirebaseを使用してモバイルアプリを作成し、node.jsを使用してそのサーバーを作成しています。

送信したいPush notificationサーバーからのメッセージですが、デバイストークンを取得する方法がわかりません。

  1. 外部サーバーからデバイストークンを取得する方法現在、Firebase admin SDKを使用しています。

  2. デバイストークンは、アプリがfcmサーバーに接続されている場合にのみ生成されますか?

  3. ユーザーが最初にアプリを実行してFCMサーバーを登録するときに、トークンを別のデータベースに保存する必要がありますか?

7
Juntae

1。外部サーバーからデバイストークンを取得する方法現在、Firebase admin SDKを使用しています。

現在、サーバー側からアプリのすべての登録トークンを取得するAPIはありません。クライアントアプリ側から生成された登録トークンをアプリサーバーに送信して保存するのは、開発者(ユーザー)の責任です。

2。アプリがFCMサーバーに接続されている場合にのみデバイストークンが生成されますか?

documentation はこれをほぼカバーしました(私の回答も参照 here ):

アプリの初回起動時に、FCM SDKはクライアントアプリインスタンスの登録トークンを生成します。

技術的にはFCMサーバーに接続されません。 FirebaseInstanceIDサービスに(SDK経由で)接続し、登録トークンを生成します。

3。ユーザーが最初にアプリを実行してFCMサーバーを登録するときに、トークンを別のデータベースに保存する必要がありますか?

#1で述べたように、メッセージを送信するために簡単にアクセスできる場所に保存する必要があります。

5
AL.

アプリが最初に接続したときにデバイストークンが生成されます。このトークンはデータベースに保存され、新しいトークンが割り当てられた場合は置き換えられる必要があります

public class MyAndroidFirebaseInstanceIdService extends FirebaseInstanceIdService {

    private static final String TAG = "MyAndroidFCMIIDService";

    @Override
    public void onTokenRefresh() {
        //Get hold of the registration token
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        //Log the token
        Log.d(TAG, "Refreshed token: " + refreshedToken);
    }
    private void sendRegistrationToServer(String token) {
        //Implement this method if you want to store the token on your server
    }
}

次を参照してください チュートリアル

3
Donald Jansen

Getリクエストをすることができます

https://<<your_project_name>>.firebaseio.com/.json?auth=<<your_database_secret_key>>

Firebaseコンソールのタブsettings/serviceaccounts/databasesecretsにあるデータベースの秘密鍵

これにより、プロジェクトのすべてのストレージデータを含むJSONファイルが返されます。

0

トークンを保存しないことをお勧めします。ユーザーが複数のデバイス(iOSデバイス、Androidデバイス、デスクトップなど)を持っていることを理解するまで、トークンの保存は良い考えのようですが、ユーザーごとに複数のデバイストークンの保存を管理する必要があります。乱雑に速くなります。

代わりに、生成されたトークンを無視し、ユーザーがログインしたときやアカウントを作成したときなど、単にユーザーをトピックにサブスクライブして、ユーザーIDで構成されたトピックにサブスクライブしてください

NSString* useridchannel = [NSString stringWithFormat:@"user_%ld", (long)userid];
[[FIRMessaging messaging] subscribeToTopic:useridchannel completion:^(NSError * _Nullable error) {
       NSLog(@"Subscribed user to topic %@", useridchannel);
}];

ユーザーがログアウトするときは、そのトピックからサブスクライブを解除してください。ユーザーがアプリにログインしなくなった場合、通知を受け取りたくない可能性があります。

NSString* useridchannel = [NSString stringWithFormat:@"user_%ld", (long)userid];
[[FIRMessaging messaging] unsubscribeFromTopic:useridchannel completion:^(NSError * _Nullable error) {
         NSLog(@"Unsubscribed user from %@", useridchanel);
}];

私はデバイスグループがこの目的で使用されることになっていることを理解していますが、トークンの保存と管理に煩わされたくありません。また、PHPのFirebase Admin SDKはメッセージの送信をサポートしていません。デバイスグループへ。トピックを使用することで、デバイストークンを処理する必要がなく、サーバー、アプリ、またはFirebaseコンソールからすべてのユーザーのデバイスにメッセージを簡単に送信できます。

0
Greg Ellis