web-dev-qa-db-ja.com

Android Google SignInがデバッグモードで機能しない:GoogleSignInResultがfalse

私はこのチュートリアルに従ってGoogle SignOnを実行しています: https://developers.google.com/identity/sign-in/Android/start-integrating

仮想デバイスを使用してアプリケーションをローカルで実行すると正常に動作しますが、デバッグを介してアプリケーションをデバイスにデプロイしたり、署名付きのjarファイルを生成して手動でコピーしたりすると、GoogleSignInResultは常にfalseを返しますINTERNAL ERRORメッセージ。

デバイスにデバッグを介してアプリケーションをデプロイするときにgoogleログインを使用できるようになるまで、かなりの間苦労しています。どんな助けでも大歓迎です!

私の問題の解決策:

Jsonファイルをダウンロードする場所では、Javaキーツールで生成できるコードを過ぎてコピーする必要があります。数回続けて見逃しました。

21
Markus

おそらく開発コンソールの登録が不足しています。非常に一般的な開発者は、複数の署名証明書構成を持っています:デバッグキーストア、テスト環境署名証明書、本番署名証明書。署名証明書SHA1 +パッケージ名はAndroidクライアントを一意に識別し、開発コンソールで個別に登録する必要があります。

OAuthクライアントの登録について詳しくは、下記のブログ投稿をご覧ください。

http://Android-developers.blogspot.com/2016/03/registering-oauth-clients-for-google.html

または、この投稿を参照してください: 開発段階でAndroidでGoogleサインインをテストします

12
Isabella Chen

私は同じ問題を抱えていましたが、それは

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

アプリbuild.gradleの最下部にない。

Gradleコンソールを見てそれを理解しました。エラーは発生しませんでした。

5
George

理由は次のとおりです。-アプリをテストするために、署名されていないapkを使用している可能性があります。

Build-> Generate Signed APK->に移動し、GoogleデベロッパーコンソールでSHA1フィンガープリントを取得してclientIDを作成するために使用したキーで署名します

App-debug.apkを実行して完了です!!

3
Mayank Aggarwal

[〜#〜]編集済み[〜#〜]

答えは this から導出されます。これは、この問題にも適用できるためです。

ここに答えを同封します

問題は、署名証明書とSHA-1証明書のフィンガープリントが原因です。次のSHA-1証明書をgoogleApi認証情報に追加します。 2つのケースがあります

1.デバッグモードで実行している場合は、以下によって生成されたSHA-1フィンガープリントを追加します。

"C:\Program Files\Java\jre1.8.0_101\bin\keytool" -list -v -keystore "%USERPROFILE%\.Android\debug.keystore" -alias androiddebugkey -storepass Android -keypass Android

2. Signing Configを設定している場合は、以下の手順で生成されたSHA-1フィンガープリントを使用します

"C:\Program Files\Java\jre1.8.0_101\bin\keytool" -list -v -keystore "[youKeyPath]\youKey.jks"

両方のSHA-1フィンガープリントをgoogleApi認証情報に追加することをお勧めします

3
jafarbtech

上記の回答に加えて、設定がgoogle-services.jsonファイルと一致しないために問題が発生した1つのケースに遭遇しました。

以下に示すように、clientIdがGoogleSignInOptions Builderで具体的に割り当てられた可能性もあります。

    String serverClientId = "xxxxx-yyyy.apps.googleusercontent.com";
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestIdToken(serverClientId)
            .build();

この場合、以下に示すように、serverClientIdおよびrequestIdToken呼び出しへの参照を削除できます。

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();

これは、構成中にハードコードされた値ではなく、google-services.jsonに依存します。

私のプロジェクトの障害を診断しようとしていた問題を他の誰かが救うことを願っています。

1
Matthew Spencer

this に従って、Firebaseプロジェクト設定に3 SHA1キーが必要です

ほとんどの場合、問題は3番目のキーです。

  1. デバッグキー

    keytool -exportcert -alias androiddebugkey -keystore ~/.Android/debug.keystore | openssl sha1 -binary | openssl base64

  2. リリースキー

    keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64

  3. Google Playアプリ署名鍵

    https://play.google.com/apps/publish/

    アプリのRelease management> App signing> App signing certificate

    それはSHA1キーです

1つのGoogleサインインを理解するには、3つのキーが必要です。

1
Mihir Trivedi