FCM - onTokenRefresh()永远不会被调用

6

我按照Firebase Cloud Messaging提供的设置流程进行了操作,但无论如何都没有调用onTokenRefresh方法。

以下是相关更改:

应用程序的build.gradle:

dependencies {
    ...
    compile 'com.google.firebase:firebase-messaging:9.4.0'
}

apply plugin: 'com.google.gms.google-services'

项目的build.gradle:

dependencies {
    classpath 'com.android.tools.build:gradle:2.1.2'
    classpath 'com.google.gms:google-services:3.0.0'
}

AndroidManifest.xml

<application
    ...
    <service
        android:name="com.blynq.app.services.MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>

    <service
        android:name="com.blynq.app.services.MyFirebaseInstanceIDService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>

</application>


public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {

    @Override
    public void onTokenRefresh() {
        String token = FirebaseInstanceId.getInstance().getToken();
        Log.i("FCM", "Token refreshed - " + token);
        registerTokenWithServer(token);
    }
}

日志显示 I/FirebaseInitProvider: FirebaseApp 初始化成功,但是却没有执行 onTokenRefresh()。

我确定我漏掉了什么,但是无法理解出错的地方在哪里。

编辑:这种情况只发生在模拟器上,使用 Android 设备则以上述设置正常工作。


1
尝试在重新安装之前卸载该应用程序。 附注:只有第一个动作"INSTANCE_ID_EVENT"是正确的。你可以删除第二个。 - Diego Giorgini
1
刚刚发现这只会在模拟器上出现,使用以上设置的 Android 设备运行正常。 - jay
@jay,你在清单文件中使用了工具命名空间吗? - Chintan Soni
只有当令牌更改时,才会调用onTokenRefresh()。你的应用程序很可能已经生成了一个令牌。你可以删除应用数据/重新安装应用程序,或者在MainActivity.onCreate中使用FirebaseInstanceId.getInstance().getToken()读取令牌。 - Frank van Puffelen
可能是Firebase FCM force onTokenRefresh() to be called的重复问题。 - Machado
显示剩余3条评论
1个回答

1

FCM客户端需要运行Android 2.3或更高版本的设备,同时还需要安装Google Play商店应用程序,或者运行带有Google API的Android 2.3模拟器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,