我不是程序员,但我需要自己做。我需要一些帮助。
我一直在寻找过去两天的解决方案,我找不到任何解决方案。
确定。我正在编写Android Native App。我的第一个目标是通过Google帐户(已经在手机上设置)实现登录的可能性。
所以我使用AccountManager来获取“com.google”帐户,我这样得到一个身份验证令牌:
Account[] mAccounts = mAccountManager.getAccountsByType("com.google");
AccountManagerFuture<Bundle> response =
mAccountManager.getAuthToken(mAccounts[0], "android", null, this, null, null);
Bundle authTokenBundle;
String authToken;
try {
authTokenBundle = response.getResult();
authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString();
} catch (OperationCanceledException e) {
Log.e(TAG, e.getMessage());
} catch (AuthenticatorException e) {
Log.e(TAG, e.getMessage());
} catch (IOException e) {
Log.e(TAG, e.getMessage());
}
我的问题是 - 我的下一步应该是什么?我如何进一步了解此身份验证过程?我应该如何使用此令牌?
我找到了一些资源,但大多数都使用OAuth或基于网络。我只需要进行身份验证并(如果可能)获取用户的名称(我已经有电子邮件地址),我不需要访问任何Google服务。
提前谢谢你。
答案 0 :(得分:8)
实际上,OAuth 2是您想要的,而不是OpenID - OpenID本质上是基于Web的,因此您需要使用WebView
或浏览器跳过一些环节。 OAuth 2允许您直接从应用程序使用AccountManager中的令牌与Google API。
在致电getAuthToken()
时,authTokenType
参数是OAuth 2范围,您希望userinfo.profile
和userinfo.email
验证电子邮件地址(您已经拥有它,但你还没有验证它;理论上它可以被欺骗)并得到用户的名字。
以下是我在类似情况下用于完整范围的内容:
private static final String OAUTH2_SCOPE =
"oauth2:" +
"https://www.googleapis.com/auth/userinfo.profile" +
" " +
"https://www.googleapis.com/auth/userinfo.email";
当然,您可以直接使用整个字符串文字,但我更喜欢将其构建并清楚,并且如果需要,以后更容易更改。
就我而言,我使用getAuthTokenByFeatures()
,如下所示:
am.getAuthTokenByFeatures("com.google", OAUTH2_SCOPE, null, this, null, null,
new AccountManagerCallback<Bundle>()
{
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bundle = future.getResult();
System.out.println("Got Bundle:\n" +
" act name: " +
bundle.getString(AccountManager.KEY_ACCOUNT_NAME) +
"\n act type: " +
bundle.getString(AccountManager.KEY_ACCOUNT_TYPE) +
"\n auth token: " +
bundle.getString(AccountManager.KEY_AUTHTOKEN));
} catch (Exception e) {
System.out.println("getAuthTokenByFeatures() cancelled or failed:");
e.printStackTrace();
}
}
}, null);
但您可以将相同的想法应用于您的代码。然后,您可以将OAuth令牌与Google用户信息API一起使用,如Using OAuth 2.0 for Login中所述验证电子邮件并获取用户名。