好的,所以我有一个应用程序,该应用程序首先会带您浏览一些欢迎的幻灯片,然后带您进入登录/注册页面,然后转到MainActivity
。
我刚刚实现FCM
了该服务,并且在用户看到这些页面中的任何页面token
之前,服务都会生成一个。我该怎么做才能使服务在到达后运行MainActivity
?
问题是我试图将令牌刷新到MySQL DB
相应的用户帐户后立即将其发送,但是由于用户尚未登录,因此null
发送给服务器的消息失败。有什么好的设计方法?我曾考虑过将令牌保存在SharedPreferences
用户登录后发送到服务器中,但是稍后在刷新令牌时会带来很多麻烦?
可能的解决方案:
我不确定我是否完全理解这两种服务的运行方式,但是说onTokenRefresh
我只是将令牌保存到SharedPreferences
MainActivity中SP
,然后从中获取值,然后将其发送到服务器。在这种情况下,刷新令牌后,新值将立即SharedPreferences
再次输入。但是我仍然需要检查它是否是SP中的新值,然后将其重新上传到服务器。这很混乱!
是FCM令牌是自动生成的。但是,尝试以不同的角度看待这一点。
这就是我的处理方式。
让FCM在您的应用启动后立即生成令牌。OnTokenRefresh将被调用,您只需将其保存为以下首选项即可:
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
sendRegistrationToServer(refreshedToken);
}
private void sendRegistrationToServer(String token) {
// Add custom implementation, as needed.
SharedPreferenceUtils.getInstance(this).setValue(getString(R.string.firebase_cloud_messaging_token), token);
// To implement: Only if user is registered, i.e. UserId is available in preference, update token on server.
int userId = SharedPreferenceUtils.getInstance(this).getIntValue(getString(R.string.user_id), 0);
if(userId != 0){
// Implement code to update registration token to server
}
}
希望您能清楚地知道方法。询问是否需要更多许可。
编辑
使用新的Firebase SDK(21.0.0),您需要重写onNewToken()
method而不是 onTokenRefresh()
@Override
public void onNewToken(@NonNull String s) {
super.onNewToken(s);
sendRegistrationToServer(s);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句