我試圖檢索Firebase標記,但是當我第一次運行應用程序時,firebase標記爲null。我不知道爲什麼。當我第二次運行應用程序時,我得到了令牌。我看到另一篇文章有類似的問題,但我不明白。當我第一次運行應用程序時,Firebase標記爲空
這是我的代碼:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String LOGTAG = "android-fcm";
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
storeTokenInPref(refreshedToken);
}
private void storeTokenInPref(String token) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("regId", token);
editor.apply();
}
我有一個片段,你可以得到優惠的令牌,然後我想比較,如果令牌是在數據庫中。
public class Profile extends Fragment implements MainActivity.OnBackPressedListener{
private View view;
private SharedPreferences preferences;
private String token;
private static final String LOGTAG = "android-fcm";
public Profile(){}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.profile, container, false);
((MainActivity) getActivity()).setOnBackPressedListener(this);
preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
displayFirebaseToken();
return view;
}
private void displayFirebaseToken() {
token = preferences.getString("regId", null);
Log.e(LOGTAG, "Firebase reg id: " + token);
if (!TextUtils.isEmpty(token)) {
SQLiteHelper database = new SQLiteHelper(getActivity(), "DB", null, 1);
List<Beacon> beaconList = database.getAllBeacons();
String classroom = "";
for (int i = 0; i < beaconList.size(); i++) {
if (beaconList.get(i).getId().equals(token)) {
classroom = beaconList.get(i).getClassroom();
break;
}
}
classroomTextView.setText(classroom);
}else {
System.out.println("Firebase token is not received yet!");
}
}
調用'getToken()'時可能會收到空標記(請參閱[docs](https://firebase.google.com/docs/cloud-messaging/android/client#retrieve-the-current-registration -token))。 因此,第一次運行應用程序時,該令牌很可能仍在生成。在你的文章中,你已經實現了'onTokenRefresh()'。你可以驗證在調用'getToken()'一段時間之後它是否被調用嗎?如果是這樣,那麼這應該只是預期的行爲。 –