无法解析符号 default_web_client_id GoogleSignInOptions Android Firebase
Posted
技术标签:
【中文标题】无法解析符号 default_web_client_id GoogleSignInOptions Android Firebase【英文标题】:Cannot resolve symbol default_web_client_id GoogleSignInOptions Android Firebase 【发布时间】:2019-06-16 19:40:08 【问题描述】:我的项目在过去六个月内运行良好,并且应用在 Play 商店中。对于更新,我重新打开项目显示以下代码的 default_web_client 未解析。
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
我尝试以下方法,
1.清理重建
2.清除缓存并重启
3.设置getString(R.string.default_web_client_id)
为空字符串并运行项目生成
app/build/generated/res/google-services/build_type/values/values.xml
文件作为来自this链接的指令
4.用getString(R.string.default_web_client_id)
替换空字符串
现在我可以运行该项目,也可以进行发布构建。但是,仍然无法解析符号 default_web_client_id。
任何更新都会有所帮助...
注意:直接添加oauth_client->client_id
会报错
W/GoogleActivity: Google sign in failed
com.google.android.gms.common.api.ApiException: 12500:
at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source)
【问题讨论】:
签出this。 @AlexMamo 我也尝试过,但在应用启动时会崩溃 出现什么错误? @AlexMamo 现在卸载和安装后不会显示任何崩溃 您是否也尝试将clientID 作为参数而不是R.string.default_web_client_id)
传递?
【参考方案1】:
我也遇到了和你一样的问题。更新 Android Studio 后,出现错误。 无需修复,因为 Google 试图让您的应用越来越安全。如果您尝试为 default_web_client_id 创建另一个值,它将显示错误重复变量。 查找 default_web_client_id 的值 * 将模式更改为 Project -> app -> build -> generated -> google-services -> debug -> values -> values.xml。 因此,这在编译时不会导致错误,您无需修复它。让谷歌稍后修复它:D
【讨论】:
【参考方案2】:我已将 Google 服务版本更新到项目级别 build.gradle 中的最新版本并且工作正常
classpath 'com.google.gms:google-services:4.2.0
【讨论】:
【参考方案3】:我的代码也遇到了同样的问题
Cannot resolve symbol 'default_web_client_id'
我尝试使用 clientID 作为参数而不是 R.string.default_web_client_id)
.requestIdToken(*My Client Id*)
并在调试代码中得到以下内容
W/System.err: com.google.android.gms.common.api.ApiException: 12500:
我已将 google 服务更新到最新的项目级 build.gradle (google-serivces:4.2.0)
!对我有用的解决方案!
登录Developer Console
凭据 > 创建凭据 >API 密钥
从 Firebase 下载新的 google-services.json (项目概述 > 用户和权限 > 常规 向下滚动 将新的 google-services.json 加载到 Project>app 中 将客户端 ID 替换为从 google-services.json oauth_client>client_id 生成的新 ID 注意:将客户端 ID 与 client_type 3 一起使用.requestIdToken(*My New Client Id*)
6.运行您的应用程序:)
【讨论】:
还要注意,default_web_client_id 在 values.xml 中 Qaleem Hussain : 如何以编程方式访问 values,xml 中的默认 Web 客户端 ID? 包视图 > 应用程序 > 值 > values.xml 不,我的意思是编程方式,在 JAVA 代码中,例如:getResources.getString(R.string.STRING_ID);【参考方案4】:从 google 服务返回到以前的类路径版本:在我的情况下,我必须从类路径 'com.google.gms:google-services:4.3.10' 更改为类路径 'com.google.gms:google- services:4.3.8' 在 build.gradle 面板中。 有时 google 服务更新无法正常工作,这让开发人员很头疼。
【讨论】:
【参考方案5】:这对我有用:
转到Google API Console并选择您想要的项目
查看 OAuth 2.0 客户端 ID。如果您还没有创建一个 Web 客户端 api,请键入 Web Client,您必须创建一个。
转到 Firebase 控制台、项目设置并下载 google-service.json 文件
替换项目中的 google-service 文件。
尝试编译。也许值得清理项目甚至缓存。如果仍然失败,那么:
您没有在项目成绩文件中正确应用google services plugingoogle-service-plugin 未生成资源,因为它找不到默认 ID。这种情况发生在我身上,不知道为什么。
web_default_client 是从 oauth_client 元素内的类型 3 密钥生成的。 com.google.gms:google-services:4.3.2
的 json 文件应该是这样的:
"oauth_client": [ "client_id": "...", "client_type": 1, "android_info": "package_name": "...", "certificate_hash": "..." , "client_id": "<put here the Web type Oauth cliend id>, "client_type": 3 ]
如果数组中没有client_type 3节点,添加它。
一个更简单的方法是直接传递token id,像这样:
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(<put here the Oauth client ID for Web Application type>) but is not good if you have different firebase projects at different flavors.
注意事项:
Firebase 自动创建名为“Web 客户端(由 Google 服务自动创建)”的 Web 类型 OAuth ID。无法从 firebase 重新创建。 当您向 Firebase 项目添加新指纹时,会自动创建 Android 类型 OAuth id。【讨论】:
【参考方案6】:在做任何事情之前,我从 Firebase> 项目设置下载了最新的 google-services.json 文件,并将其替换为项目文件夹中的文件。重建项目,它就消失了。
【讨论】:
【参考方案7】:我只打开了 res(生成)> values > values.xml 仅此而已,错误结束。
xxxxxxxx.apps.googleusercontent.com
【讨论】:
【参考方案8】:这些解决方案都不适合我
我试图将插件放在我的 build.gradle 和其他解决方案的底部。
对我有用的是以编程方式访问default_web_client_id
字符串。
在 kotlin 中我创建了一个扩展来获取资源字符串
fun Context.getStringFromName(name: String): String
return getString(
resources.getIdentifier(
name,
"string",
packageName
))
然后
val defaultWebClientId = context.getStringFromName("default_web_client_id")
对我来说就像魅力一样!
【讨论】:
以上是关于无法解析符号 default_web_client_id GoogleSignInOptions Android Firebase的主要内容,如果未能解决你的问题,请参考以下文章