簡體   English   中英

檢查您的 google-services 插件配置,未填充 default_web_client_id 字符串

[英]Check your google-services plugin configuration, the default_web_client_id string wasn't populated

我剛開始使用 Firebase,並設計了一個簡單的程序來測試 FirebaseUI 登錄。 我收到一個異常,即未填充默認 Web 客戶端 ID 字符串。

Github https://github.com/firebase/FirebaseUI-Android/issues/1381上有一個關於此的問題,但對我來說似乎已經放棄了。 我已將 gradle 依賴項更新到最新版本,但仍然沒有運氣。

這是代碼:

(MainActivity.java)

package uk.ac.le.cityTourPlanner;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import com.firebase.ui.auth.AuthUI;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private FirebaseAuth mFirebaseAuth;
    private FirebaseAuth.AuthStateListener mAuthStateListener;
    private static int RC_SIGN_IN = 1 ;

    List<AuthUI.IdpConfig> providers = Arrays.asList(
            new AuthUI.IdpConfig.EmailBuilder().build(),
            new AuthUI.IdpConfig.GoogleBuilder().build()
    );
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mFirebaseAuth=FirebaseAuth.getInstance();
        mAuthStateListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if(user!=null){
                    Toast.makeText(MainActivity.this, "user signed in!", Toast.LENGTH_LONG).show();
                }
                else{
                    startActivityForResult(AuthUI.getInstance().createSignInIntentBuilder().setAvailableProviders(providers).
                            setIsSmartLockEnabled(false).build(),RC_SIGN_IN);
                }
            }
        };
    }

    @Override
    protected void onResume() {
        super.onResume();
        mFirebaseAuth.addAuthStateListener(mAuthStateListener);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mFirebaseAuth.removeAuthStateListener(mAuthStateListener);
    }

    public void signOut(View view) {
        AuthUI.getInstance().signOut(this).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                Toast.makeText(MainActivity.this, "user signed out!", Toast.LENGTH_LONG).show();
                finish();
            }
        });
    }
}

(MainActivity.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:layout_centerInParent="true"
        android:textSize="25dp"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text"
        android:id="@+id/button"
        android:text="Sign Out"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:textSize="25dp"
        android:onClick="signOut"/>

</RelativeLayout>

(AndroidManifest.xml)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="uk.ac.le.cityTourPlanner">

    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

最后

(谷歌服務.json)

{
  "project_info": {
    "project_number": "921658610309",
    "firebase_url": "https://city-tour-planner.firebaseio.com",
    "project_id": "city-tour-planner",
    "storage_bucket": "city-tour-planner.appspot.com"
  },
  "client": [
    {
      "client_info": {
        "mobilesdk_app_id": "1:921658610309:android:0a33483e26b227f2",
        "android_client_info": {
          "package_name": "uk.ac.le.cityTourPlanner"
        }
      },
      "oauth_client": [
        {
          "client_id": "921658610309-10djmoc7i9k3doou7sq8sg4aog8v78jf.apps.googleusercontent.com",
          "client_type": 1,
          "android_info": {
            "package_name": "uk.ac.le.cityTourPlanner",
            "certificate_hash": "fff5b002b82089efa22081bac552cc6b8ccab44c"
          }
        }
      ],
      "api_key": [
        {
          "current_key": "AIzaSyD6OWj9Roi1bm40jiD54B3V-h5FsgqaJ-0"
        }
      ],
      "services": {
        "appinvite_service": {
          "other_platform_oauth_client": [
            {
              "client_id": "921658610309-4dhq16mrdgfd45jkrt0vo9hmlr1m4ju7.apps.googleusercontent.com",
              "client_type": 3
            }
          ]
        }
      }
    }
  ],
  "configuration_version": "1"
}

參考這個類似的問題(同樣的錯誤,我也回答了我的情況)。

基本上,只需將default_web_client_id添加到您的 string.xml 文件中,如下所示:

<string name="default_web_client_id" translatable="false">webClientId.apps.googleusercontent.com</string>

或者像這樣將它添加到google-services.json文件的 Oauth 部分(通常你不應該這樣做,但對於這種情況,我在回答中解釋了原因:

"oauth_client": [
    ...,
    {
         "client_id": "CLIENT_ID (ends with apps.googleusercontent.com)",
         "client_type": 3
    }
]

您可以像這樣GCP 控制台中找到default_web_client_id

轉到 API & Services > Credentials 並在 OAuth 2.0 客戶端 ID 下找到一個名為 Web Client 的 ID

還請確保 google-services.json 文件已放在 app 目錄中,而不是放在頂級目錄中。

我嘗試了 Jack 的答案,它奏效了,但更詳細地看,我發現我的build.gradle中沒有這個插件: 'com.google.gms.google-services'

當我添加這個時,我收到以下錯誤:

Execution failed for task ':app:mergeDebugResources'.
> [string/default_web_client_id] /home/Documents/FireBaseLogIn/android-kotlin-login-start/app/build/generated/res/google-services/debug/values/values.xml   [string/default_web_client_id] /home/Documents/FireBaseLogIn/android-kotlin-login-start/app/src/main/res/values/strings.xml: Error: Duplicate resources

這意味着在我們添加的插件中聲明了string/default_web_client_id ,這就是應用程序需要它的原因。

我不確定為什么在string.xml中添加此值有效,但如上所述是一種解決方法。

所以只需添加:

apply plugin: 'com.google.gms.google-services'

build.gradle(:app)文件的末尾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM