アプリのGoogleサインを作成したいのですが、onActivityResult()
からの結果コードが0です
私のonCreate()
メソッドでは、次のように関数startSignInIntent()
を開始します。
_protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//some other stuff
view.loadUrl(myURL);
startSignInIntent();
}
_
これはstartSignInIntent()
です
_private void startSignInIntent() {
GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
GoogleSignInOptions.DEFAULT_SIGN_IN);
Intent intent = signInClient.getSignInIntent();
startActivityForResult(intent, RC_SIGN_IN);
}
_
これはonActivityResult()
です
_protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "data : " + resultCode + " | " + data + " || " + RC_SIGN_IN + " ||| " + requestCode);
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
if (result.isSuccess()) {
// The signed in account is stored in the result.
GoogleSignInAccount signedInAccount = result.getSignInAccount();
} else {
String message = result.getStatus().getStatusMessage();
if (message == null || message.isEmpty()) {
Toast.makeText(this, "Login failed", Toast.LENGTH_LONG).show();
}
new AlertDialog.Builder(this).setMessage(message)
.setNeutralButton(Android.R.string.ok, null).show();
}
}
_
これは、関数onActivityResult()
のログの結果です。
0 |インテント{(エクストラあり)} || 2 ||| 2
ポップアップのアカウントを選択した後、自分のアカウントを選択できます。 okでこの画面が表示されますが、ログインがすでに失敗していることがわかります。写真を見る: -
アプリに適切なOAuthキーが適切に構成されているかどうかを確認してください。この関連 SO post によると、OPはAuthキーが他にも関連付けられていることに気付きました問題を作成するプロジェクト。
また、コードの実装について、次の Androidのサインインを試す の実装を確認できます。
@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);
}
}
また、OPによって提供されるいくつかの追加情報では、テストするときにAPKに署名したことを確認する必要があります。詳細については、 Sign Your App に関するドキュメントを参照してください。
お役に立てれば。
同じバグがあり、requestCodeは常に0(RESULT_CANCELED)でした。
決定は、FirebaseコンソールでのGoogleサインインを有効にすることでした。
Firebase console->あなたのプロジェクト-> Authentication-> Providers-> Google->そしてそれをオンにします。
私の場合、リンクはこのようなものでした
https://console.firebase.google.com/u/0/project/ {プロジェクト名}/authentication/providers
私はAndroidエミュレーターで同じ問題に直面しました。エミュレーターがインターネットから切断されたことが原因で、Firebaseが上記のエラーをスローした理由がわかりました。
元のケースには当てはまりませんが、私の経験を共有したいと思いました。同じ問題があったため、検索がここに到達しました-startActivityForResultは、resultCode = 0で即座に戻ります。
私の原因は間違ったパッケージ名でした。それぞれに異なるパッケージ名を持ついくつかのバリアントを持つアプリがあります。 Googleログインでは、Androidアプリのパッケージ名がGoogle APIコンソールのAndroidプロジェクトのパッケージ名のいずれかと一致する必要があります。1つのバリアント用にプロジェクトを設定しました、しかし他の人にはできませんでした。GoogleAPI Consoleのプロジェクトを作成すると、ログインが問題なく動作し始めました。
私はこれを具体的にAndroid jellybeanで行っていましたが、使用していたサインインアクティビティの起動モードが標準またはマニフェストのシングルトップでない場合、onActivityResult()はすぐに返されないことがわかりました実際に結果を待っています。
<activity
Android:name=".SignInActivity"
Android:excludeFromRecents="true"
Android:exported="true"
Android:launchMode="singleTop"
Android:permission="com.google.firebase.auth.api.gms.permission.LAUNCH_FEDERATED_SIGN_IN"
tools:replace="Android:launchMode"/>