Google Войти Аутентификация с бэкэнд-сервером - PullRequest
0 голосов
/ 19 ноября 2018

Мне нужно получить токен доступа из приложения Android и отправить его на внутренний сервер, чтобы выполнить некоторую операцию с API календаря Google.

Я следовал этому: https://developers.google.com/identity/sign-in/android/backend-auth

Но я получил com.google.android.gms.common.api.ApiException: 10 Что-то пошло не так с "server_client_id"

В https://console.cloud.google.com/apis/credentials Я сделал две попытки

1) с идентификатором клиента для веб-приложения (я использую его в веб-версии проекта приложения)

2) с идентификатором клиента для приложения Android, сообщающего SHA-1 в соответствии с запросом

Что такое правильный путь 1 или 2? И почему у меня ошибка? Спасибо

Я использую код выше:

/*GOOGLE OAUTH*/
public void signIn() {
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken("XXXXXXX.apps.googleusercontent.com")
            .requestEmail()
            .build();

    // Build a GoogleSignInClient with the options specified by gso.
    GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

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

}


private void handleSignInResult(@NonNull Task<GoogleSignInAccount> completedTask) {
    try {
        GoogleSignInAccount account = completedTask.getResult(ApiException.class);
        String idToken = account.getIdToken();

        Log.v("MYLOG","Ottengo Access Token " + idToken);
        // TODO(developer): send ID Token to server and validate

        //updateUI(account);
    } catch (ApiException e) {
        Log.w("MYLOG", "handleSignInResult:error", e);
        //updateUI(null);
    }
}
/*GOOGLE OAUTH END*/

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


    /*GOOGLE SIGN IN OAUTH SECTION*/
    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        super.onActivityResult(requestCode, resultCode, data);
        // The Task returned from this call is always completed, no need to attach
        // a listener.
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleSignInResult(task);
    }
return;
}

1 Ответ

0 голосов
/ 20 ноября 2018

Я решил вопрос, и сомневаюсь.

1) Не забудьте поместить credentials.json в корневой каталог вашего приложения.

2) Если вам нужен внутренний сервер, вы можете использовать credentials.json (и client_id) из веб-версии (например, ту, которую вы используете для версии программного обеспечения вашего веб-сайта). Не требуется идентификатор клиента oauth для Android с отпечатком sha1 и т. Д.)

3) вы можете использовать тот же apikey, что и на веб-сайте, но если вы хотите установить ограничение на основе реферера (для веб-сайта) и на основе приложения для Android ... вам нужно сделать два ключа API, один с ограничением реферера и один с ограничением по отпечатку пальца sha1

надеюсь, что это поможет другим парням!

...