2016-08-17 4 views
2

Я пытался настроить Google+ OAuth и AWS Cognito в своем приложении для Android. Сейчас у меня есть Google+ OAuth работает я верю, потому что я в состоянии получить счет от ниже вызова:Android-приложение с использованием AWS Cognito, Google+ OAuth и AccountManager

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

С этого объекта результата я могу получить некоторые данные приведены ниже:

if (result.isSuccess()) { 

    GoogleSignInAccount account = result.getSignInAccount(); 
    String authCode = account.getServerAuthCode(); //null 
    String displayName =account.getDisplayName(); //correct value 
    String email = account.getEmail(); //correct value 
    String id = account.getId(); //correct value 
    String idToken = account.getIdToken(); //null 
... 

Однако, когда я следую документации AWS, я получаю ошибки и устаревшие методы. Вот блок кода я пытаюсь имитировать из документации AWS по:

Документация: http://docs.aws.amazon.com/cognito/latest/developerguide/google.html#set-up-google-1.android#Android

//From Documentation^
GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); 
    AccountManager am = AccountManager.get(this); 
    Account[] accounts = am.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); 
    String token = GoogleAuthUtil.getToken(getApplicationContext(), accounts[0].name, 
      "audience:server:client_id:YOUR_GOOGLE_CLIENT_ID"); 
    Map<String, String> logins = new HashMap<String, String>(); 
    logins.put("accounts.google.com", token); 
    credentialsProvider.setLogins(logins); 

Вот где я бегу в проблемы:

AccountManager am = AccountManager.get(context); 
      Account[] accounts = am.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); 

После этого вызова счетов пустой массив - мне нужно что-то сделать, чтобы гарантировать, что процесс OAuth помещает информацию в AccountManager?

*** Еще одна вещь, о которой я не знал, документация AWS (по приведенной выше ссылке) гласит, что в качестве шага № 5 для настройки google я должен выполнить следующие шаги, которые я не могу получить справа: «В разделе« Учетные данные »>« Добавить учетные данные »создайте учетную запись« Служба ». Консоль предупредит вас о создании нового открытого/закрытого ключа».

Google изменил свой пользовательский интерфейс, и теперь есть 3 варианта, создание пользовательской учетной записи службы и использование одной из двух учетных записей по умолчанию (движок движка/калькулятор). Что мне делать?

ответ

1

Хорошо, я понял. Ключевые изменения от документации Amazon aws и google.

  1. В GoogleSignInOptions необходимо указать токен идентификатора. Вы можете сделать это следующим образом:

    googleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
         .requestScopes(new Scope(Scopes.PLUS_LOGIN)) //<- this is optional 
         //requestIdToken takes the google cloud console's project's WEB (not Android) 
         .requestIdToken("in this string put your google web client id") 
         .requestEmail() 
         .build(); 
    
  2. Затем, когда вы получите результаты обратно вы будете иметь идентификатор маркера

    GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
    GoogleSignInAccount account = result.getSignInAccount(); 
    String idToken = account.getIdToken(); 
    
  3. Теперь вы можете использовать этот токен, чтобы получить AWS учетные данные через Cognito.

    Map logins = new HashMap(); logins.put ("accounts.google.com", токен); credentialsProvider.setLogins (логины); // credentialsProvider = CognitoCachingCredentialsProvider

Теперь вы должны быть все готово.

Смежные вопросы