Токен null Войти Аккаунт Google

Я следую примеру Google, чтобы получить токен, но безуспешно. Всегда не удается получить токен. Это последний способ отображения Google на вашей странице. Разработчики, я считаю, что ошибка не в моем коде.

  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 ");
        }

}

как я могу получить токен? кто-нибудь может мне помочь?

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь


person FlipNovid    schedule 08.01.2016    source источник
comment
Пожалуйста, прочитайте мой ответ на stackoverflow.com/questions/34099208/google-sign -in-idtoken чтобы узнать поможет это или нет   -  person BNK    schedule 09.01.2016
comment
Вы уверены, что ваше приложение использует идентификатор веб-типа, а не идентификатор типа Android?   -  person BNK    schedule 11.01.2016
comment
[i.stack.imgur.com/6keg0.png] проверьте, пожалуйста, @BNK   -  person FlipNovid    schedule 11.01.2016
comment
Не могли бы вы помочь мне с моей проблемой, я трачу несколько дней, пытаясь ее решить... Я использую тот же код, но, наконец, когда я извлекаю tokenId из API Google, я получаю String tokenId = ‹857 символов›...? ? Если я попытался проверить его, googleapis.com/oauth2/v3/tokeninfo?access_token= ‹857 chars response› я все получаю «error_description: Invalid Value»… Как вы проверяете свой ответ? Вы также получаете String tokenId = ‹857 символов›?   -  person Aleksey Timoshchenko    schedule 09.08.2016


Ответы (3)


Я только что наткнулся на аналогичную проблему, я не использовал веб-клиент OAuth, он работал с использованием Firebase, и я подумал, что это более простое решение может быть кому-то полезно.

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

Нет необходимости определять default_web_client_id, он будет работать как вставленный. Это строка, сгенерированная плагином google-services.

person Faisal    schedule 12.03.2017
comment
Это сработало для меня (просто добавив строку requestIdToken() - person Alaa M.; 30.06.2020
comment
Работал и здесь. Спасибо. - person Bugs Happen; 08.02.2021

Кажется, ваш код в порядке, но постарайтесь точно следовать официальному руководству. У меня это сработало: http://android-developers.blogspot.com/2016/03/registering-oauth-clients-for-google.html

Убедитесь, что вы используете веб-токен, попробуйте создать новый и использовать его. введите здесь описание изображения

person zkvarz    schedule 28.03.2016
comment
Не могли бы вы помочь мне с моей проблемой, я трачу несколько дней, пытаясь ее решить... Я использую тот же код, но, наконец, когда я извлекаю tokenId из API Google, я получаю String tokenId = ‹857 символов›...? ? Если я попытался проверить его, googleapis.com/oauth2/v3/tokeninfo?access_token= ‹857 chars response› я все получаю «error_description: Invalid Value»… Как вы проверяете свой ответ? Вы также получаете String tokenId = ‹857 символов›? - person Aleksey Timoshchenko; 09.08.2016
comment
@AlekseyTimoshchenko: вы получаете обратно id_token, поэтому он должен быть oauth2/v3/tokeninfo?id_token=xxx - person dannyroa; 03.12.2016

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);

    }

}

И не забывайте об этом

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