Firebase onTokenRefresh()未被调用 [英] Firebase onTokenRefresh() is not called

查看:909
本文介绍了Firebase onTokenRefresh()未被调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的日志中的 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 $ b

onTokenRefresh仅在生成新标记时调用。如果您的应用程序之前已经安装并生成了一个令牌,那么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 MainActivityin 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆