相关疑难解决方法(0)

Firebase 云消息传递:FCM 令牌过期

据我所知,如果发生以下情况之一,FCM 令牌会自行更新。

-应用程序删除实例ID
-应用程序在新设备上恢复
-用户卸载/重新安装应用程序
-用户清除应用程序数据。

App端可以使用以下方法来监控Token更新。

监控代币生成

每当生成新令牌时都会触发 onTokenRefreshcallback,因此在其上下文中调用 getToken 可确保您正在访问当前可用的注册令牌。确保您已将服务添加到清单中,然后在 onTokenRefresh 的上下文中调用 getToken,并记录值,如下所示:

@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);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,当应用程序终止时,令牌就会过期,并且 FCM 服务器无法知道设备的新令牌是什么(如果存在)。因此,当我向该设备发送通知/数据消息时,服务器无法将其发送到设备,因为它不知道将其发送到哪里(因为没有有效的令牌)。如何确保在这种情况下我可以通知设备?我不生成客户令牌。所以它似乎时不时地刷新令牌。如何提高令牌的有效性?

android firebase firebase-cloud-messaging google-cloud-firestore

4
推荐指数
1
解决办法
1万
查看次数

使用Firebase 17.0.1进行INSTANCE_ID_EVENT操作怎么办?

因此,既然FirebaseInstanceIdService服务已被弃用,我不确定用什么替换它。

我以前在清单中声明了一个服务,如下所示:

        <service
            android:name=".fcm.FcmIdService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
            </intent-filter>
        </service>
Run Code Online (Sandbox Code Playgroud)

服务本身:

public class FcmIdService extends FirebaseInstanceIdService {

    @Override
    public void onTokenRefresh() {
        // Create notification channel.
        createFcmNotificationChannel();
    }

}
Run Code Online (Sandbox Code Playgroud)

如果删除该服务,我将不再收到通知,因此我假设我必须用其他东西代替它。

谢谢。

编辑:该问题与建议的重复问题有所不同,它还涵盖了对我仍然不清楚的受影响服务的清单声明。

android firebase firebase-cloud-messaging

2
推荐指数
1
解决办法
1150
查看次数