FCM令牌何时失效?
FCM令牌过期的原因是因为在特定事件发生时,会生成新的令牌。为了解决这个问题,需要创建一个类,该类继承FirebaseInstanceIdService,并重写onRefreshToken方法。在这个方法中,可以获取更新的InstanceID令牌,并将其发送到服务器上。此外,还需要在清单文件中注册这个服务。
具体实现代码如下:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { public void onTokenRefresh() { // 获取更新的InstanceID令牌 String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); // 如果要向该应用实例发送消息或在服务器端管理应用订阅,请将Instance ID令牌发送到您的应用服务器 sendRegistrationToServer(refreshedToken); } }
在清单文件中注册服务:
需要注意的是,现在需要将intent action更改为`com.google.firebase.MESSAGING_EVENT`,详情请参考这里:stackoverflow.com/questions/51148336/…。
FCM token过期的原因是提供的设备令牌(device token)未被注册。当设备令牌未注册时,会返回一个错误信息,指出设备令牌未注册,并提供了更多详细信息。解决方法是删除该设备令牌,并停止使用它发送消息。
以上代码使用Firebase Admin的sendToDevice方法来检查设备令牌是否有效。该方法会发送一条测试通知到指定的设备令牌,并设置dryRun为true,以便进行检查而不实际发送通知。如果设备令牌未注册,将返回一个包含错误信息的FirebaseMessagingError对象。根据错误信息中的code属性可以判断设备令牌未注册的原因。
通过调用上述代码中的isValidDeviceToken函数,并传入设备令牌作为参数,可以判断设备令牌是否有效。函数将返回true表示有效,返回false表示无效。
需要注意的是,上述代码中使用了Firebase Admin的JavaScript库来实现检查设备令牌的功能。对于其他编程语言,可以根据相应的Firebase Admin库提供的功能来实现相同的功能。
FCM(Firebase Cloud Messaging)令牌是用于标识设备和应用程序实例的唯一标识符。根据提供的信息,FCM令牌在以下情况下会自动更新:
- 应用程序删除实例ID
- 应用程序在新设备上恢复
- 用户卸载/重新安装应用程序
- 用户清除应用程序数据
为了获取当前可用的注册令牌,可以在onTokenRefresh回调中调用getToken方法。以下是一个示例代码:
public void onTokenRefresh() { // 获取更新的实例ID令牌 String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); // 如果您想向此应用程序实例发送消息或在服务器端管理此应用程序的订阅,请将实例ID令牌发送到您的应用服务器。 sendRegistrationToServer(refreshedToken); }
需要注意的是,其中的onTokenRefresh方法已经被标记为过时,应该使用onNewToken方法替代。
如果服务器需要知道新令牌是用于新设备还是替换旧令牌,可以与设备ID或用户ID进行比较,并进行相应的更新。
关于原始令牌的问题,根据提供的信息,如果将原始令牌存储在某个地方,并尝试将其用作任何新的FCM的目标,它将不再有效。
以上信息来源于Firebase官方文档:firebase.google.com/docs/cloud-messaging/android/…