web-dev-qa-db-ja.com

com.google.Android.gms.common.api.ApiException:16:

私はAndroidアプリでGoogleサインインを使用する方法を学ぼうとしますが、com.google.Android.gms.common.api.ApiExceptionをキャッチします:16そして、私はstackoveflowの答えでそれを見つけることができません、それは何ですか、なぜそれをキャッチします。私が読んだドキュメントでは、それは「ユーザーによってキャンセルされました」が、私のGoogleアカウントは受け入れましたアプリをインストールする

import Android.support.v7.app.AppCompatActivity
import Android.os.Bundle
import Android.util.Log
import com.google.Android.gms.auth.api.signin.GoogleSignIn
import com.google.Android.gms.auth.api.signin.GoogleSignInOptions
import com.google.Android.gms.auth.api.signin.GoogleSignInAccount
import Android.content.Intent
import com.google.Android.gms.tasks.Task
import com.google.Android.gms.common.api.ApiException

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build()

        val mGoogleSignInClient = GoogleSignIn.getClient(this, gso)
        val account = GoogleSignIn.getLastSignedInAccount(this)
        if(account != null){
            Log.e("!!!", account.email)
        } else {
            val signInIntent = mGoogleSignInClient.signInIntent
            startActivityForResult(signInIntent, 0)
        }
    }

    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 == 0) {
            // The Task returned from this call is always completed, no need to attach
            // a listener.
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)
            handleSignInResult(task)
        }
    }

    private fun handleSignInResult(completedTask: Task<GoogleSignInAccount>) {
        try {
            val account = completedTask.getResult(ApiException::class.Java)

            // Signed in successfully, show authenticated UI.
            Log.e("!!!", account.email)
        } catch (e: ApiException) {
            e.printStackTrace()
        }

    }

}

このガイド に従いました。プロジェクトの構成を行いました。それが問題であれば、私はこれにVDSを使用します。アカウントは同じ場所で作成されました

StackTraceは次のとおりです。

com.google.Android.gms.common.api.ApiException: 16: 
    at com.google.Android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source)
    at com.google.Android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
    at foryou.friendly.alisa.alisa.MainActivity.onActivityResult(MainActivity.kt:47)
    at Android.app.Activity.dispatchActivityResult(Activity.Java:7124)
    at Android.app.ActivityThread.deliverResults(ActivityThread.Java:4173)
    at Android.app.ActivityThread.handleSendResult(ActivityThread.Java:4220)
    at Android.app.ActivityThread.-wrap20(ActivityThread.Java)
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1579)
    at Android.os.Handler.dispatchMessage(Handler.Java:102)
    at Android.os.Looper.loop(Looper.Java:163)
    at Android.app.ActivityThread.main(ActivityThread.Java:6228)
    at Java.lang.reflect.Method.invoke(Native Method)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:904)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:794)

私は同じ問題を抱えていました。アクティビティの開始結果はRESULT_CANCELEDとerrorCode 16で戻ってきました。問題は、Google Cloud Platform Consoleでのクライアント構成でした。通常のデバッグおよびリリースAPIキーを使用していました。 web applicationをGoogleコンソール設定として使用した場合、結果はOKに戻りました。

それが役に立てば幸い。

6
Sdghasemi

同じ問題を抱えていたため、support mail on firebase project settingsに設定しなかったことがわかりました。

この場合、firebaseが表示されますプロジェクト設定の編集有効にしようとすると- Googleサインイン on Firebase Authentication firebaseからクライアントIDをコピーできます

1
Anga Koko

私のために働いた唯一のことは、2 oauth client ids。WebアプリケーションのクライアントID AND Android client id

私のAndroidアプリでは、WebアプリケーションのクライアントIDとクライアントシークレットを使用します。ただし、アプリのどこでもAndroidクライアントIDつまり、Google APIコンソールでoauth Androidクライアントを削除すると、アプリは動作しなくなります。私のアプリ。

これは私にはまったく意味がありません!図に行く。しかしこれまでのところ、これが機能している唯一のものです。

信じられないほど信じられない。

0
Squibly

私はFlutterを使用してAndroidアプリケーションを開発しています。Googleサインインを統合しようとしましたが、ApiException:16およびSIGN_IN_FAILED( RESULT_CANCELEDの代わりに)。

FirebaseのアプリケーションタイプはAndroidに設定されました。

私の場合、何時間もデバッグした後、間違っていることが判明しましたSHA-1の問題

プロジェクトからSHA-1キーを抽出し、Firebaseコンソールを更新するとすぐに機能しました。

0

ここでのパーティーには少し遅れたかもしれませんが、4時間以上のデバッグの後、次のことに気付きました。

1.- AndroidクライアントIDリストの下に署名証明書の指紋を持つOAuthクライアントを追加します。これは必須です。

2.- IDトークンを取得する必要がある場合に備えて、コードにWebアプリケーションクライアントIDを追加します

// ID and basic profile are included in DEFAULT_SIGN_IN
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                            .requestIdToken("YOUR_CLIENT_ID")
                            .requestEmail()
                            .build();

それが役に立てば幸い

0
Raúl Omaña

プロジェクト設定のダウンロードから見つけた別のoauth idキーを使用し、プロジェクトにクライアント3キーを追加しました。

0
user3156040