在哪种情况下FirebaseInstanceId.getInstance()。getInstanceId()会失败?

时间:2019-05-12 21:57:52

标签: java android

我正在为api 23到28开发一个Android应用程序。

在代码中,当用户登录时,我会有类似的内容:

FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<..>{ //and here i am logging in in oncomplete() })

在什么情况下此代码将失败?

到目前为止,我已经在没有安装播放服务且运行良好的模拟器中对其进行了测试...因此,我想考虑这种情况会失败的情况,因为如果它在一台设备上失败,则用户会无法登录,他会给我的应用程序低分。

请注意,我要执行的操作是将Firebase令牌发送到服务器,以便我可以向满足某些条件的特定用户发送通知。

1 个答案:

答案 0 :(得分:1)

据我所知,调用已概述的代码行不会看到任何故障。但是您可能想检查任务是否在onComplete内完成。

仅因为任务已完成并且已调用onComplete并不意味着您已成功检索令牌。在onComplete中,您可以调用task.isSuccessful()来确定令牌是否可用。 Take a look at their example code snippet here.我猜测没有Google Play服务的设备正在呼叫onComplete,但是任务未成功且没有可用的令牌。如果是这种情况,您可能会因为没有令牌而阻止它们登录-仅在任务成功并且获得令牌后才登录。

例如,我已经在Amazon Fire Tablet(没有Google Play服务)上测试了类似的代码,并且触发了onComplete,但是task.isSuccessful()返回了false,而task.getException()给出了我MISSING_INSTANCEID_SERVICE表示该设备没有Google Play服务,因此无法检索令牌。对于没有Google Play服务的设备或可能具有旧版不受支持的Google Play服务的设备,请务必小心。

话虽如此,我从未遇到没有被调用onComplete的情况。对我来说,它几乎总是瞬间被调用的,而且我从未见过调用这些特定行的任何失败。我只是认为您需要在onComplete内做一些额外的工作,以确保它成功。