webentwicklung-frage-antwort-db.com.de

Token null Google-Konto anmelden

Ich folge dem Beispiel von google, um das Token zu erhalten, aber ohne Erfolg. Das Anfordern des Tokens ist immer fehlgeschlagen. Dies ist die neueste Art und Weise, wie Google bei Ihren Seitenentwicklern angezeigt wird. Ich glaube, der Fehler liegt nicht in meinem Code

  private String CLIENTE_ID = "...apps.googleusercontent.com";



GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(CLIENTE_ID)
            .requestEmail()
            .build();

// Build GoogleAPIClient with the Google Sign-In API and the above options.
mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();

imgBGoogle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

            Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
            startActivityForResult(signInIntent, 9002);
        }
});



@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 == 9002) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);

            handleSignInResult(result, data);

        }

if (requestCode == 9002) {
            // [START get_id_token]
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            Log.d(TAG, "onActivityResult:GET_TOKEN:success:" + result.getStatus().isSuccess());

            if (result.isSuccess()) {
                GoogleSignInAccount acct = result.getSignInAccount();
                String idToken = acct.getIdToken();

                // Show signed-in UI.
                Log.d(TAG, "idToken:" + idToken);
                Log.d(TAG, "\n ");

                // TODO(user): send token to server and validate server-side
            } else {
                // Show signed-out UI.
                Log.d(TAG, "idToken: fail");

            }
            // [END get_id_token]
        }



}

private void handleSignInResult(GoogleSignInResult result, Intent data) {

        getToken1(data);
        getToken2(result);

        String BOOKS_API_SCOPE = "https://www.googleapis.com/auth/books";
        String GPLUS_SCOPE = "https://www.googleapis.com/auth/plus.login";
        String mScopes = "oauth2:" + BOOKS_API_SCOPE + " " + GPLUS_SCOPE;

}


void getToken1(Intent data){

    GoogleSignInResult a = Auth.GoogleSignInApi.getSignInResultFromIntent(data);

    if (a.isSuccess()) {

        Log.d(TAG, "TOKEN 1: " + a.getSignInAccount().getIdToken());
        Log.d(TAG, "DISPLAY NAME 1: " +a.getSignInAccount().getDisplayName());
        Log.d(TAG, "ID 1: " + a.getSignInAccount().getId()+"\n ");

    }else{
        Log.d(TAG, "ID 1: falhou"+"\n ");
    }

}

void getToken2(GoogleSignInResult result){

        if (result.isSuccess()) {

            GoogleSignInAccount acct = result.getSignInAccount();

            Log.d(TAG, "TOKEN 2: " + acct.getIdToken());
            Log.d(TAG, "DISPLAY NAME 2: " + acct.getDisplayName());
            Log.d(TAG, "ID 2: " + acct.getId()+"\n ");

        }else{
            Log.d(TAG, "ID 2: falhou"+"\n ");
        }

}

Wie kann ich das Token erhalten? Kann mir jemand helfen?

 enter image description here

 enter image description here

 enter image description here

 enter image description here

10
FlipNovid

Ich bin gerade auf ein ähnliches Problem gestoßen, ich habe keinen Web-OAuth-Client verwendet, es funktionierte mit der Firebase und ich dachte, diese einfachere Lösung könnte für jemanden hilfreich sein. 

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

Es ist nicht erforderlich, default_web_client_id zu definieren. Es funktioniert wie eingefügt. Es ist eine Zeichenfolge, die vom Google-Services-Plugin generiert wird. 

20
Faisal

Es scheint, dass Ihr Code in Ordnung ist, aber versuchen Sie, die offiziellen Anweisungen genau zu befolgen. Es hat für mich funktioniert: http://Android-developers.blogspot.com/2016/03/Registrieren-oauth-clients-for-google.html

Stellen Sie sicher, dass Sie das Web-Token verwenden, versuchen Sie, ein neues zu erstellen, und verwenden Sie es .  enter image description here

3
zkvarz
public class GplusTokenUtils extends AsyncTask<Void, Void, String> {

    String accessToken = "";

    private GoogleSignInAccount account;

    public IGetToken iGetTokenListener;

    public interface IGetToken {
        void onGetToken(String token);
    }

    public void getTokenLitener(IGetToken tokenListener) {
        this.iGetTokenListener = tokenListener;
    }

    public GplusTokenUtils() {

        iGetTokenListener = new IGetToken() {

            @Override
            public void onGetToken(String token) {

            }
        };
    }


    private Activity activity;

    public void setActivity(Activity activity) {

        this.activity = activity;
    }


    public void setAccount(GoogleSignInAccount account) {

        this.account = account;
    }


    @Override
    protected String doInBackground(Void... voids) {

        try {
            accessToken = GoogleAuthUtil.getToken(activity, account.getEmail(), "oauth2:profile email");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (GoogleAuthException e) {
            e.printStackTrace();
        }

        return accessToken;
    }

    @Override
    protected void onPostExecute(String aVoid) {

        Log.d("GPLUS_TOKEN", aVoid);

        iGetTokenListener.onGetToken(aVoid);

    }

}

Und vergiss das nicht

  GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build();
1
Caner Yılmaz