15

FCM に移行したばかりです。FirebaseInstanceIdService から拡張して、必要に応じて refreshedToken を受け取るクラスを追加しました。

私の質問は、ユーザーが初めてアプリをインストールしたときに何らかの理由で onTokenRefresh から登録 ID を受信できない場合に固有のものです。これをどのように処理すればよいでしょうか。登録 ID の受信時にメイン アクティビティに通知する FirebaseInstanceIdService クラスからブロードキャスト レシーバを設定できますか?

4

7 に答える 7

18
  • デバイスがインターネットに接続されていない場合、onTokenRefresh()は呼び出されず、デバイスがインターネットに接続されていないことをユーザーに通知する必要があります
  • firebase には独自のネットワーク変更リスナーがあり、インターネットに接続されたデバイスがトークンを取得して返そうとすると、この時点でローカル ブロードキャスト レシーバーに登録トークンを受信したことを知らせることで、主なアクティビティを伝えることができます。

以下のコードを使用します。

    @Override
public void onTokenRefresh() {

    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();

    Log.d("FCN TOKEN GET", "Refreshed token: " + refreshedToken);

    final Intent intent = new Intent("tokenReceiver");
    // You can also include some extra data.
    final LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(this);
    intent.putExtra("token",refreshedToken);
    broadcastManager.sendBroadcast(intent);


}

あなたの主な活動で:

    public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);
   LocalBroadcastManager.getInstance(this).registerReceiver(tokenReceiver,
            new IntentFilter("tokenReceiver"));

}

BroadcastReceiver tokenReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String token = intent.getStringExtra("token");
        if(token != null)
        {
            //send token to your server or what you want to do
        }

    }
};

}
于 2016-05-31T13:03:11.353 に答える
1

アプリケーション ロジックに応じて、"新しい" トークンをFirebaseInstanceIdService.onTokenRefresh()メソッドで直接処理するコードを記述できます。または、このイベントが発生したときに UI を変更する必要がある場合は、LocalBroadcast を使用してこの情報をアクティビティに送信できます。

onTokenRefresh()が呼び出されると、アクティビティが閉じられる可能性があることに注意してください。

可能な実装は、2 つのオプションの組み合わせです。

  1. onTokenRefresh()トークンをサーバーに送信するためのロジックを追加します
  2. トークンが利用可能になったときに変更する必要がある UI がある場合は、LocalBroadcastReceiver を使用してアクティビティを通知します。
于 2016-05-30T20:08:46.010 に答える