中等待firebase pushtoken我正在使用Firebase通知。有些時候我沒有按時獲得按摩。我該如何等待?如何在android
pushToken = firebaseIDService.getToken();
//SOME CODE
registerUser(pushToken);
所以,我只是想停止功能,直到我得到了爲gettoken的結果()。
謝謝。
中等待firebase pushtoken我正在使用Firebase通知。有些時候我沒有按時獲得按摩。我該如何等待?如何在android
pushToken = firebaseIDService.getToken();
//SOME CODE
registerUser(pushToken);
所以,我只是想停止功能,直到我得到了爲gettoken的結果()。
謝謝。
該令牌是異步生成的,可以定期刷新。爲了確保您的應用程序採用了最新的令牌,實現FirebaseInstanceIdService .onTokenRefresh
如圖所示,文檔在monitoring token generation:
每當產生一個新的令牌,所以調用它的上下文
getToken
確保您正在訪問當前的onTokenRefreshcallback
火災,可用註冊令牌。請確保您已經添加服務到您的清單,然後調用getToken
在onTokenRefresh
的背景下,並記錄值,如圖:@Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); // If you want to send messages to this application instance or // manage this apps subscriptions on the server side, send the // Instance ID token to your app server. sendRegistrationToServer(refreshedToken); }
在上面的代碼片段的sendRegistrationToServer
功能是東西,你會實現你自己,因此可能相當於您的代碼中的registerUser
我怎樣才能用回調來實現它? –
'onTokenRefresh' **是一個回調 –
是的,據我所知,但我無法從該方法訪問其他類(我有registerUser)。在這個類中,我可以創建一個firebaseIDService實例(這就是我在做的)來調用getToken。我怎麼能打電話給其他班?我很抱歉,如果我對此慢一點。 –
警告!不要在主線上使用它! 此外,這是一個不好的做法(可能),更好地使用@FrankvanPuffelen的答案。 我不確定它是否正常工作,但我對少數異步操作使用相同的方法。
@WorkerThread
public String getTokeSync(Context context) {
String token = FirebaseInstanceId.getInstance().getToken();
if (token != null)
return token;
IntentFilter filter = new IntentFilter();
filter.addAction("com.google.android.c2dm.intent.RECEIVE");
filter.addCategory(BuildConfig.APPLICATION_ID);
final CountDownLatch lock = new CountDownLatch(1);
final FirebaseInstanceIdReceiver br = new FirebaseInstanceIdReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
token = FirebaseInstanceId.getInstance().getToken();
lock.countDown();
context.unregisterReceiver(this);
}
}
context.registerReceiver(br, filter);
lock.await(); // Better use await with timeout
return token;
}
你是什麼意思你沒有準時得到令牌? – tyczj
既然是一個異步任務,getToken將會啓動,但函數的其餘部分會繼續。所以,在getToken返回任何東西之前調用registerUser()。 –
所以然後把註冊用戶放在你的異步任務的onPostExecute – tyczj