51

アプリを使用するユーザーを認証するために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}

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

私はこれを何時間も理解しようとしてきましたが、成功していません。何が問題なのですか?ここに書き忘れたかもしれない詳細情報をお気軽にリクエストしてください。

4

12 に答える 12

23

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

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

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

于 2015-11-22T11:34:28.137 に答える
12

明らかに、最初にリリース sha1 キーが正しいかどうかを確認してください。それでも問題が解決せず、Google Play サービス 8.4.0 (つまり、'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(); 

詳細については、これを参照してください: Android のリリース バージョンで Google サインインが機能しない

于 2016-04-12T14:20:53.343 に答える
5

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

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

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

ここに画像の説明を入力

于 2017-05-24T13:25:15.490 に答える
3

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

私が作成しなければならなかったAndroidキーは、それが機能するために(Googleがあなたに言ったことに反して)パッケージ名ではなく、applicationId fqdnを持つ必要がありました。

誰かの時間を節約できるように、ここに残しておきます。

于 2015-12-17T21:19:15.607 に答える
1

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

于 2015-12-27T02:38:31.423 に答える
1

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

構成ビュー

于 2017-05-25T11:11:29.913 に答える
0

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

于 2016-02-12T13:41:40.963 に答える