无法在Firebase的Android Codelab中解析符号default_web_client_id

Ab_*_*Ab_ 13 android firebase cannot-find-symbol

我正在尝试学习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();
}
Run Code Online (Sandbox Code Playgroud)

我不知道它是什么,它的价值是什么,为什么它给我这个错误.到目前为止我没有改变任何东西,除了添加google-services.json.我添加了SHA-1并在控制台中启用了Google.

Dex*_*xto 31

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

同时按照以下步骤解决此问题以进一步发展 -

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

2)复制此客户端ID并对其进行硬编码 .requestIdToken("your ID")

它允许在谷歌登录成功后通过GoogleSignInAccount请求"IdToken"并使用firebase授权您的凭证.

编辑

尝试删除并重新创建项目,然后google-service.json在Android项目中重新导入新项目

  • 如果您有 1 个以上的客户 ID,该怎么办?我刚刚看了我的项目。客户端类型 1 和客户端类型 3 各有一个。这些是什么意思? (2认同)

小智 19

更通用的解决方案是将其添加google-services.json到应用程序的根目录中.
并添加

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

说明

当应用程序构建键值时,google-services.json配置文件中的字符串然后放入values.xml文件中,以使它们可以在代码中的任何位置全局使用.这使我们免于在代码中对client_id进行硬编码.

注意

不要在default_web_client_id其中添加with client_id作为其值,strings.xml以避免重复错误,Error: Duplicate resources稍后在运行代码时.


Jai*_*nez 12

经过一段时间搜索“智能”修复而不直接插入后,按照FirebaseUI 项目client_id的这个答案,我只需要在中添加下一行:app/build.gradle

implementation 'com.firebaseui:firebase-ui-auth:4.3.2'
Run Code Online (Sandbox Code Playgroud)


小智 12

  1. google-services.json在./app/文件夹中
  2. 在项目级别添加build.gradle以下内容:
    buildscript {
    ...
    dependencies {
        ...
        classpath 'com.google.gms:google-services:4.3.5'
    }
Run Code Online (Sandbox Code Playgroud)
  1. 在应用程序级别build.gradle,应用插件:
    apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)

这是我发现的烦人的事情。将其升级4.3.5到任何更高版本都会导致 Android Studio 无法检测生成的 value.xml 文件。


Gen*_* Bo 5

显然R.string.default_web_client_id是从IDE构建生成的

我以为我们应该手动添加它 - 耗时的错误

https://developers.google.com/android/guides/google-services-plugin

google-services 插件有两个主要功能:1) 处理 google-services.json 文件并生成可在您的应用程序代码中使用的 Android 资源。

~~~~

JSON 处理的主要结果是生成两个 XML 文件,您可以在 Java 代码中将它们作为 Android 资源引用。

因此 - 成功构建后,如果您在 IDE 中搜索 string 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>
Run Code Online (Sandbox Code Playgroud)