如何修复获取令牌时 Firebase 云消息传递中的 SERVICE_NOT_AVAILABLE 错误

Adi*_*xit 7 android firebase firebase-cloud-messaging

我正在尝试获取 fcm 令牌并将其存储在 cloud 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
Run Code Online (Sandbox Code Playgroud)

获取令牌():

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
    }
Run Code Online (Sandbox Code Playgroud)

每当我尝试在真实的 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.
Run Code Online (Sandbox Code Playgroud)

我的 google play 服务在正确的互联网连接下运行

我尝试过的几个解决方案:

  1. 在清单中添加互联网权限:
  2. 输入 sha1 和 sha256 后从 firebase 下载 google.json 文件
  3. 在 Google Cloud 中启用 Android 设备验证。

有时我没有收到错误,并且 fcm 令牌已成功返回,但大多数时候我收到此错误。

错误是什么?

Sur*_*shi 11

即使我面临同样的问题,当您的设备由于某种原因无法与 FCM 通信时,就会出现此问题。您可以执行以下检查以使其正常工作:

  1. 检查您的设备是否连接到互联网
  2. 在移动数据和 WiFi 之间切换,反之亦然
  3. 设备日期时间应该正确。
  4. 尝试清理缓存。
  5. 终止该应用程序并重新启动它。

  • 我花了 3 个小时搜索错误所在,直到我发现我的设备日期时间晚了 1 年。谢谢!! (2认同)