如何解决在获取 Firebase Cloud Messaging 令牌时出现 SERVICE_NOT_AVAILABLE 错误

7

我正在尝试获取 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

getToken():

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
    }

我在尝试在真实的安卓设备上执行代码时,总是遇到这个错误:

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.

我已经安装了Google Play服务并连接到了互联网

我尝试过以下几种解决方案:

  1. 在清单文件中添加互联网权限。
  2. 在Firebase中输入SHA1和SHA256后,下载google.json文件。
  3. 启用Google Cloud中的Android设备验证。

有时候我不会得到错误信息,FCM令牌可以成功返回,但大多数情况下我都会遇到这个错误。

这是什么错误?

1个回答

9

我也遇到了同样的问题,这个问题是由于您的设备由于某些原因无法与FCM通信而引起的。 您可以执行以下检查以使其正常工作:

  1. 检查设备的互联网连接
  2. 在移动数据和Wi-Fi之间切换或反之
  3. 设备日期和时间应正确。
  4. 尝试清除缓存。
  5. 关闭应用程序,然后重新启动它。

我已经完成了所有步骤。我认为这是设备的问题。我可以在另一个设备上运行应用程序,没有任何错误。 - Aditya Dixit
2
我花了3个小时搜索错误的位置,直到我发现我的设备日期时间晚了1年。谢谢! - Marcos Gianetti
在我的情况下,我重新启动了计算机,从手机中删除了应用程序并进行了测试,一切正常! - Germano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接