![](/img/trans.png)
[英](Android) Firebase cloud messaging - ontokenrefresh never called on specific device
[英]Android Firebase cloud messaging Control the services onTokenRefresh()
我是Firebase的新手,我有一個登錄屏幕。 成功登錄后,我想調用getToken方法以及Token,我也將User loginid保存在集中式服務器中。 因此,登錄后我呼叫這兩行。
FirebaseMessaging.getInstance().subscribeToTopic("test");
FirebaseInstanceId.getInstance().getToken();
我的服務如下
public class FirebaseInstanceIDService extends FirebaseInstanceIdService {
public static String busid;
@Override
public void onTokenRefresh() {
String token = FirebaseInstanceId.getInstance().getToken();
registerToken(token);
}
private void registerToken(String token) {
OkHttpClient client = new OkHttpClient();
business_login_id=Lib.GetPref(FirebaseInstanceIDService.this, "KEY_USER_ID", "");
RequestBody body = new FormBody.Builder()
.add("token",token)
.add("business_login_id", business_login_id)
.build();
Lib.Debug("Calling URL with body "+body.toString());
Request request = new Request.Builder()
.url("http://mywebsite.com/gcm/register.php")
.post(body)
.build();
try {
client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
}
我的問題是:為什么無論登錄后屏幕如何,都執行Service FirebaseInstanceIDService,並立即為該應用程序創建令牌ID(在我的情況下,business_login_id為null)。
目前,我的用戶ID尚未登錄。 有什么方法可以使用正確的憑證創建Token NOW來完全控制POST登錄?
首次安裝應用程序時, FirebaseInstanceIdService
將自動啟動。 它不會等待,直到用戶已登錄,也不需要:令牌可以在沒有用戶簽字來得到 。
但是通常情況下,在用戶通過身份驗證之前,您無法保存令牌(例如, 保存到托管數據庫)。 因此,您需要掛在應用程序中某個地方的令牌上,或者稍后再請求該令牌。
您可以將令牌存儲在“共享首選項”中,直到您的應用可以使用它為止:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString("token", token);
editor.commit();
然后,用戶登錄后:
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
String token = sharedPref.getInt(token, null);
registerToken(token);
安裝該應用程序后,Firebase Cloud Messaging將立即生成令牌。 因此,很可能在您的用戶登錄時,很早就生成了令牌。 在這種情況下,您也可以在用戶登錄后簡單地請求令牌。
如果您使用的是Firebase身份驗證,則類似於:
FirebaseAuth.getInstance().addAuthStateListener(new FirebaseAuth.AuthStateListener() {
public void onAuthStateChanged(FirebaseAuth firebaseAuth) {
FirebaseUser user = firebaseAuth.getCurrentUser();
if (user != null) {
String token = FirebaseInstanceId.getInstance().getToken();
registerToken(token);
}
}
};
對於Firebase,無需檢查更多參考。 只需閱讀此示例代碼,它就可以100%工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.