我刚迁移到FCM。我已经添加了从FirebaseInstanceIdService扩展的类,以便在适当的时候接收refreshedToken。
我的问题是针对用户第一次安装我的应用程序并且由于某种原因无法从onTokenRefresh接收注册ID的情况。我们该如何应对呢?我可以从我的FirebaseInstanceIdService类设置一个广播接收器,它会在收到注册ID时通知Main活动吗?
答案 0 :(得分:18)
使用以下代码:
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d("FCN TOKEN GET", "Refreshed token: " + refreshedToken);
final Intent intent = new Intent("tokenReceiver");
// You can also include some extra data.
final LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(this);
intent.putExtra("token",refreshedToken);
broadcastManager.sendBroadcast(intent);
}
在您的主要活动中:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
LocalBroadcastManager.getInstance(this).registerReceiver(tokenReceiver,
new IntentFilter("tokenReceiver"));
}
BroadcastReceiver tokenReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String token = intent.getStringExtra("token");
if(token != null)
{
//send token to your server or what you want to do
}
}
};
}
答案 1 :(得分:7)
在manifest.xml文件中更改此设置 工具:节点="替换" 至 工具:节点="合并"
答案 2 :(得分:6)
据我所知,只有当您尝试在没有Google Play服务的模拟器上运行您的应用以及您在Google Play商店中使用双重电子邮件ID时(在您的实际设备上),令牌才会为空,但只验证了一个电子邮件ID用于使用情况。这些是给你空令牌的情况,我已经在我的新项目中实现了FCM。因此,对于其他任何情况,令牌都不会为空。
答案 3 :(得分:1)
根据您的应用程序逻辑,您可以编写代码来处理" new"直接在FirebaseInstanceIdService.onTokenRefresh()
方法中使用令牌,或者如果您需要在发生此事件时更改UI,则可以使用LocalBroadcast将此信息发送到您的活动。
请注意,调用onTokenRefresh()
时,您的活动可能会被关闭。
可能的实施可以混合使用两个选项:
onTokenRefresh()
中添加一些逻辑以将令牌发送到您的服务器答案 4 :(得分:1)
使用此类扩展为..
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
public static final String REGISTRATION_SUCCESS = "RegistrationSuccess";
@Override
public void onTokenRefresh() {
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
Toast.makeText(MyFirebaseInstanceIDService.this,refreshedToken,Toast.LENGTH_LONG).show();
}
}
答案 5 :(得分:0)
如果您在模拟器上运行它,请检查您是否在工具中启用了Google Play服务 - > Android - > SDK Manager - > SDK工具 - > Google Play服务
安装完成后,重启Android Studio和模拟器
它对我有用