簡體   English   中英

Android Firebase雲消息傳遞控制onTokenRefresh()上的服務

[英]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%工作。

https://github.com/firebase/quickstart-android

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM