我正在为api 23到28开发一个Android应用程序。
在代码中,当用户登录时,我会有类似的内容:
FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<..>{ //and here i am logging in in oncomplete() })
在什么情况下此代码将失败?
到目前为止,我已经在没有安装播放服务且运行良好的模拟器中对其进行了测试...因此,我想考虑这种情况会失败的情况,因为如果它在一台设备上失败,则用户会无法登录,他会给我的应用程序低分。
请注意,我要执行的操作是将Firebase令牌发送到服务器,以便我可以向满足某些条件的特定用户发送通知。
答案 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
内做一些额外的工作,以确保它成功。