web-dev-qa-db-ja.com

Firebaseのシンボルdefault_web_client_idを解決できませんAndroid Codelab

私は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を有効にしました。

13
Ab_

_google-services.json_の解析中に問題が発生する場合があります。この問題を関係するチームに報告しました。

その間、以下の手順に従ってこの問題を修正し、さらに先に進みます-

1)_google-services.json_ファイルを開く->クライアント-> oauth_client-> client_id

2)このクライアントIDをコピーし、この.requestIdToken("your ID")をハードコードします

GoogleSignInAccount経由で「IdToken」をリクエストし、Googleログインに成功すると、firebaseを使用して認証情報を認証できます。

[〜#〜] edit [〜#〜]

プロジェクトを削除して再作成し、新しい_google-service.json_ inをAndroidプロジェクト

30
Dexto

より一般的な解決策は、google-services.jsonをアプリのルートディレクトリに追加することです。
そして追加

apply plugin: 'com.google.gms.google-servicesファイルの最後のbuild.gradle

説明

アプリがgoogle-services.json構成ファイルからキーと値のペアの文字列を作成すると、values.xmlファイルに配置され、コードのどこからでもグローバルに使用できるようになります。これにより、コード内でclient_idをハードコーディングする必要がなくなります。

default_web_client_idの値としてclient_idstrings.xmlに追加しないでください。コードを実行するときに、複製のエラーError: Duplicate resourceslaterを回避するためです。

19
user1523292

この回答の更新。以前と同じエラーがありますが、ビルドが停止しません。さらに、署名されたバンドルを作成すると、それ自体が解決するようです。文字列の間違ったパスを探しているだけです。

上記の回答のどれも私の問題を解決しませんでした。

これを見つけました およびビルド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ファイルが見つからないと不平を言いました。

これを書いた後、user1523292の答えを見ました。

私はこれに再び遭遇しました。ファイルの場合、適用プラグインは本当に最後/下にある必要があるようです

どうやらR.string.default_web_client_idは、IDE buildから生成されます

手動で追加することになっていると思っていた-時間のかかる間違い

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

Google-servicesプラグインには2つの主要な機能があります。1)google-services.jsonファイルを処理し、アプリケーションのコードで使用できるAndroidリソースを生成します。

~~~~

JSON処理の主な結果は、Androidコード内のリソースJavaコードとして参照できる2つのXMLファイルを生成することです。

そして-ビルドが成功した後、IDEで文字列default_web_client_id、/ generatedフォルダーの下にvalues.xmlという結果が表示されます。この例のように、firebase configの値があります。未満。

実際にそのファイルを見ると、ここで物事を明確にするのに役立ちました

<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>
4
Gene Bo

すでにgoogle-services.jsonをダウンロードして解析していますが、それでも文字列が見つかりません。

私のoauth_clientにはclient_typeが1のキーがあり、それだけであることに気付きました。 Google APIコンソールには、Androidキーのみがありました。

したがって、APIコンソールに移動してWeb Serverキーを生成する必要があります。次に、google-services.jsonを再度ダウンロードすると、タイプが3のoauth_clientがあります。

これで、プラグインはdefault_web_client_idという文字列を生成します。

2
Greg Ennis

Dextoの回答に加えて、もう1つ言及したいと思いますJSONファイルでは、2種類のクライアントIDを取得します

client_type value 1を持つものとclient_type value 3を持つものclient_typeclient_idを指定したことを確認してください値は3です

2
classpath 'com.google.gms:google-services:4.1.0'

問題があります。代わりに使用します:

classpath 'com.google.gms:google-services:4.2.0'
1
Avnish kumar

同じ問題または類似した問題がありましたが、

Google-services.jsonに以下があることを確認してください。

...    
"client": [
        ...
          "oauth_client": [
            ...
            {
              "client_id": "YOUR WEB CLIENT ID",
              "client_type": 3
            }     
...

何らかの理由で、firebaseコンソールからダウンロードしたファイルには含まれていません。

Google-services.jsonファイルにエントリを追加した後、すべてが期待どおりに機能し始めました。

google-services-plugin documentation

1
Luis

このリンクを使用してGoogle APIへのバックエンドIDを作成した後に修正されました。

https://developers.google.com/identity/sign-in/Android/start-integrating#get_your_backend_servers_oauth_20_client_id

  • 1- APIコンソールで認証情報ページを開きます。

  • 2- WebアプリケーションタイプのクライアントIDは、バックエンドサーバーのOAuth 2.0クライアントIDです。

この後、jsonファイルを再ダウンロードすると、Android studioは自動的に文字列IDに一致します。

1
Johnny Johnson

最新のgoogle-services.jsonをダウンロードしてください。 client_idのリストは、 Google Cloud CredentialsOAuth 2.0クライアントIDに存在します。

次に、client_id"client_type" : 3が含まれているかどうかを確認します。そうでない場合は、新しいものを作成する必要があります。

  1. APIコンソールで Credentials ページを開きます。
  2. クレデンシャルの作成->OAuthクライアントIDをクリックします。次に、タイプWebアプリケーションを選択します。
  3. 2〜3分待ってから、更新します Firebase Consolegoogle-services.jsonを再度ダウンロードします。 client_id"client_type" : 3が含まれるようになりました。

プロジェクトをクリーン&リビルドして、新しいAPI構成を適用します。


client_idを含む"client_type" : 3は、通常servicesoauth_clientではなく、other_platform_oauth_clientタグ内にあります。

この場合、プロジェクトをビルドできない場合は、client_idoauth_clientタグにコピーして、再構築してみてください。

"client": [
        ...
        "oauth_client": [
            ...
            {
              "client_id": "YOUR WEB CLIENT ID",
              "client_type": 3
            }
        ]
]     
0
nhoxbypass

Firebaseコンソールで設定を変更した後、.jsonファイルをもう一度ダウンロードしてください。古い構成ファイルではなく、この新しい構成ファイルを使用してください。

0
user7504516

私は答えるのが遅いことを知っていますが、これが将来誰かを助けることを願っています。

アクセスするには、アプリでdefault_web_client_idをハードコーディングする必要はありません。

default_web_client_id in Android google-services.jsonのアプリからアクセスするには、FireBaseプロジェクトの設定の下にSHA1キーを追加する必要があります。

[Firebase Console]> [プロジェクトを開く]> [アプリの選択]> [指紋の追加]に移動します。

このコピーがプロジェクトに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"
      }
    },.....

これで問題が解決します。

0
Rahul
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)      
 .requestIdToken("1036904004233h4cmmfcistvfjh3phqe1peht56g.apps.googleusercontent.com")
            .requestEmail()
            .build();   

私の経験では、requestIdtokenのようなクライアントIDを含める必要があり、string.xmlにdefault_web_client_idのインスタントを含める必要はありませんが、奇妙に見えますが、私の場合はそれが唯一の方法です。

すぐにclient_idを挿入せずに「スマート」修正を検索した後、 FirebaseUIプロジェクト からの次の回答に従って、次の行をapp/build.gradleに追加するだけです。

implementation 'com.firebaseui:firebase-ui-auth:4.3.2'
0
Jairo Martínez

プロジェクトレベルの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

0
Ganesh Garad