我一直在尝试在我的 Android 应用程序上设置 Google+ OAuth 和 AWS Cognito。我相信现在我有 Google+ OAuth 可以工作,因为我可以在下面的电话中取消该帐户:
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);
在此调用之后,accounts 是一个空数组——我需要做些什么来确保 OAuth 进程将信息放入 AccountManager 中吗?
*** 另一件我不确定的事情是,AWS 文档(来自上面的链接)在设置 google 的第 5 步中指出我应该执行以下我似乎无法正确执行的步骤: "在 Credentials > Add Credentials 下,创建一个服务帐户。控制台将提醒您已创建新的公钥/私钥。"
Google 更改了他们的 UI,现在有 3 个选项,创建一个自定义服务帐户,并使用两个默认帐户(应用引擎/计算引擎)之一。我应该怎么做?
最佳答案
好吧,我明白了。 Amazon aws 和 google 文档的主要更改。
GoogleSignInOptions 需要请求 ID token 。你这样做:
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();
然后当您得到返回结果时,您将拥有 id token
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); GoogleSignInAccount account = result.getSignInAccount(); String idToken = account.getIdToken();
现在您可以使用该 id token 通过 cognito 获取 aws 凭证。
Map logins = new HashMap(); logins.put("accounts.google.com", token); credentialsProvider.setLogins(登录); //credentialsProvider=CognitoCachingCredentialsProvider
现在你应该准备好了。
关于使用 AWS Cognito、Google+ OAuth 和 AccountManager 的 Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39003031/