Android 使用 AWS Cognito、Google+ OAuth 和 AccountManager 的应用程序
Android App using AWS Cognito, Google+ OAuth, and AccountManager
我一直在尝试在我的 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 文档(来自上面的 link)在设置 google 的步骤 #5 中指出我应该执行以下操作我似乎无法正确执行的步骤:"Under Credentials > Add Credentials, create a Service Account. The console will alert you that a new public/private key has been created."
Google 已更改其 UI,现在有 3 个选项,创建自定义服务帐户,并使用两个默认帐户之一(应用引擎/计算引擎)。我该怎么做?
好的,我明白了。 Amazon aws 和 google 文档的主要更改。
GoogleSignInOptions 需要请求 ID 令牌。你这样做:
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 令牌
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
GoogleSignInAccount account = result.getSignInAccount();
String idToken = account.getIdToken();
现在您可以使用该 id 令牌通过 cognito 获取 aws 凭据。
映射登录 = new HashMap();
logins.put("accounts.google.com", 令牌);
credentialsProvider.setLogins(登录);
//credentialsProvider=CognitoCachingCredentialsProvider
现在你应该准备好了。
我一直在尝试在我的 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 文档(来自上面的 link)在设置 google 的步骤 #5 中指出我应该执行以下操作我似乎无法正确执行的步骤:"Under Credentials > Add Credentials, create a Service Account. The console will alert you that a new public/private key has been created."
Google 已更改其 UI,现在有 3 个选项,创建自定义服务帐户,并使用两个默认帐户之一(应用引擎/计算引擎)。我该怎么做?
好的,我明白了。 Amazon aws 和 google 文档的主要更改。
GoogleSignInOptions 需要请求 ID 令牌。你这样做:
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 令牌
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); GoogleSignInAccount account = result.getSignInAccount(); String idToken = account.getIdToken();
现在您可以使用该 id 令牌通过 cognito 获取 aws 凭据。
映射登录 = new HashMap(); logins.put("accounts.google.com", 令牌); credentialsProvider.setLogins(登录); //credentialsProvider=CognitoCachingCredentialsProvider
现在你应该准备好了。