Android FCM 取得 token 為 null 解決方式

Arvin
3 min readJul 20, 2018

--

很多 Android 的專案都需要用到推播的功能,但你有遇過使用 FCM 取得 token 有時會無法順利取得的狀況嗎?通常專案的設計中 app 會將 token 傳給 server 作為裝置的依據,這時 token 為 null 就會發生很大的問題。

FCM 的 token 為 null 的情況通常發生在第一次安裝完 app 開啟時,為了解決這情況發生,我解決的方式為如果取得的 token 為 null 時會延遲一秒在取得 token 一次直到順利取得 token 為止。

private void getToken() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
final String pushToken = FirebaseInstanceId.getInstance().getToken();

if (null == pushToken) {
getToken();
} else {
//Next scenario
}
}
}, 1000);
}

不過 FirebaseInstanceId.getInstance().getToken() 已經被 deprecated 了!!!必須改使用下面的方法 :

FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
final String deviceToken = instanceIdResult.getToken();
}
});

另外要注意 FCM token 更新的時機點為下面這 4 項 :

  • 刪除 Instance ID
  • 將備份的 app 資料還原到新的手機上
  • 移除或重新安裝 app
  • 使用者將 app 的資料清除

刪除 Instance ID 方法 :

try {
FirebaseInstanceId.getInstance().deleteInstanceId();
} catch (IOException e) {
e.printStackTrace();
}

結論 :

使用 FCM 必須知道本身的特性還有如何正確的取得 token 和刪除,假設做一個使用者登入登出的功能,登出的時候沒有刪除 token 且登入時 token 沒有更新的清況下是會出很大的問題。

--

--