未知状态码:17028 已通过安全网令牌,但未注册匹配的 SHA-256

Posted

技术标签:

【中文标题】未知状态码:17028 已通过安全网令牌,但未注册匹配的 SHA-256【英文标题】:unknown status code: 17028 A safety_net_token was passed, but no matching SHA-256 was registered 【发布时间】:2021-06-25 03:18:45 【问题描述】:

未知状态代码:17028 已通过安全网令牌,但在 Firebase 控制台中未注册匹配的 SHA-256。请确保此应用的 packageName/SHA256 对已在 Firebase 控制台中注册。

你好,我在开发应用程序时遇到了这个问题,我已经尝试修复,这些是我到目前为止所做的步骤,但结果相同:

使用 firebase 上的步骤正确配置了 firebase 和我的 Flutter 应用程序 我已经签署了我的应用程序并添加了调试和发布密钥的签名密钥,包括 SHA-1 密钥和 SHA-256 密钥 我也在谷歌云页面启用了安卓验证 我已启用身份验证提供程序、启用电话身份验证、启用密码/电子邮件

除此之外,当我使用添加到控制台的测试电话号码和插入的 otp 代码时,我的应用程序运行良好 但是当尝试使用其他未注册的电话号码对手机进行身份验证时,它一直显示错误。

我检查过颤振医生 -v 它没有错误 也执行颤振命令,结果没有任何与错误相关的东西。我使用了以下 firebase 插件

firebase_auth:^0.18.4+1 firebase_core:^0.5.3 cloud_firestore: ^0.14.4 firebase_admob: firebase_messaging:^7.0.3 firebase_storage: ^5.2.0

您的任何帮助将不胜感激

【问题讨论】:

能否请您从控制台添加错误? 【参考方案1】:

解决方法是: 如果您正确配置了 firebase 和应用项目,那么

运行 flutter clean 以清理您的项目依赖项。 从 firebase 下载新的 google-services.json 文件并将其添加到 Flutter 项目的 app 文件夹中。 运行flutter pub get 再次获取所有依赖项。 运行您的项目。

那你就可以走了。它对我有用。

【讨论】:

所有这些步骤都试过了。 那么,它是否有效? 我仍然面临同样的问题,仍在调查中 解决方法是:按“Win + R”并运行“resmon.exe”。转到 CPU 选项卡并在 Associated Handles 搜索栏中搜索“build”。右键单击“java.exe”进程,然后单击END PROCESS。运行 flutter clean 来清理你的项目依赖。从 firebase 下载新的 google-services.json 文件并将其添加到 Flutter 项目的 app 文件夹中。运行 pub get 再次获取所有依赖项。运行你的项目。那你就可以走了。它对我有用。 我正在使用ubuntu,你能详细说明在ubuntu上做什么吗?【参考方案2】:

我也遇到过类似的问题。我的解决方案是:重新生成 my-upload-key.keystore。希望对你有用!

【讨论】:

【参考方案3】:

我的情况是,我发现谷歌已将我猜想的应用程序放入黑名单,因为我尝试使用不同的应用程序密钥使用相同的代码,它起到了一种魅力,但该密钥已被列入黑名单,它不起作用还是。

感谢您的回答,非常感谢

【讨论】:

【参考方案4】:

您必须启用应用验证。

你可以检查这个答案 https://***.com/a/53513327/14709655

你可以使用这个链接 https://firebase.google.com/docs/auth/android/phone-auth#enable-app-verification

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案5】:

如果上述所有解决方案都尝试过,请按照我的解决方案。我相信你的问题可能和我的一样。

请检查您的android/app/build.gradle 文件。

signingConfigs 
        if (System.getenv("ANDROID_KEYSTORE_PATH")) 
            release 
                storeFile file(System.getenv("ANDROID_KEYSTORE_PATH"))
                keyAlias System.getenv("ANDROID_KEYSTORE_ALIAS")
                keyPassword System.getenv("ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD")
                storePassword System.getenv("ANDROID_KEYSTORE_PASSWORD")
            
         else 
            release 
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
                storePassword keystoreProperties['storePassword']
            
        
    

在我非常好的 cli 创建的项目中,signingConfigs 配置为仅用于发布构建,因此我自己生成的密钥不用于构建调试 apk。所以

来自flutter项目的根目录

cd android/
./gradlew signingReport

收集您的默认 SHA-1 和 SHA-256 密钥并在 firebase 控制台上更新。

flutter clean 并运行项目

不需要更新google-service.json文件

【讨论】:

这部分解决了它:从颤振项目的根目录 cd android/ ./gradlew signingReport 收集您的默认 SHA-1 和 SHA-256 密钥并在 firebase 控制台上更新。【参考方案6】:

在我的情况下,我在 firebase 中添加的 SHA-1 和 SHA-256 密钥与 Play 商店应用程序完整性证书不同。

所以我在firebase项目中添加了一个来自本地机器的设置和另一个来自Play控制台应用程序完整性的设置,如下图所示:

【讨论】:

以上是关于未知状态码:17028 已通过安全网令牌,但未注册匹配的 SHA-256的主要内容,如果未能解决你的问题,请参考以下文章

收到 Firebase 注册令牌但未显示通知

InvalidClientTokenId:请求中包含的安全令牌无效。状态码:403

Laravel 通过 Passport 实现 API 请求认证:第三方应用篇(授权码获取令牌)

设备注册 ID/设备令牌未生成

为啥通过 django rest 框架注册用户时出现状态码错误

网站处于联机状态 但未对连接尝试做出响应?