我已经阅读了关于使用OAuth2.0进行身份验证的整篇文章。但我没有找到一个合适的方法在android应用程序上做到这一点。请建议一种获取访问令牌的方法,这样我就可以构建一个Gmail服务对象并访问收件箱或任何其他方法。
这是他们在这个链接中给出的例子:
GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
Plus plus = new Plus.builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), credential)
.setApplicationName("Google-PlusSample/1.0")
.build();
调用下面的方法来获取移动中使用的令牌和谷歌帐户。此方法首先检索手机中的谷歌帐户设置,然后检索令牌。您可以使用首选项保存令牌和帐户名,以便以后使用,这样您就不必每次都检索令牌。
private void chooseAccount() {
Intent intent = AccountPicker.newChooseAccountIntent(null, null,
new String[]{"com.google"}, false, null, null, null, null);
startActivityForResult(intent, 9009);
}
在取回账户后,调用以下方法,
public static final String MAIL_GOOGLE_COM = "https://mail.google.com";
public static final String GMAIL_COMPOSE = "https://www.googleapis.com/auth/gmail.compose";
public static final String GMAIL_MODIFY = "https://www.googleapis.com/auth/gmail.modify";
private static final String SCOPE = "oauth2:" + GMAIL_COMPOSE + " " + GMAIL_MODIFY + " " + MAIL_GOOGLE_COM;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
//accountname - google account in your mobile is retrieved
//now use the google account to retrieve the token
new GetToken(getActivity().getApplicationContext(), SCOPE, accountName).execute();
showErrorDialog(exception);
}
} else if (requestCode == Activity.RESULT_CANCELED) {
Toast.makeText(getActivity(), "Cancelled!!!", Toast.LENGTH_SHORT).show();
}
}
下面的类用于获取令牌。
private class GetToken extends AsyncTask<Void, Void, Void> {
Context context;
String mScope, mEmail, token;
GetToken(Context context, String scope, String email) {
this.context = context;
this.mScope = scope;
this.mEmail = email;
}
@Override
protected Void doInBackground(Void... params) {
try {
token = GoogleAuthUtil.getToken(context, mEmail, mScope);
//save the token using preference for later use or do any good stuff using token here
Log.v("ranjapp", "Token is " + token);
} catch (UserRecoverableAuthException e) {
handleException(e);
} catch (GoogleAuthException ex) {
handleException(ex);
} catch (Exception e) {
//display a error dialog
}
return null;
}
void handleException(final Exception e) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (e instanceof UserRecoverableAuthException) {
Intent intent = ((UserRecoverableAuthException) e).getIntent();
startActivityForResult(intent, 10098);
} else if (e instanceof GooglePlayServicesAvailabilityException) {
int statusCode = ((GooglePlayServicesAvailabilityException) e)
.getConnectionStatusCode();
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(statusCode, getActivity(), 10099);
dialog.show();
}
}
});
}
}
你必须在谷歌播放控制台中注册你的应用程序才能成功获得代币。还要确保您的应用程序中设置了播放服务。
要在谷歌云控制台注册您的Android应用程序:
- 访问谷歌云控制台
- 如果您有一个现有的项目,要向其中添加Android应用程序,请选择该项目。否则,单击顶部的"创建项目",输入项目名称和ID,然后单击"创建"。注意:您为项目提供的名称是在"已连接应用程序"列表中的"谷歌设置"应用程序中显示给用户的名称
- 在左侧导航中,选择API&授权
- 通过将"状态"设置为"开",启用要使用的API
- 在左侧导航中,选择Credentials
- 单击"创建新客户端ID"或"创建适用于您的应用程序的新密钥">
- 填写您的Android应用程序详细信息,完成出现的表格。要获取应用程序的SHA1指纹,请在终端中运行以下命令:
keytool -exportcert -alias <keystore_alias> -keystore <keystore_path> -list -v
例如,您在Eclipse中使用调试密钥,则命令如下所示:keytool -exportcert -alias androiddebugkey-keystore ~/.android/debug.keystore -list -v
然后密钥库密码为"android"> - 单击"创建">
有关详细信息:https://developer.android.com/google/auth/http-auth.html
这个库可能会让您更轻松:https://github.com/Hafiz-Waleed-Hussain/EasySocial
此外,您还可以检查实际实现的源代码。