Pertanyaan Token Firebase dihasilkan setiap kali baru


Kami menggunakan Firebase Cloud Messaging di aplikasi kami untuk menampilkan pemberitahuan push. Menurut FirebaseInstanceId dokumen, ID Instance stabil kecuali ketika:

  • Aplikasi menghapus ID Instance
  • Aplikasi dipulihkan di perangkat baru
  • Pengguna mencopot pemasangan / menginstal ulang aplikasi
  • Pengguna menghapus data aplikasi

Namun setiap kali kami meluncurkan aplikasi (sebelumnya dihentikan, tidak dilanjutkan), Token yang berbeda dikembalikan melalui FirebaseInstanceIdService  onTokenRefreshed () panggilan balik.

Saya bertanya-tanya apakah ini adalah perilaku normal dari layanan atau ada bug dalam kode.


Memperbarui

Ketergantungan pada akar membangun gradle mengajukan:

classpath 'com.google.gms:google-services:3.0.0'

Ketergantungan pada app build gradle mengajukan:

"com.google.firebase:firebase-messaging:9.2.1"
"com.google.android.gms:play-services-base:9.2.1"

// defined at the bottom of the same file: plugin for firebase
apply plugin: 'com.google.gms.google-services'

FirebaseInstanceIdService:

@Override
public void onTokenRefresh() {
  // Get the saved token from the shared preferences
  final String oldToken = PrefsHelper.getStringValue(PREF_DEVICE_TOKEN);

  Log.d(TAG, "Old token: " + oldToken);

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

  Log.d(TAG, "Refreshed token: " + refreshedToken);

  if (TextUtils.isEmpty(oldToken)) {
    handleNewToken(refreshedToken);
  } else {
    handleTokenUpdate(oldToken, refreshedToken);
  }
}

5
2017-07-21 16:26


asal


Jawaban:


Kami menggunakan Firebase Cloud Messaging dalam sebuah proyek juga.

Kami menggunakan firebase di aplikasi android dengan:

compile 'com.google.firebase:firebase-core:9.0.2'

Tanda terima yang kami terima bertahan setiap kali kami meluncurkan kembali aplikasi.

Lebih baik memastikan jika setiap kali Anda meluncurkan aplikasi, token disegarkan di Anda FirebaseInstanceService:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

  private static final String TAG = "MyFirebaseIIDService";

  @Override public void onTokenRefresh() {
    ...

    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    // check here.
    Log.d(TAG, "Refreshed token: " + refreshedToken);

    ...
  }
}

Kemudian pastikan di server Anda, Anda telah mengaturnya dengan benar Server Firebase.

Ini bisa menjadi bug jika Anda mendapatkan token yang berbeda setiap kali Anda meluncurkan aplikasi. Tetapi pastikan Anda telah menguji proyek android Anda dengan Pustaka Firebase terbaru.

Pertanyaan ini mungkin terkait dengan masalah Anda:
Autentikasi Android Firebase gagal: expired_token (Auth token kedaluwarsa)


3
2017-07-22 06:16