web-dev-qa-db-ja.com

Googleサインインで認証するエラー12501

googleサインインサービス を使用して、アプリを使用するユーザーを認証しています。メール情報をリクエストしたときに機能するようになりました

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

次に、バックエンドで認証できるようにするにはIDトークンも要求する必要があると考えたので、次のようにしました。

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(String.valueOf(R.string.server_client_id))
                    .requestEmail().build();

問題は、変更後にログインできないことです。ログインしようとするたびに取得し続けるステータスはStatus{statusCode=unknown status code: 12501, resolution=null}です。

私はあちこち検索してきました この投稿 それはほぼ同じことです。ただし、答えた人が名前を付けた間違いを犯さなかったので、開発コンソールのoAuthクライアントIDはWebアプリケーション用です: clientIDs そして、R.string.server_client_idは、写真の最初のクライアントIDです。もちろん、パッケージ名はすべて正しい場所に配置されます。そうでない場合、トークン要求なしでは機能しません。 2人は、これが機能するためにアプリに署名する必要があることも提案しましたが、Googleのドキュメントには、デバッグキーも機能するはずであり、デバッグのためにアプリに署名させることは意味がありません。

私は何時間もこれを理解しようとしてきましたが、成功しませんでした。何が問題なのでしょうか?ここに入力するのを忘れた可能性のある詳細情報をお気軽にお問い合わせください。

47
JamMaster

まあ、これは非常に恥ずかしいですが、私はそれを理解しました:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(AuthenticatedActivity.this.getResources().getString(R.string.server_client_id))
                    .requestEmail().build();

参照解除された文字列リソースではなく、リソースIDを送信していました。

22
JamMaster

明らかに、最初にリリースsha1キーが正しいかどうかを確認してください。それでも動作しない場合、Google Play Services 8.4.0(i.e.compile 'com.google.Android.gms:play-services:8.4.0')を使用すると、GoogleSignInOptionオブジェクトを変更することで問題を解決できます。の代わりに:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail()  
       .requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com")
                    .build();

あなたが使用する必要があります:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestScopes(new Scope(Scopes.PLUS_LOGIN))
                .requestScopes(new Scope(Scopes.PLUS_ME))
                .requestEmail()
                .build();

これは、statusCode = INTERNAL_ERROR OR statusCode = Error 12501 OR statusCode = Error 12500を返すエラーを解決します。次に、このgsoオブジェクトを使用して、以下に示すようにGoogleApiClientを作成できます。

 mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
               // .addApi(Plus.API, null)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
               // .addScope(Plus.SCOPE_PLUS_LOGIN)
                .build(); 

詳細はこちらをご覧ください: GoogleのサインインはAndroidのリリースバージョンで動作しません

10
silwalprabin

誤ってrequestIdToken()パラメーターとしてWebアプリの代わりにAndroidアプリのクライアントIDを使用したときに、この問題が発生しました。

そこでWebappのクライアントIDを使用する必要があります。デフォルトでは、Web client (auto created by Google Service)と呼ばれます

3
Daniel Zolnai

1.gradleファイルでsigningConfigsを指定

signingConfigs {
        config {
            keyAlias 'appalias'
            keyPassword 'hunter123'
            storePassword 'hunter123'
            storeFile file('path/to/keystore.jks')
        }
}

2。プロジェクト構造(Android St​​udio内)のビルドタイプに移動し、signingConfigsを "config"に指定します

ここでcleanプロジェクトを再構築します。動作するはずです。

上記が機能しない場合は、以下が最後の手段です。
ステップ1を試し、ビルドして確認します。動作しない場合は、次の手順に進み、再度ビルドしてみてください。

  1. 署名済みのapkを作成します(パスワードを記憶してチェックしてください)。
  2. 署名する前に、キーストアファイルのファイル名と、apkの署名中に使用したファイル名を確認します(Android studio)。
  3. 署名されたapkをデバイスにインストールします。
  4. 5分間待ちます。
  5. Googleで歌ってみてください。それでも12501が来ている場合は、さらに5分間待ちます。その間、Gradle Syncがヒットしました。
  6. 再試行する。動作するはずです。

編集:Googleはコンソールにapk署名を追加しました。既にapkに署名している場合は、ORを無視します。それを使用する場合は、現在のGoogleサインイン設定が破損する可能性があるため、注意してください

3
Mido Reigh

私のプロジェクトでは、マニフェスト.xmlのpackagenameとは異なるgradleファイルのapplicationIdがあり、それが私の問題の原因でした。

私が作成しなければならなかったAndroidキーは、アプリケーションIDが機能するために、パッケージ名ではなくapplicationId fqdnを持っている必要がありました(グーグルが示すものとは逆)。

誰かの時間を節約できるように、ここに置いておきたいと思います。

3
Simon Avril

既にsigningConfigsbuildTypesをGradleに設定していますか? gradleでこれらのことを明示的に指定することで修正しました。ここを読む http://developer.Android.com/tools/publishing/app-signing.html

同じ問題がありました。問題は、どういうわけか間違った「APIプロジェクト」が選択されたため、間違ったWebクライアントキーを選択したことです。デモアプリを実行しようとしたときに、両方のAPIプロジェクトで2つのOAuth2サーバークライアントIDが作成されたことは明らかです。

configuration view

1
Bevor

(リリース)署名キーのSHA-1指紋Firebaseコンソール に追加したことを確認してください

SHA1キーを見つけるkeytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore>

Firebaseコンソールに追加します: https://console.firebase.google.com に移動し、アプリを選択して、設定を選択します。

enter image description here

1
Simon Epskamp

同様の問題が発生しました。私の場合、使用していたサーバークライアントIDがクライアントキーとは異なるプロジェクトのものであったためです。彼らは同じプロジェクトからのものである必要があることがわかりました。

0
Tad

こんにちは私は上記のコメントを見ましたが、実用的であるため、そのすべての問題は、特定のIPアドレスのshaを登録してgoogle.services jsonを取得することを意味します

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

またはgso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(LoginActivity.this.getResources()。getString(R.string.server_client_id)).requestEmail()。build();しかし、他のマシンで他のIPアドレスにアプリを作成したい場合、shaは12501エラーステータスコードを表示しているため、その特定のマシンに対して再びshaを生成する必要があります。ありがとう

0
Vishal

Androidmanifest.xmlの<meta-data>は、<application></application>エンクロージャーの外部にあります。 12501エラーが発生する理由

    <meta-data Android:name="com.google.Android.gms.games.APP_ID"
        Android:value="@string/app_id" />
    <meta-data Android:name="com.google.Android.gms.version"
        Android:value="@integer/google_play_services_version"/>
0
Duna

この質問が2019年にどの程度関連しているかはわかりません。ただし、エラーコード12501は次のことを意味します。

サインインはユーザーによってキャンセルされました。つまり、ユーザーはログインの解決の一部をキャンセルしました。アカウントの選択またはOAuth同意。

詳細については、次のリンクを確認してください。

https://developers.google.com/Android/reference/com/google/Android/gms/auth/api/signin/GoogleSignInStatusCodes.html#SIGN_IN_CANCELLED

0
Umang Kothari