Gmail API:使用令牌检索进行身份验证
Gmail API: Authentication using token retrieval
关于使用OAuth2.0 进行身份验证,我已经阅读了整篇文章。
但是我没有找到合适的方法在 android 应用程序上执行此操作。请建议一种获取访问令牌的方法,以便我可以构建 Gmail 服务对象并访问收件箱或任何其他方法。
这是他们给出的例子 link:
GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
Plus plus = new Plus.builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), credential)
.setApplicationName("Google-PlusSample/1.0")
.build();
这个库可能会让你更容易:
https://github.com/Hafiz-Waleed-Hussain/EasySocial
此外,您还可以查看实际实现的来源。
调用以下方法获取令牌和移动设备中使用的google帐户。此方法首先检索您手机中的 google 帐户设置,然后检索令牌。
您可以使用首选项保存令牌和帐户名以备后用,这样您就不必每次都检索令牌。
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();
}
}
下面class是用来获取token的
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();
}
}
});
}
}
您必须在 google 游戏控制台中注册您的应用才能成功获取令牌。还要确保您在应用中设置了播放服务。
要使用 Google Cloud Console 注册您的 Android 应用程序:
- 访问 Google 云端控制台。
- 如果您有要向其添加 Android 应用程序的现有项目,则 select 该项目。否则,单击顶部的创建项目,输入您的项目名称和 ID,然后单击创建。
注意:您为项目提供的名称是在已连接应用列表的 Google 设置应用中向用户显示的名称。
- 在左侧导航中,select APIs & auth.
- 通过将“状态”设置为“开启”来启用您想要使用的API。
- 在左侧导航中,select 凭据。
- 根据您的应用点击创建新客户端 ID 或创建新密钥。
- 通过填写您的 Android 应用详细信息来完成显示的表格。
要为您的应用程序获取 SHA1 指纹,运行 在终端中执行以下命令:
keytool -exportcert -alias <keystore_alias> -keystore <keystore_path> -list -v
例如,您在 Eclipse 中使用调试密钥,则命令如下所示:
keytool -exportcert -alias androiddebugkey-keystore ~/.android/debug.keystore -list -v
那么keystore密码就是"android".
- 单击创建。
更多信息:https://developer.android.com/google/auth/http-auth.html
关于使用OAuth2.0 进行身份验证,我已经阅读了整篇文章。 但是我没有找到合适的方法在 android 应用程序上执行此操作。请建议一种获取访问令牌的方法,以便我可以构建 Gmail 服务对象并访问收件箱或任何其他方法。
这是他们给出的例子 link:
GoogleCredential credential = new GoogleCredential().setAccessToken(accessToken);
Plus plus = new Plus.builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), credential)
.setApplicationName("Google-PlusSample/1.0")
.build();
这个库可能会让你更容易: https://github.com/Hafiz-Waleed-Hussain/EasySocial
此外,您还可以查看实际实现的来源。
调用以下方法获取令牌和移动设备中使用的google帐户。此方法首先检索您手机中的 google 帐户设置,然后检索令牌。 您可以使用首选项保存令牌和帐户名以备后用,这样您就不必每次都检索令牌。
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();
}
}
下面class是用来获取token的
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();
}
}
});
}
}
您必须在 google 游戏控制台中注册您的应用才能成功获取令牌。还要确保您在应用中设置了播放服务。
要使用 Google Cloud Console 注册您的 Android 应用程序:
- 访问 Google 云端控制台。
- 如果您有要向其添加 Android 应用程序的现有项目,则 select 该项目。否则,单击顶部的创建项目,输入您的项目名称和 ID,然后单击创建。 注意:您为项目提供的名称是在已连接应用列表的 Google 设置应用中向用户显示的名称。
- 在左侧导航中,select APIs & auth.
- 通过将“状态”设置为“开启”来启用您想要使用的API。
- 在左侧导航中,select 凭据。
- 根据您的应用点击创建新客户端 ID 或创建新密钥。
- 通过填写您的 Android 应用详细信息来完成显示的表格。
要为您的应用程序获取 SHA1 指纹,运行 在终端中执行以下命令:
keytool -exportcert -alias <keystore_alias> -keystore <keystore_path> -list -v
例如,您在 Eclipse 中使用调试密钥,则命令如下所示:keytool -exportcert -alias androiddebugkey-keystore ~/.android/debug.keystore -list -v
那么keystore密码就是"android". - 单击创建。
更多信息:https://developer.android.com/google/auth/http-auth.html