我正在尝试学习Firebase,所以我浏览了Android Codelab。然而,他们给我的项目有一个错误:
无法解析符号default_web_client_id
我并不知道如何解决它,因为我不知道default_web_client_id
的价值或它是什么。它采用onCreate()
方法:
的 SigninActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_in);
mFirebaseAuth = FirebaseAuth.getInstance();
// Assign fields
mSignInButton = (SignInButton) findViewById(R.id.sign_in_button);
// Set click listeners
mSignInButton.setOnClickListener(this);
// Configure Google Sign In
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(getString(R.string.default_web_client_id))
.requestEmail()
.build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
}
我不知道它是什么,它的价值是什么,为什么它会给我这个错误。到目前为止,除了添加google-services.json
之外,我还没有改变任何内容。我添加了SHA-1并在控制台中启用了Google。
答案 0 :(得分:28)
解析google-services.json
时有时会出现问题。我已经向有关团队报告了这个问题。
同时按照以下步骤解决此问题以进一步发展 -
1)打开google-services.json
文件 - >客户 - > oauth_client - > CLIENT_ID
2)复制此客户端ID并对此.requestIdToken("your ID")
这将允许请求" IdToken"通过GoogleSignInAccount发布成功的Google登录信息并使用firebase授权您的凭据。
修改强>
尝试删除并重新创建项目,然后在Android项目中重新导入新的google-service.json
答案 1 :(得分:16)
更通用的解决方案是将google-services.json
添加到应用程序的根目录中
并添加
apply plugin: 'com.google.gms.google-services
文件末尾的 build.gradle
。
<强>解释强>
当应用程序构建密钥值对时,google-services.json
配置文件中的字符串将被放入values.xml
文件中,以使它们可以在代码中的任何位置全局使用。这使我们免于在代码中对client_id进行硬编码。
注意强>
请不要在default_web_client_id
中添加client_id
strings.xml
作为其值,以避免在运行代码时出现重复错误Error: Duplicate resources
。
答案 2 :(得分:3)
对此答案的更新。 我有与以前相同的错误,但它不会停止我的构建。更重要的是,当我构建一个已签名的捆绑包时,似乎解决了这个问题,我检查过它只是在寻找字符串的错误路径..
上述答案都没有解决我的问题。
I found this 以及构建gradle文件中的以下步骤:
在应用级文件中(最后)
} apply plugin: 'com.google.gms.google-services'
并在项目级文件中:
dependencies {
classpath 'com.android.tools.build:gradle:3.0.1'
classpath 'com.google.gms:google-services:3.1.0'
除了我的json文件需要在app文件夹中;虽然有选项可以同时拥有此文件的调试版和发行版。
我得到的唯一实际错误是gradle文件正确。然后它抱怨它找不到json文件。
在我写完之后看到了用户1523292的答案。
我又碰到了这个。似乎应用插件确实需要在文件的末尾/底部。
答案 3 :(得分:2)
除了Dexto的答案外,我还要提一件事 在JSON文件中,您将获得两种客户端ID
其中一个具有 client_type 值1,另一个具有 client_type 值3 确保您指定了 client_type 的 client_id ,其值为3
答案 4 :(得分:2)
显然R.string.default_web_client_id
是从IDE版本生成的
我假设我们应该手动添加它-费时的错误
https://developers.google.com/android/guides/google-services-plugin
google-services插件具有两个主要功能:1)处理 google-services.json文件并生成可以 在应用程序的代码中使用。
~~~~
JSON处理的主要结果是生成两个XML文件 您可以在Java代码中将其作为Android资源引用。
所以-成功构建后,如果在IDE中搜索字符串default_web_client_id
,则会看到一个结果是/ generated文件夹下的 values.xml ,并且在其中包含您的firebase配置的值,如下面的示例。
实际上看到了该文件,有助于在此处说明问题
<resources>
<string name="default_web_client_id" translatable="false">123.apps.googleusercontent.com</string>
<string name="firebase_database_url" translatable="false">https://123.firebaseio.com</string>
<string name="gcm_defaultSenderId" translatable="false">123</string>
<string name="google_api_key" translatable="false">123</string>
<string name="google_app_id" translatable="false">123</string>
</resources>
答案 5 :(得分:1)
classpath 'com.google.gms:google-services:4.1.0'
有问题。而是使用:
classpath 'com.google.gms:google-services:4.2.0'
答案 6 :(得分:1)
我有相同或相似的问题,
确保在google-services.json中具有:
...
"client": [
...
"oauth_client": [
...
{
"client_id": "YOUR WEB CLIENT ID",
"client_type": 3
}
...
由于某些原因,从firebase控制台下载的文件不包含该文件。
在google-services.json文件中添加条目后,一切都按预期开始工作。
答案 7 :(得分:1)
使用此链接创建我的Google API后端ID后修复。
1-在API控制台中打开“凭据”页面。
2- Web应用程序类型客户端ID是您的后端服务器的OAuth 2.0客户端ID。
在此之后,您可以重新下载您的json文件,android studio将自动匹配您的字符串ID。
答案 8 :(得分:1)
我已经下载并解析了google-services.json
,但仍然找不到字符串。
我注意到我的oauth_client
有一个client_type为1
的密钥,而这就是全部。在Google API控制台中,我只有一个Android密钥。
因此,您需要转到API控制台并生成Web Server
密钥。然后,再次下载您的google-services.json,您将拥有类型为3的oauth_client
。
现在,该插件将生成一个名为default_web_client_id的字符串。
答案 9 :(得分:0)
经过一段时间搜索而没有直接插入null
的“智能”修复程序之后,按照FirebaseUI project的回答,我只需要在client_id
中添加下一行:
app/build.gradle
答案 10 :(得分:0)
尝试在Firebase控制台中更改配置后再次下载.json
文件。使用这个较新的配置文件,而不是旧配置文件。
答案 11 :(得分:0)
下载最新的google-services.json
。在您的Google Cloud Credentials中为 OAuth 2.0客户端ID 提供了client_id
列表。
然后检查它是否包含带有client_id
的{{1}}。如果没有,则需要创建一个新的
"client_type" : 3
。现在应该包含google-services.json
和client_id
。清理并重建项目以应用新的API配置。
带有"client_type" : 3
的{{1}}通常位于client_id
标记内,而不是"client_type" : 3
或oauth_client
中。
如果遇到这种情况并且无法构建项目,请尝试将services
复制到other_platform_oauth_client
标签,然后重新构建。
client_id
答案 12 :(得分:0)
使用以下代码更新您的项目级别的build.gradle文件:
buildscript {
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
classpath 'com.google.gms:google-services:4.2.0'
}}
allprojects {
repositories {
google()
jcenter()
maven { url "https://maven.google.com"}
}}
task clean(type: Delete) {
delete rootProject.buildDir }
更多详细信息:answerdone.com
答案 13 :(得分:0)
我知道答案来晚了,但希望这会在将来对某人有所帮助。
要访问,无需在应用程序中硬编码default_web_client_id。
要从google-services.json访问Android App中的 default_web_client_id ,我们必须在FireBase项目设置下添加SHA1密钥。
转到Firebase控制台>打开项目>选择应用>添加指纹。
此副本生成了google-services.json进行投影。
此后,您将在json文件中看到如下差异:
之前:
"oauth_client": []
之后:
"oauth_client": [
{
"client_id": "23........4-asdj...........................asda.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.abc.xyz",
"certificate_hash": "asjhdashhs"
}
},.....
这将解决您的问题。
答案 14 :(得分:0)
对我来说,问题是因为我使用的是minSdkVersion 15,更新为16可以解决我的问题。
答案 15 :(得分:0)
只需尝试在模拟器或手机上运行该应用程序(Shift + F10) 然后错误将消失。
答案 16 :(得分:0)
通用的解决方案是像这样在build.gradle的末尾应用Google Play服务插件
apply plugin: 'com.android.application'
android {
compileSdkVersion 30
buildToolsVersion "30.0.0"
buildFeatures {
dataBinding true
}
defaultConfig {
applicationId "xxxxxx"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.13'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
// For Common Dimension
implementation 'com.intuit.sdp:sdp-android:1.0.5'
implementation 'com.intuit.ssp:ssp-android:1.0.5'
// Retrofit and Gson
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.squareup.retrofit2:retrofit:2.6.1'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.6.1'
// Rx Java and Dagger
implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
implementation 'io.reactivex:rxandroid:1.2.1'
implementation 'io.reactivex:rxjava:1.1.6'
implementation 'com.google.dagger:dagger:2.24'
annotationProcessor 'com.google.dagger:dagger-compiler:2.24'
compileOnly 'javax.annotation:jsr250-api:1.0'
compileOnly 'org.glassfish:javax.annotation:10.0-b28'
// Glide Image Loading
implementation 'com.github.bumptech.glide:glide:4.9.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
implementation 'com.android.support:design:30.0.0'
implementation 'com.android.support:recyclerview-v7:30.0.0'
implementation 'com.android.support:cardview-v7:30.0.0'
implementation 'com.android.support:multidex:1.0.3'
/*Jsoup*/
implementation 'org.jsoup:jsoup:1.9.1'
/*Firebase*/
implementation 'com.google.firebase:firebase-core:17.5.0'
implementation 'com.google.firebase:firebase-config:19.2.0'
implementation 'com.google.firebase:firebase-messaging:20.2.4'
implementation 'com.google.firebase:firebase-database:19.3.1'
implementation 'com.google.firebase:firebase-auth:19.3.2'
implementation 'com.firebaseui:firebase-ui-storage:6.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.firebase:firebase-analytics:17.5.0'
/*location and google map*/
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-places:17.0.0'
implementation 'com.google.android.gms:play-services-auth:18.1.0'
/*Circle Image View*/
implementation 'de.hdodenhof:circleimageview:3.0.1'
implementation 'com.github.ittianyu:BottomNavigationViewEx:2.0.4'
implementation "com.android.support:design:30.0.0"
implementation 'com.facebook.android:facebook-android-sdk:5.15.3'
}
apply plugin: 'com.google.gms.google-services'
答案 17 :(得分:0)
就我而言,我忘记添加
chectl server:deploy --platform=docker-desktop
到build.gradle(:app)插件
答案 18 :(得分:-1)
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("1036904004233h4cmmfcistvfjh3phqe1peht56g.apps.googleusercontent.com")
.requestEmail()
.build();
根据我的经验,您必须像在requestIdtoken中那样包含Client ID,并且您必须在string.xml中没有default_web_client_id的瞬间,这看起来很奇怪,但是在我看来,这是唯一对我有用的方法。
答案 19 :(得分:-1)
从与您的android项目连接的firebase项目中再次下载google-services.json文件,并将其替换到app / src目录中。然后选择“生成”子菜单中的清理项目选项。这对我有用。
答案 20 :(得分:-1)
我也遇到了同样的问题,请确保“google-services.json”在您的应用目录中。然后只需从“Build -> Rebuild Project”
重建项目由于字符串资源“default_web_client_id”是自动生成的,一旦你重建项目就会解决