android - 如何在获取令牌时修复firebase云消息传递中的SERVICE_NOT_AVAILABLE错误
问题描述
我正在尝试获取 fcm 令牌并将其存储在云 Firestore 中:
val user = User(et_email_sign_up_activity.text.toString(), et_name_sign_up_activity.text.toString(),
et_mobile_sign_up_activity.text.toString(), "",
FirebaseAuth.getInstance().currentUser?.uid!!, tv_address.text!!.toString(), getToken())
Firebase().uploadUserSignIn(user, this)//uploads user to cloud firestore
获取令牌():
private fun getToken(): String{
var token = ""
FirebaseMessaging.getInstance().token.addOnSuccessListener {
token = it
Log.i("token", it)
}.addOnFailureListener {
val dialog = AlertDialog.Builder(this)
dialog.setMessage(it.toString())
dialog.show()
}
return token
}
每当我尝试在真正的 android 设备中执行我的代码时,我总是会收到此错误:
E/FirebaseMessaging: Topic sync or token retrieval failed on hard
failure exceptions: java.util.concurrent.ExecutionException:
java.io.IOException: SERVICE_NOT_AVAILABLE. Won't retry the operation.
我有运行正确的互联网连接的谷歌播放服务
我尝试过的几个解决方案:
- 在清单中添加互联网权限:
- 输入sha1和sha256后从firebase下载google.json文件
- 在谷歌云中启用安卓设备验证。
有时我没有收到错误,并且 fcm 令牌成功返回,但大多数时候我收到此错误。
错误是什么?
解决方案
即使我面临同样的问题,当您的设备由于某种原因无法与 FCM 通信时,也会出现此问题。您可以执行以下检查以使其正常工作:
- 检查您与设备的互联网连接
- 在移动数据和 wifi 之间切换,反之亦然
- 设备日期时间应该是正确的。
- 尝试清理缓存。
- 杀死应用程序并重新启动它。
推荐阅读
- gcc - 如何找出内核编译的内核文件列表?
- javascript - 音频无法在移动 chrome 上播放
- ruby - “nil:NilClass 的未定义方法‘+’”
- c# - 在不阅读内容的情况下丢弃 HttpResponseMessage 是否安全?
- java - 没有明显冗余的类型转换,Java 无法正确推断流类型
- python - 定时器每 5 分钟运行一次(0、5、10、15 等) 24/7 不间断
- python - 物体尺寸测量
- base64 - 想了解 ZPL 到图像的转换
- r - 将 R 数据框打印到同一行列的文件中
- python-3.x - Bokeh 不生成绘图,而是返回一个 HTML 文件