如何处理FirebaseInstanceId.getInstance().getToken()= null

Luc*_*cky 15 android firebase firebase-cloud-messaging

我刚迁移到FCM.我已经添加了从FirebaseInstanceIdService扩展的类,以便在适当的时候接收refreshedToken.

我的问题是针对用户第一次安装我的应用程序并且由于某种原因无法从onTokenRefresh接收注册ID的情况.我们该如何应对呢?我可以设置从我FirebaseInstanceIdService类的广播接收器在接收到注册ID将通知主要活动?

Eda*_*izi 18

  • 如果你的设备没有连接到互联网onTokenRefresh()永远不会被调用,你应该通知用户他/她的设备没有互联网连接
  • firebase有自己的网络更改侦听器,当连接到互联网的设备然后尝试获取令牌并将其返回时,此时您可以通过发送本地广播接收器来接收注册令牌来告知您的主要活动.

使用以下代码:

    @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);


}
Run Code Online (Sandbox Code Playgroud)

在您的主要活动中:

    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
        }

    }
};

}
Run Code Online (Sandbox Code Playgroud)

  • 嗨,我想知道如果没有令牌你是否可以解释该怎么做.在我的应用程序中,始终必须有一个令牌.我认为它会像'splashscreen - > if(noToken){继续使用splashscreen直到令牌然后删除主屏幕的活动}`任何帮助都将非常感谢 (2认同)

小智 7

在manifest.xml文件工具中更改此内容:node ="replace"to tools:node ="merge".


Mru*_*ker 6

据我所知,只有当您尝试在没有Google Play服务的模拟器上运行您的应用以及在Google Play商店(在您的实际设备上)使用双重电子邮件ID时,令牌才会为空,但仅限于一个电子邮件ID将根据用途进行验证.这些是给你空令牌的情况,我已经在我的新项目中实现了FCM.因此,对于任何情况的其余部分,令牌将不为空.