【发布时间】:2017-02-05 03:21:32
【问题描述】:
在 GCM 时代,建议每次发布应用更新时都应检查是否提供了新的注册 ID(因为不能保证更新后相同)应用程序启动。
FCM 仍然是这种情况吗?我找不到任何关于此的文档
【问题讨论】:
标签: android firebase firebase-cloud-messaging
在 GCM 时代,建议每次发布应用更新时都应检查是否提供了新的注册 ID(因为不能保证更新后相同)应用程序启动。
FCM 仍然是这种情况吗?我找不到任何关于此的文档
【问题讨论】:
标签: android firebase firebase-cloud-messaging
您应该在应用运行时检查当前令牌并监控onTokenRefresh()以检测令牌何时更改。
通过调用FirebaseInstanceID.getToken()检查应用/主活动启动时的当前令牌:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
String token = FirebaseInstanceId.getInstance().getToken();
if (token != null) {
sendRegistrationToServer(refreshedToken);
}
}
...
在这个 sn-p 中调用的 sendRegistrationToServer() 方法是您实现将注册令牌发送到您自己的服务器(或 Firebase 数据库等无服务器解决方案)的方法。
通过继承 FirebaseInstanceIdService 并覆盖 onTokenRefresh() 来监控令牌的更改:
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
// 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);
}
在此处查看文档:https://firebase.google.com/docs/cloud-messaging/android/client#sample-register
【讨论】:
getToken 可以返回 null,因为令牌可能尚未生成。我将更新示例以处理该问题。
getToken() 可以阻塞,所以从另一个线程调用它,而不是直接从onCreate()
null 的回复。
您不需要检查令牌是否是最新的。方法
如果生成了新令牌,则始终调用onTokenRefresh()。
您需要做的是在调用onTokenRefresh() 时检查您的令牌是否已发送到您的服务器。
【讨论】: