未为调试版本生成 Firebase 消息令牌

Posted

技术标签:

【中文标题】未为调试版本生成 Firebase 消息令牌【英文标题】:Firebase Messaging token not generated for Debug build 【发布时间】:2022-01-06 00:01:36 【问题描述】:

在发布版本中生成 FCM 令牌。

在调试中,出现此错误 -

response: [403 Forbidden: 
  "error": 
    "code": 403,
    "message": "Requests from this android client application com.example.app are blocked.",
    "status": "PERMISSION_DENIED",
    "details": [
      
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "API_KEY_ANDROID_APP_BLOCKED",
        "domain": "googleapis.com",
        "metadata": 
          "consumer": "projects/381175343517",
          "service": "firebaseinstallations.googleapis.com"
        
      
    ]
  

]

E/Firebase-Installations:Firebase 安装无法通信 由于配置无效,使用 Firebase 服务器 API。请更新 您的 Firebase 初始化过程并设置有效的 Firebase 选项 (API 密钥、项目 ID、应用程序 ID)在初始化 Firebase 时。

我就是这样设置的-

    在 Firebase 中使用 Release SHA-1 创建了我的 android 项目 在https://console.cloud.google.com/apis/ 我限制了自动生成的密钥 仅用于我的应用,提供带有应用包名称的 Release SHA-1。 API 限制:选择“不限制密钥” 启用 Firebase 安装

使用这段代码获取FCM令牌-

        FirebaseMessaging.getInstance().token
        .addOnCompleteListener 
            if (it.isSuccessful && it.result != null) 
                Toast.makeText(this, "Token generated!", Toast.LENGTH_SHORT).show()
             else 
                Toast.makeText(this, "Token not generated!", Toast.LENGTH_SHORT).show()
            
        

到目前为止我尝试过的 -

在更改密钥时删除了自动生成的构建(和 values.xml 文件)目录。 使用 FirebaseOptions 进行设置 发布版本(有效) 在 Android 应用程序限制中也提供了我的调试 SHA-1,它可以工作,但如果我有 超过 20 人在开发这个应用程序,他们都必须提供他们的调试 SHA- 1?我觉得不好。 如果我删除 API 的应用程序限制(发布 SHA-1),那么它可以工作 用于调试和发布。但我想为我的应用程序限制它 仅限。

预期结果:

应为发布和调试版本生成令牌

实际结果:

没有为调试构建生成令牌。

请帮忙,我已经尝试了有关此问题甚至相关问题的所有可用资源。

如果我需要提供任何其他信息,请告诉我。 谢谢!

【问题讨论】:

【参考方案1】:

在 Android Studio 的终端中,使用此命令生成调试密钥库。

keytool -genkey -v -keystore myapp_debug_android.keystore -storepass android -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "C=US, O=Android, CN=Android Debug"

myapp_debug_android.keystore 是文件名。

然后在您应用的 gradle 文件中使用此密钥库来调试签名配置:

signingConfigs 

        release 
             ... release config
        

        debug 
            storeFile file('../myapp_debug_android.keystore')
        
    

这将使您的调试构建哈希 (SHA) 在任何系统上保持相同。

【讨论】:

谢谢你! 如果有效,请将其标记为正确答案@User7788。快乐编码!

以上是关于未为调试版本生成 Firebase 消息令牌的主要内容,如果未能解决你的问题,请参考以下文章

APN 中的 Firebase 令牌生成器失败

Firebase 动态链接不适用于发布版本

如何在 Flutter 中删除 Firebase 云消息传递令牌

signInWithCustomToken()使用Firebase自己的令牌

未为 C# 项目设置 OutputPath 属性

未为 Firebase 云功能启用 Cors