2016-06-14 76 views
2

我想学习Firebase,因此我通过了Android Codelab。他们给了我不过该项目,有一个错误:无法解析Firebase的Android代码中的符号default_web_client_id

Cannot resolve symbol 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

您必须从developer.google.com注册到Auth 2.0。使用此:https://console.developers.google.com/apis/credentials?project=_生成身份验证2.0密钥 –

+0

@ M.WaqasPervez我已经添加了我的SHA1密钥,是不同的Auth2.0? –

+0

您可以确保您在'app/build.gradle'的底部有'apply plugin:'com.google.gms.google-services''这一行,如文档[here](https:// firebase .google.com /文档/安卓/设置#add_the_sdk)? –

回答

12

解析google-services.json时有时会出现问题。我已经向有关团队报告过这个问题。

同时遵循下面的步骤来解决这个问题,以取得进一步的打算 -

1)打开google-services.json文件 - >客户端 - > oauth_client - > CLIENT_ID

2)复制此客户端ID和硬编码这个.requestIdToken("your ID")

它可以通过GoogleSignInAccount发送成功的谷歌登录请求“IdToken”,并授权您的凭据与Firebase。

编辑

尝试删除并重新创建项目,并在你的Android项目

+0

这就是我在oauth_client中看到的:''oauth_client“:[]'没有ID,我在文件的任何位置都找不到'client_id'。 –

+1

@AbAppletic尝试添加SHA1密钥并从Firebase控制台重新下载配置文件 - 项目设置 – Dexto

+0

还没有。如果您刚刚开始项目,我已经添加了我的SHA1 –

9

一个更通用的解决方案是将google-services.json添加到应用程序的根目录下重新导入新google-service.json
并添加

apply plugin: 'com.google.gms.google-servicesbuild.gradle文件的末尾。

说明

当应用程序构建从google-services.json配置文件中的键值对字符串,然后放入values.xml文件,以使它们在全球可供使用从你的代码的任何地方。这节省了我们在代码中对client_id进行硬编码的难度。

注意

不要为了避免重复的错误,后来Error: Duplicate resources当你运行你的代码与client_id作为其在strings.xml值添加default_web_client_id

0

尝试在Firebase控制台中更改配置后再次下载.json文件。使用这个新的配置文件,而不是旧的。

1

我已经有google-services.json下载和解析,但它仍然没有找到字符串。

我注意到我的oauth_client有一个client_type为1的密钥,就这些了。在Google API控制台中,我只有一个Android密钥。

因此,您需要转到API控制台并生成一个Web Server密钥。然后,再次下载您的google-services.json,并且您将有一个oauth_client,类型为3.

现在,该插件将生成一个名为default_web_client_id的字符串。

0

以上答案都不能解决我的问题。

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文件需要在应用程序文件夹中;尽管有些选项可以同时具有此文件的调试版本和发行版本。

我得到的唯一的实际错误是一旦gradle文件是正确的。然后它抱怨说找不到json文件。

看到user1523292的回答后我写了这个。