web-dev-qa-db-ja.com

Googleサインインエラー12500

Googleサインインを自分のアプリに統合しようとしています。バックエンドサーバーを持っていません。ログオンしたGoogleアカウントの詳細をアプリに送信しているだけです。

最初に Googleサインインの例 を使用して試しましたが、エラーが発生しました(以下のスタックトレースを印刷する以外はコードを変更しません)。私はバックエンドサーバーを持っていないので、私はちょうどSignInActivityの例を使いました。

 Exception com.google.Android.gms.common.api.ApiException: 12500: 
 at com.google.Android.gms.common.internal.zzb.zzz(Unknown Source)
 at com.google.Android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
 at com.ewise.Android.api.MainActivity.onActivityResult(SignInActivity.Java:89)     at Android.app.Activity.dispatchActivityResult(Activity.Java:7010)
 at Android.app.ActivityThread.deliverResults(ActivityThread.Java:4187)
 at Android.app.ActivityThread.handleSendResult(ActivityThread.Java:4234)
 at Android.app.ActivityThread.-wrap20(ActivityThread.Java)
 at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1584)
 at Android.os.Handler.dispatchMessage(Handler.Java:102)
 at Android.os.Looper.loop(Looper.Java:154)
 at Android.app.ActivityThread.main(ActivityThread.Java:6316)
 at Java.lang.reflect.Method.invoke(Native Method)
 at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:872)
 at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:762)

コード

 public class SignInActivity extends AppCompatActivity implements
         View.OnClickListener {

     private static final String TAG = "SignInActivity";
     private static final int RC_SIGN_IN = 9001;

     private GoogleSignInClient mGoogleSignInClient;
     private TextView mStatusTextView;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         // Views
         mStatusTextView = findViewById(R.id.status);

         // Button listeners
         findViewById(R.id.sign_in_button).setOnClickListener(this);
         findViewById(R.id.sign_out_button).setOnClickListener(this);
         findViewById(R.id.disconnect_button).setOnClickListener(this);

         // [START configure_signin]
         // Configure sign-in to request the user's ID, email address, and basic
         // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
         GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                 .requestEmail()
                 .build();
         // [END configure_signin]

         // [START build_client]
         // Build a GoogleSignInClient with the options specified by gso.
         mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
         // [END build_client]

         // [START customize_button]
         // Set the dimensions of the sign-in button.
         SignInButton signInButton = findViewById(R.id.sign_in_button);
         signInButton.setSize(SignInButton.SIZE_STANDARD);
         signInButton.setColorScheme(SignInButton.COLOR_LIGHT);
         // [END customize_button]
     }

     @Override
     public void onStart() {
         super.onStart();

         // [START on_start_sign_in]
         // Check for existing Google Sign In account, if the user is already signed in
         // the GoogleSignInAccount will be non-null.
         GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);
         updateUI(account);
         // [END on_start_sign_in]
     }

     // [START onActivityResult]
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);

         // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
         if (requestCode == RC_SIGN_IN) {
             // The Task returned from this call is always completed, no need to attach
             // a listener.
             Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
             handleSignInResult(task);
         }
     }
     // [END onActivityResult]

     // [START handleSignInResult]
     private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
         try {
             GoogleSignInAccount account = completedTask.getResult(ApiException.class);

             // Signed in successfully, show authenticated UI.
             updateUI(account);
         } catch (ApiException e) {
             // The ApiException status code indicates the detailed failure reason.
             // Please refer to the GoogleSignInStatusCodes class reference for more information.
             Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
             e.printStackTrace();
             updateUI(null);
         }
     }
     // [END handleSignInResult]

     // [START signIn]
     private void signIn() {
         Intent signInIntent = mGoogleSignInClient.getSignInIntent();
         startActivityForResult(signInIntent, RC_SIGN_IN);
     }
     // [END signIn]

     // [START signOut]
     private void signOut() {
         mGoogleSignInClient.signOut()
                 .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                     @Override
                     public void onComplete(@NonNull Task<Void> task) {
                         // [START_EXCLUDE]
                         updateUI(null);
                         // [END_EXCLUDE]
                     }
                 });
     }
     // [END signOut]

     // [START revokeAccess]
     private void revokeAccess() {
         mGoogleSignInClient.revokeAccess()
                 .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                     @Override
                     public void onComplete(@NonNull Task<Void> task) {
                         // [START_EXCLUDE]
                         updateUI(null);
                         // [END_EXCLUDE]
                     }
                 });
     }
     // [END revokeAccess]

     private void updateUI(@Nullable GoogleSignInAccount account) {
         if (account != null) {
             mStatusTextView.setText(getString(R.string.signed_in_fmt, account.getDisplayName()));

             findViewById(R.id.sign_in_button).setVisibility(View.GONE);
             findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE);
         } else {
             mStatusTextView.setText(R.string.signed_out);

             findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
             findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE);
         }
     }

     @Override
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.sign_in_button:
                 signIn();
                 break;
             case R.id.sign_out_button:
                 signOut();
                 break;
             case R.id.disconnect_button:
                 revokeAccess();
                 break;
         }
     }
  }

私が読んだものから、問題は SHA1生成 によって引き起こされる可能性があります。

私は完全な ガイド に従ったが、どうやらそれはうまくいっていないようだ。

SHA1をgradlesigningReportからコピーしました

Variant: debug
Config: debug
Store: /Users/user/.Android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: release
Config: none
----------
Variant: debugAndroidTest
Config: debug
Store: /Users/user/.Android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047
----------
Variant: debugUnitTest
Config: debug
Store: /Users/user/.Android/debug.keystore
Alias: AndroidDebugKey
MD5: A3:16:3F:43:75:FE:07:62:6D:8D:CC:DD:21:9F:FA:1A
SHA1: 7B:21:26:7F:D8:18:BB:0E:36:1C:82:DD:B7:28:5F:C1:2F:5C:E4:EA
Valid until: Saturday, August 31, 2047

考えられる原因は何でしょうか。

ありがとう

P.S考えられる原因でしょうか。

Google Play services out of date.  Requires 11720000 but found 10932470
58
Aaron

Google Playサービスを最新バージョン(この場合は11720000)に更新するだけです。 AVDを使用している場合、Nexus 5および5Xの画像はGoogle Playをサポートしています。エミュレータが起動して実行中になったら、[拡張コントロール]メニュー> [Google Play]の順に選択して更新します。

29
Strauss

SHA-1フィンガープリントがfirebaseプロジェクトの設定に追加されているか確認してください。そうでない場合は、SHA-1指紋を使用してください。

https://developers.google.com/Android/guides/client-auth

また、を使用してリリースキーのSHA-1フィンガープリントを見つけます。

keytool -list -v -keystore <keystore path>

キーストアのパスを指定して<keystore path>を削除します。

次に、両方のSHA-1フィンガープリントをfirebaseプロジェクトの設定に追加します。

注意:google-services.jsonを新しいフィンガープリントで更新されたgoogle-services.jsonに置き換えることを忘れないでください。私はそれで二日を失いました。

デバッグ中

Androidスタジオは自動的に 最初のデバッグビルド~/.Android/debug.keystoreを生成し、それを使ってアプリに署名します。

SHA-1を実行するには(password Android)( doc )を実行します。

keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.Android/debug.keystore

デバッグビルドのテスト中にGoogleログイン機能を使用できるようにするには、このSHA-1firebaseのアプリ設定に追加する必要があります。

35
Niyas Nazar

サポートメールとGoogle SignInを機能させるには、すべてのプロジェクトリンクとプライバシーリンクが必要です。それ以外の場合は、12500がスローされます。

オンに設定 https://console.developers.google.com/apis/credentials

これは、Firebaseガイドのどこにも記載されていません。

25
zub0r

 エラー12500の場合は Firebaseの設定にのみサポートGmailを追加し、エラー10の場合はFirebase Consoleにsshフィンガープリントを追加する必要があります。

24
Vijay

エラーPlatformException(sign_in_failed、com.google.Android.gms.common.api.ApiException:12500:、null)

この12500エラーは、プロジェクト設定の で、サポートのサポート電子メールアドレスを追加することで解決できます。 オープンリンク https://console.firebase.google.com/

プロジェクトを選択して設定タブを開きます。

有効なサポートEメールを入力して、今すぐアプリケーションを再起動してください。

enter image description here

11
Maddu Swaroop

SHA1がGoogle Playストアによって上書きされているようです。 Google Playストアの起動パネルのアプリ署名で、Google Playに追加のSHA1が追加されているかどうかを確認します。

そして、そのSHA1をコピーして、あなたの関連する場所に追加すれば、その仕事をするでしょう。

10

https://console.developers.google.com/apis/credentials でOAuth同意画面を更新してみてください

7
Fauzi Danartha

カスタムスコープを追加している場合でも、同様の問題を抱えている人がまだいる場合は、それが有効なスコープであることを確認してください。私の場合は、FacebookのスコープとGoogleのスコープを混在させ、それを把握するためにしばらく時間がかかりました。

3
Paulo Taylor

まず、 Googleデベロッパーコンソールにアプリを登録したことを確認してください

Firebaseアプリケーションにdebugreleaseの両方のキーがあることを確認してください。本エラーが本番環境に表示される場合は、SHA-1 release keyをfire baseアプリに追加してください。開発中の場合は、あなたのSHA-1 debug keyを追加してください。

Where to add SHA-1 finger print

デバッグ/リリースキーを取得します。

keytool -exportcert -list -v -alias [your alias] -keystore [path/to/debug or release.keystore]

更新したgoogle-services.jsonを必ずアプリにダウンロードしてください。

3
Denn

Firebaseコンソールでプロジェクトに移動し、[プロジェクト設定]を開いて、SHA証明書のフィンガープリントをそこに追加します。更新されたgoogle-services.jsonファイルをダウンロードして、Projectsアプリフォルダーに追加してください。

これは私のために働きました。

Firebase console Screenshot

2
Nishant Rai

私はエラーが間違ったSHA1から来たと思います。 SHA1がAndroidスタジオのリリースモードとデバッグモードで異なることを忘れないでください。 SHA1を取得するためにkeytoolを使用する代わりに、Android StudioでGradleプロジェクト - >タスク - > Android - > signingReport(メニューの表示 - >ツールウィンドウ - > gradleで開くことができます)を使用してSHA1をリリースおよびデバッグできます。その後、作業を​​容易にするために、Googleクラウドコンソールで2つのSHA1を使用して2つの別々の認証情報を作成する必要があります(リリースSHA1を使用して1を作成するように指示します)。

2
Bioz Nguyen

別のコンピューター(別のAndroid Studio)でプロジェクトを開いた後も同じ問題が発生しました。私の場合は、最初にFirebaseを設定するために使用していたFirebase Assistantを使用して解決しました。 Firebase Assistantを開き([ツール] - [Firebase])、[認証] - [接続]を選択します。これでプロジェクトがFirebaseに再接続され、設定が更新されました

1
allo

2週間以来、Googleログインの問題に悩まされていましたが、ようやくうまく整理されました。理由を説明させてください。この問題はfirebaseに関連していました。 firebaseでは、オプションとして「サポートメール」フィールドに言及しました。しかし、(あなたの個人的な電子メールのいずれか)を追加すると、問題がソートされ、応答が返されました。 12501のエラーが表示される場合、それはGoogleアカウントの設定に関連しています。

1
Juniorcoder

来ている場合ここからflutter:これは角の一つですここのドキュメントに従って修正する必要があるケース: https://pub.dev/packages/google_sign_inenter image description here

  • Google APIとサービス に移動します
  • Googleサインインを実装するアプリを選択します。
  • 次に、APISとサービスを有効にするをクリックします

enter image description here

  • 次に、Google Peoples APIを検索します

enter image description here

  • Google People APIカードを開いて[有効にする]をクリックすると、アプリで問題が解消される場合があります。
1
erluxman

私にとって、問題は私のデバッグ設定されたアプリで 'release' ClientIDを使っていたことです。それぞれSHA-1を使用して、リリースキーとデバッグキーがあることを確認してください。

1
peresisUser

cordovaコンパイラが適切なキーストアファイルを見つけられないこともあります。



解決策:ionic cordova build Androidを実行する前に、署名プロパティを指定してください

Step-1:デバッグキーストアファイルを生成する

コマンドを実行する

keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.Android/debug.keystore

パスワードを使用:Android

ステップ-2:キーストアファイル(debug.keystore)を現在のプロジェクトの~/.Androidからplatform/Androidディレクトリにコピーします。

Step-3:release-signing.propertiesという名前のファイルを作成します。 platform/Androidディレクトリ

Step-4:ファイルに内容を追加する

storeFile=debug.keystore
keyAlias=androiddebugkey
storePassword=Android
keyPassword=Android

注:これらはデフォルト値です。カスタムのエイリアスとパスワードを指定した場合は、それを使用してください。

ステップ5:ionic cordova build Androidをビルドする

1
Debojyoti

私はしばらくこれに行き詰まった。

これらのステップが実行されていることを確認してください。

  • 正しいSHAキーがFirebase Consoleに保存されています。
  • 最新のgoogle-service.jsonをダウンロードしてください。
  • そして最後に最も重要なgoogle apiの資格情報でOAuthの同意を保存してください、 OAuth画面 把握するため。そして、その後はうまくいった。
0
Pranjal Gupta

次のものが正しく設定されていることを確認してください。

  1. GoogleプロジェクトでクライアントIDを生成します。
  2. そのクライアントIDに適切なSHA-1キーを指定してください。 (デバッグ/リリース)
  3. そのクライアントIDに適切なパッケージ名を指定してください。
  4. strings.xmlgoogle-services.jsonまたはcredentials.jsonファイルでクライアントIDを生成したことを確認してください。
0
Chintan Shah

Googleのオプションが有効になっていない場合、エラーが表示されました。 image に示されています。

Googleのアカウントを変更し、Googleとの接続オプションをオンにするのを忘れたときに起こりました。

0
Yonibagi

私の場合、非実稼働アプリで作業していましたが、問題は、firebaseコンソールでプロジェクトを作成するときに、FirebaseとGoogle開発者コンソール間でSHA-1キーを同期する際に問題があったことでした。そこで、最初にGoogle Developerコンソールでプロジェクトを作成し、Firebaseコンソールで新しいプロジェクトを作成するときにプロジェクトを選択することにしました。

また、このために tutorial を作成しました。

0
Zain

https://developers.google.com/identity/sign-in/Android/sign-in このAPIのマニュアルに従いますが、内部のWEB_CLIENT_IDに注意してくださいgoogle-services.jsonファイル内に生成されたクライアントIDの値を使用します。

class MainActivity : AppCompatActivity(), GoogleApiClient.OnConnectionFailedListener {
private val TAG = "JSAGoogleSignIn"
private val REQUEST_CODE_SIGN_IN = 1234
private val WEB_CLIENT_ID = "354298333018-XXXXXXXXXXXXXXXXXXXXXXX.apps.googleusercontent.com"
private var mAuth: FirebaseAuth? = null

private var mGoogleApiClient: GoogleApiClient? = null
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    var txt_register = findViewById<TextView>(R.id.txt_register)
    txt_register.setOnClickListener {
        var intent = Intent(this@MainActivity, RegisterActivity::class.Java)
        finish()
        startActivity(intent)
    }
    val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(WEB_CLIENT_ID)
            .requestEmail()
            .build()
    mGoogleApiClient = GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build()

    mAuth = FirebaseAuth.getInstance()
    sign_in_button.setOnClickListener {
        val intent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient)
        startActivityForResult(intent, REQUEST_CODE_SIGN_IN)
    }

}


override fun onConnectionFailed(p0: ConnectionResult) {
    TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}


private fun updateUI(user: FirebaseUser?) {
    if (user != null) {
        Log.e("Email", "Value" + user.email)
    }

}

fun signIn() {

}

override fun onStart() {
    super.onStart()
    val currentUser = mAuth!!.currentUser
    updateUI(currentUser)
}

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == REQUEST_CODE_SIGN_IN) {
        val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data)
        if (result.isSuccess) {
            // successful -> authenticate with Firebase
            val account = result.signInAccount
            firebaseAuthWithGoogle(account!!)
        } else {
            // failed -> update UI
            updateUI(null)
            Toast.makeText(applicationContext, "SignIn: failed!" + result.status,
                    Toast.LENGTH_SHORT).show()
        }
    }
}

private fun firebaseAuthWithGoogle(acct: GoogleSignInAccount) {
    Log.e(TAG, "firebaseAuthWithGoogle():" + acct.id!!)

    val credential = GoogleAuthProvider.getCredential(acct.idToken, null)
    mAuth!!.signInWithCredential(credential)
            .addOnCompleteListener(this) { task ->
                if (task.isSuccessful) {
                    // Sign in success
                    Log.e(TAG, "signInWithCredential: Success!")
                    val user = mAuth!!.currentUser
                    updateUI(user)
                } else {
                    // Sign in fails
                    Log.w(TAG, "signInWithCredential: Failed!", task.exception)
                    Toast.makeText(applicationContext, "Authentication failed!",
                            Toast.LENGTH_SHORT).show()
                    updateUI(null)
                }
            }
}
0
Vajani Kishan

Firebase認証を使用しています。私のSHA-1は正しく表示され、クライアントIDも正しくありましたが、それでも12500を取得していました。

私のプロジェクト設定でサポートメールアドレスを指定していないことが問題でした。 ([設定] - > [一般]タブ - >あなたのプロジェクト([公開設定])セクション)。

0
algrid

私の場合は、間違ったGoogleクライアントIDが原因です。キーをgoogle-services.jsonoauth_clientオブジェクトの下)にリストされているキーに変更します。

0
thuanle

私の場合は、Firebase consoleにフィンガープリントを追加した後、それがGoogleデベロッパーコンソールによって自動的に検出され、フィンガープリントが表示されます。しかし、サインインは機能しませんでした。すべてのステップを見た後、私はGoogleがこのcom.xxxxxxxx.appのように私のマニフェストファイルパッケージを逆転させたと考えました。しかし、Googleの開発者コンソールでは、実際はapp.xxxxxxxx.comです。だから私は自動で指紋を作成して削除し、正しいパッケージ名で指紋を追加しました。ブーム!!。出来た。

0
Naroju

アプリがバックエンドサーバーで認証されるとき、またはバックエンドサーバーからGoogle APIにアクセスするときは、ユーザーの基本的なプロファイル情報にアクセスするために、GoogleSignInOptionsオブジェクトの作成時にサーバー用に作成されたOAuth 2.0クライアントIDをrequestIdTokenメソッドに渡す必要があります。その後、APIコンソールの[認証情報]ページにある[OAuth同意]画面でサポートEメールを送信することを忘れないでください。

0

プロジェクトに数字や記号などの特殊文字が含まれていないことを確認してください(プロジェクト名はcom.google.testprojectのように単純でなければなりません)

0
Sekhon123