web-dev-qa-db-ja.com

Android Google Plusサインインの問題。handleSignInResultはFalseを返します

Google+サインイン機能の統合中にいくつかの問題に直面しました。これまで、必要なすべてのG +サインインAPIモジュールとコードを統合し、debug.keystoreのkeytoolを使用してSHA1を生成した後、google-services.jsonを/ app内に生成および配置し、GoogleクラウドにSHA1を貼り付けました。開発者コンソールですが、デバイスデバッグを実行しようとするときや「G +サインイン」をクリックするたびにLogCatで次のエラーが発生します。

E/GMPM:getGoogleAppIdがステータス:10で失敗しました

E/GMPM:アップロードはできません。アプリ測定が無効です。

D/SignInActivity:handleSignInResult:false

このhandleSignInResultは常にFalseを返し、サインインしてデータをさらに取得することはできません。あなたが誰かがそのような状況に直面したことがあるなら、ここで私を助けてください。この小さな障害は非常に厄介です。

みんなありがとう。

11
rohitpaniker

Plus.APIまたはAuth.GOOGLE_SIGN_IN_APIを使用していますか?後者は最新の改良版です。こちらをご覧ください: https://developers.google.com/identity/sign-in/Android/sign-in


Auth.GOOGLE_SIGN_IN_APIを使用している場合:

OnActivityResultで、以下のようなコードを使用すると、GoogleSignInStatusCodesで定義されるステータスコードを取得できます。 https://developers.google.com/Android/reference/com/google/Android/gms/auth/ api/signin/GoogleSignInStatusCodes

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

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        int statusCode = result.getStatus().getStatusCode();
    }
}

最も一般的な問題は、正しいOAuth2クライアント登録が欠落していることです。 (残念ながら、今のところ、ステータスコードはINTERNAL_ERROR 8です。これは役に立ちません。)このスレッドを見てください: GoogleSignInOptions AndroidからrequestEmailを送信したときにINTERNAL_ERRORが発生しました

8
Isabella Chen

申請したことを確認してくださいSHA-1のデバッグキーgoogle-services.jsonファイルの作成。

5
lRadha

Sudhanshu Gaurが this post で指摘したように、最初に json設定ファイルを作成する で使用したのと同じキーを使用して署名付きapkを生成してみてください。次に、デバイスにインストールして、機能するかどうかを確認します。理由はAndroid [実行]をクリックしたときにStudioがapkに署名しないためです。
まったく同じ問題に悩まされていましたが、この修正はうまくいきました。

4
Jason Liu

すべてのSHA-1フィンガープリントをfirebaseに追加している場合、エラーが発生します(この問題に直面していました。この手順を実行すると解決します)。この手順を試してください。

1. Google Console API認証情報 ページに移動します。

2.(左)タブのcredentialsをクリックします。

3.すでに2つのデフォルトAndroidとWeb OAuthクライアントIDが存在します。作成する必要がありますOne Android ClientおよびOneWeb 2.0 Client

4。Firebaseに移動します。プロジェクト設定でgoogle-services.jsonをダウンロードし、アプリフォルダーに貼り付けます。

(すべては問題ありませんが、Googleにサインインできない場合は、多分OAuth問題です。したがって、AndroidとWebクライアントIDを作成してください。 2 Android Client and Two Web client Id。)

3
Gopal

アプリで署名証明書のSHA-1ハッシュを提供する必要があります

例:

登録済みのSHA-1:

CF:4A:A1:0A:BC:84:F2:31:28:C3:BA:A7:A3:A2:36:10:5F:1D:3E:CBそして作成した設定ファイルをダウンロードして、置き換えます* yourproject/app/google-service.jsonに

// google-service.jsonファイルのチュートリアルを取得 https://developers.google.com/identity/sign-in/Android/start-integrating

// SHA-1の取得方法 https://developers.google.com/Android/guides/client-auth

1
Exel Staderlin
package com.google.samples.quickstart.signin;

import Android.content.Intent;
import Android.os.Bundle;
import Android.support.annotation.NonNull;
import Android.support.annotation.Nullable;
import Android.support.v7.app.AppCompatActivity;
import Android.util.Log;
import Android.view.View;
import Android.widget.TextView;

import com.google.Android.gms.auth.api.signin.GoogleSignIn;
import com.google.Android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.Android.gms.auth.api.signin.GoogleSignInClient;
import com.google.Android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.Android.gms.common.SignInButton;
import com.google.Android.gms.common.api.ApiException;
import com.google.Android.gms.tasks.OnCompleteListener;
import com.google.Android.gms.tasks.Task;

/**
 * Activity to demonstrate basic retrieval of the Google user's ID, email address, and basic
 * profile.
 */
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_DEMO);

        // 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());
            updateUI(null);
        }
    }
    // [END handleSignInResult]

    // [START signIn]
    private void signIn() {

        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);

       /* Intent sign = mGoogleSignInClient.getSignInIntent ();
        startActivityForResult ( sign, 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;
        }
    }
 }
0
Good We

最初にデバッグキーを生成します。

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

次に、SHA1を指紋セクションのFirebaseまたはGoogleプロジェクトの設定に貼り付けます。

0
Taras Vovkovych

SHA-1に追加されたキーがデバッグまたはリリースされていることを確認してください。これは、キーに基づいて相対的に機能します。私は同じ問題を抱えていますが、リリースSHA-1を使用していることを理解していますが、デバッグでテストすると間違った結果が得られます。ありがとう

0
Sagar Pithiya