Используйте Google Smart Lock для oauth методов входа - PullRequest
0 голосов
/ 19 мая 2018

Я использовал Google Smart Lock в одном из моих приложений для Android.Я сталкиваюсь с некоторыми проблемами при интеграции смарт-блокировки в мое приложение для методов входа, использующих oauth Я использую google , facebook oauth в качестве методов входа, и они возвращают токен oauth и секрет oauth, которые я отправляю на сервер для аутентификации.

Теперь какреализовать интеллектуальную блокировку Google для этих методов?

Как сохранить эти учетные данные с помощью интеллектуальной блокировки, чтобы при последующем чтении учетных данных я мог получить их и использовать для проверки подлинности?

Можно ли вообще реализовать функцию умной блокировки Google с помощью пользовательских методов oauth?Я просмотрел множество источников в интернете, но не смог найти решения этой проблемы.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 30 мая 2018

Невозможно хранить токены с текущим API Smart Lock, но вы можете сохранить тип учетной записи, выбранный пользователем.Например, чтобы помнить, что пользователь использовал OAuth с Google, создайте учетные данные, подобные этим:

Credential credential = new Credential.Builder(gsa.getEmail())
        .setAccountType(IdentityProviders.GOOGLE)
        .setName(gsa.getDisplayName())
        .setProfilePictureUri(gsa.getPhotoUrl())
        .build();

Вы можете определить свои собственные типы учетных записей.Если указанные адреса электронной почты соответствуют учетной записи Google на устройстве, эта запись может быть сохранена автоматически;в противном случае пользователю нужно будет подтвердить, с какой учетной записью Google сохранить данные.

Затем вы можете получить эту информацию позже на другом устройстве или после окончания сеанса пользователя и автоматически запустить поток входа дляэтот OAuth предоставляют.Например, с Google:

mCredentialRequest = new CredentialRequest.Builder()
    .setAccountTypes(IdentityProviders.GOOGLE)
    .build();

mCredentialsClient.request(mCredentialRequest).addOnCompleteListener(
      new OnCompleteListener<CredentialRequestResponse>() {
          @Override
          public void onComplete(@NonNull Task<CredentialRequestResponse> task) {

              if (task.isSuccessful()) {
onCredentialRetrieved(task.getResult().getCredential());
                  return;
              }
          }
      });

private void onCredentialRetrieved(Credential credential) {
    String accountType = credential.getAccountType();
    if (accountType.equals(IdentityProviders.GOOGLE)) {
        // The user has previously signed in with Google Sign-In. Silently
        // sign in the user with the same ID.
        // See https://developers.google.com/identity/sign-in/android/
        GoogleSignInOptions gso =
                new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                        .requestEmail()
                        .build();

        GoogleSignInClient signInClient = GoogleSignIn.getClient(this, gso);
        Task<GoogleSignInAccount> task = signInClient.silentSignIn();
        // ...
    }
}

Как описано в документации: https://developers.google.com/identity/smartlock-passwords/android/retrieve-credentials

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...