私は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
に戻りました。
それが役に立てば幸い。
同じ問題を抱えていたため、support mail on firebase project settingsに設定しなかったことがわかりました。
この場合、firebaseが表示されますプロジェクト設定の編集有効にしようとすると- Googleサインイン on Firebase Authentication firebaseからクライアントIDをコピーできます
私のために働いた唯一のことは、2 oauth client ids。WebアプリケーションのクライアントID AND Android client id
私のAndroidアプリでは、WebアプリケーションのクライアントIDとクライアントシークレットを使用します。ただし、アプリのどこでもAndroidクライアントIDつまり、Google APIコンソールでoauth Androidクライアントを削除すると、アプリは動作しなくなります。私のアプリ。
これは私にはまったく意味がありません!図に行く。しかしこれまでのところ、これが機能している唯一のものです。
信じられないほど信じられない。
私はFlutterを使用してAndroidアプリケーションを開発しています。Googleサインインを統合しようとしましたが、ApiException:16およびSIGN_IN_FAILED( RESULT_CANCELEDの代わりに)。
FirebaseのアプリケーションタイプはAndroidに設定されました。
私の場合、何時間もデバッグした後、間違っていることが判明しましたSHA-1の問題。
プロジェクトからSHA-1キーを抽出し、Firebaseコンソールを更新するとすぐに機能しました。
ここでのパーティーには少し遅れたかもしれませんが、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();
それが役に立てば幸い
プロジェクト設定のダウンロードから見つけた別のoauth idキーを使用し、プロジェクトにクライアント3キーを追加しました。