Firebase onTokenRefresh()未被调用 [英] Firebase onTokenRefresh() is not called
问题描述
在我的日志中的 MainActivity
中,我可以看到使用 FirebaseInstanceId.getInstance()。getToken()
并显示生成的令牌。但是它好像在我的 MyFirebaseInstanceIDService
中它扩展到 FirebaseInstanceIdService
, onTokenRefresh()
没有被调用,在这个函数中,它表示这个标记最初是在这里生成的。我需要调用 sendRegistrationToServer()
这就是为什么我想知道为什么它不会在 onTokenRefresh()
。
这是我的代码
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh(){
//获取更新的InstanceID标记。
String refreshedToken = FirebaseInstanceId.getInstance()。getToken();
Log.d(TAG,Refreshed token:+ refreshedToken);
sendRegistrationToServer(refreshedToken);
$ div $解析方案
$在FirebaseInstanceIdService中的b $ bonTokenRefresh仅在生成新标记时调用。如果您的应用程序之前已经安装并生成了一个令牌,那么onTokenRefresh将不会被调用。尝试卸载并重新安装应用程序强制生成一个新的令牌,这将导致onTokenRefresh调用。
另外,请确保您的FirebaseInstanceIdService已在您的AndroidManifest.xml中正确定义
在您的清单文件中。
< service
android:name =com.bnt.etailers.fcm.MyFireBaseInstanceIDService
android:exported =false>
< intent-filter>
< action android:name =com.google.firebase.INSTANCE_ID_EVENT/>
< / intent-filter>
< / service>
< service
android:name =com.bnt.etailers.fcm.GCMNotificationIntentService
android:exported =false>
< intent-filter>
< action android:name =com.google.firebase.MESSAGING_EVENT/>
< / intent-filter>
< / service>
FirebaseInstanceIdService class
public class MyFireBaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = MyFireBaseInstanceIDService.class.getSimpleName();
@Override
public void onTokenRefresh(){
//获取更新的InstanceID标记。
String refreshedToken = FirebaseInstanceId.getInstance()。getToken();
Log.d(TAG,Refreshed token:+ refreshedToken);
if(refreshedToken!= null){
SettingPreferences.setStringValueInPref(this,SettingPreferences.REG_ID,refreshedToken);
}
// TODO:实现这个方法来发送任何注册到您的应用程序的服务器。
sendRegistrationToServer(refreshedToken);
}
// [END refresh_token]
/ **
*将令牌保留给第三方服务器。
*
*修改此方法以将用户的FCM InstanceID令牌与您的应用程序维护的任何服务器端帐户
*相关联。
*
* @param令牌新的令牌。
* /
private void sendRegistrationToServer(String token){
//根据需要添加自定义实现。
}}
FirebaseMessagingService类。
public class GCMNotificationIntentService extends FirebaseMessagingService {
//设置通知的ID,因此可以更新
public GCMNotificationIntentService (){
super();
@Override
public void onMessageReceived(RemoteMessage message){
}}
In my MainActivity
in my log, I can see the token using FirebaseInstanceId.getInstance().getToken()
and it display the generated token. But it seems like in my MyFirebaseInstanceIDService
where it is extends to FirebaseInstanceIdService
, the onTokenRefresh()
is not called, where in this function it was said that the token is initially generated here. I needed to call sendRegistrationToServer()
that's why I'm trying to know why it doesn't go in the onTokenRefresh()
.
Here is my code
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
sendRegistrationToServer(refreshedToken);
}
}
onTokenRefresh in FirebaseInstanceIdService is only called when a new token is generated. If your app was previously installed and generated a token then onTokenRefresh would not be called. Try uninstalling and reinstalling the app to force the generation of a new token, this would cause onTokenRefresh to be called.
Also be sure that your FirebaseInstanceIdService is properly defined in your AndroidManifest.xml
In your Manifest File.
<service
android:name="com.bnt.etailers.fcm.MyFireBaseInstanceIDService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service
android:name="com.bnt.etailers.fcm.GCMNotificationIntentService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
FirebaseInstanceIdService class
public class MyFireBaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = MyFireBaseInstanceIDService.class.getSimpleName();
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
if (refreshedToken!=null) {
SettingPreferences.setStringValueInPref(this, SettingPreferences.REG_ID, refreshedToken);
}
// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);
}
// [END refresh_token]
/**
* Persist token to third-party servers.
*
* Modify this method to associate the user's FCM InstanceID token with any server-side account
* maintained by your application.
*
* @param token The new token.
*/
private void sendRegistrationToServer(String token) {
// Add custom implementation, as needed.
}}
FirebaseMessagingService class.
public class GCMNotificationIntentService extends FirebaseMessagingService {
// Sets an ID for the notification, so it can be updated
public GCMNotificationIntentService() {
super();
}
@Override
public void onMessageReceived(RemoteMessage message) {
}}
这篇关于Firebase onTokenRefresh()未被调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!