首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不调用Firebase onTokenRefresh()

不调用Firebase onTokenRefresh()
EN

Stack Overflow用户
提问于 2016-05-26 04:05:39
回答 13查看 73K关注 0票数 72

在日志中的MainActivity中,我可以看到使用FirebaseInstanceId.getInstance().getToken()的令牌,它显示生成的令牌。但是在我的MyFirebaseInstanceIDService (扩展到FirebaseInstanceIdService )中,似乎没有调用onTokenRefresh(),在这个函数中,据说令牌最初是在这里生成的。我需要打电话给sendRegistrationToServer(),这就是为什么我想知道为什么它不进入onTokenRefresh()

这是我的密码

代码语言:javascript
运行
复制
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);
    }
}
EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2016-05-26 15:47:38

只有在生成新令牌时才调用FirebaseInstanceIdService中的FirebaseInstanceIdService。如果您的应用程序是以前安装并生成的令牌,那么onTokenRefresh将不会被调用。尝试卸载和重新安装应用程序,以强制生成一个新令牌,这将导致onTokenRefresh被调用。

还请确保您的FirebaseInstanceIdService在AndroidManifest.xml中有正确的定义。

在你的报表文件里。

代码语言:javascript
运行
复制
 <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类

代码语言:javascript
运行
复制
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类。

代码语言:javascript
运行
复制
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) {

}}
票数 106
EN

Stack Overflow用户

发布于 2016-05-26 13:28:58

我和你一样有同样的问题。我的错误是:我将<service>标记放置在<application>标记之外的AndroidManifest.xml文件中。

我的看上去是这样的:

代码语言:javascript
运行
复制
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

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

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

而且没有任何问题。

票数 23
EN

Stack Overflow用户

发布于 2016-11-09 05:56:46

是的,有时可能会发生这种情况。

无论您想要获得fcm id,请调用以下方法。

代码语言:javascript
运行
复制
    try {
            String refreshedToken = FirebaseInstanceId.getInstance().getToken();
            Log.d("Firbase id login", "Refreshed token: " + refreshedToken);
        } catch (Exception e) {
            e.printStackTrace();
        }
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37451395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档