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アプリケーション用です: そして、R.string.server_client_id
は、写真の最初のクライアントIDです。もちろん、パッケージ名はすべて正しい場所に配置されます。そうでない場合、トークン要求なしでは機能しません。 2人は、これが機能するためにアプリに署名する必要があることも提案しましたが、Googleのドキュメントには、デバッグキーも機能するはずであり、デバッグのためにアプリに署名させることは意味がありません。
私は何時間もこれを理解しようとしてきましたが、成功しませんでした。何が問題なのでしょうか?ここに入力するのを忘れた可能性のある詳細情報をお気軽にお問い合わせください。
まあ、これは非常に恥ずかしいですが、私はそれを理解しました:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(AuthenticatedActivity.this.getResources().getString(R.string.server_client_id))
.requestEmail().build();
参照解除された文字列リソースではなく、リソースIDを送信していました。
明らかに、最初にリリース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のリリースバージョンで動作しません
誤ってrequestIdToken()
パラメーターとしてWebアプリの代わりにAndroidアプリのクライアントIDを使用したときに、この問題が発生しました。
そこでWebappのクライアントIDを使用する必要があります。デフォルトでは、Web client (auto created by Google Service)
と呼ばれます
1.gradleファイルでsigningConfigsを指定
signingConfigs {
config {
keyAlias 'appalias'
keyPassword 'hunter123'
storePassword 'hunter123'
storeFile file('path/to/keystore.jks')
}
}
2。プロジェクト構造(Android Studio内)のビルドタイプに移動し、signingConfigsを "config"に指定します
ここでcleanプロジェクトを再構築します。動作するはずです。
上記が機能しない場合は、以下が最後の手段です。
ステップ1を試し、ビルドして確認します。動作しない場合は、次の手順に進み、再度ビルドしてみてください。
編集:Googleはコンソールにapk署名を追加しました。既にapkに署名している場合は、ORを無視します。それを使用する場合は、現在のGoogleサインイン設定が破損する可能性があるため、注意してください
私のプロジェクトでは、マニフェスト.xmlのpackagenameとは異なるgradleファイルのapplicationIdがあり、それが私の問題の原因でした。
私が作成しなければならなかったAndroidキーは、アプリケーションIDが機能するために、パッケージ名ではなくapplicationId fqdnを持っている必要がありました(グーグルが示すものとは逆)。
誰かの時間を節約できるように、ここに置いておきたいと思います。
既にsigningConfigs
とbuildTypes
をGradleに設定していますか? gradleでこれらのことを明示的に指定することで修正しました。ここを読む http://developer.Android.com/tools/publishing/app-signing.html
(リリース)署名キーのSHA-1指紋を Firebaseコンソール に追加したことを確認してください
SHA1キーを見つける :keytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore>
Firebaseコンソールに追加します: https://console.firebase.google.com に移動し、アプリを選択して、設定を選択します。
同様の問題が発生しました。私の場合、使用していたサーバークライアントIDがクライアントキーとは異なるプロジェクトのものであったためです。彼らは同じプロジェクトからのものである必要があることがわかりました。
こんにちは私は上記のコメントを見ましたが、実用的であるため、そのすべての問題は、特定の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を生成する必要があります。ありがとう
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"/>
この質問が2019年にどの程度関連しているかはわかりません。ただし、エラーコード12501は次のことを意味します。
サインインはユーザーによってキャンセルされました。つまり、ユーザーはログインの解決の一部をキャンセルしました。アカウントの選択またはOAuth同意。
詳細については、次のリンクを確認してください。