Android Gmail API:使用令牌检索的身份验证
关于使用OAuth2.0进行身份验证,我已经阅读了整篇文章。 但我没有找到一个合适的方法在android应用程序上实现这一点。请建议一种获取访问令牌的方法,以便我可以构建Gmail服务对象并访问收件箱或任何其他方法 这是他们在本节中给出的示例:Android Gmail API:使用令牌检索的身份验证,android,google-api,gmail,Android,Google Api,Gmail,关于使用OAuth2.0进行身份验证,我已经阅读了整篇文章。 但我没有找到一个合适的方法在android应用程序上实现这一点。请建议一种获取访问令牌的方法,以便我可以构建Gmail服务对象并访问收件箱或任何其他方法 这是他们在本节中给出的示例: 此库可能会使您更轻松: 此外,您还可以检查源代码以了解实际实现。此库可能会使您更容易: 此外,您还可以检查源代码以了解实际实现。此库可能会使您更容易: 此外,您还可以检查源代码以了解实际实现。此库可能会使您更容易: 此外,您还可以检查源代码的实际
此库可能会使您更轻松:
此外,您还可以检查源代码以了解实际实现。此库可能会使您更容易:
此外,您还可以检查源代码以了解实际实现。此库可能会使您更容易:
此外,您还可以检查源代码以了解实际实现。此库可能会使您更容易:
此外,您还可以检查源代码的实际实现。调用以下方法以获取移动应用中使用的令牌和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();
}
}
下面的类用于获取令牌
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();
}
}
});
}
}
私有类GetToken扩展了异步任务{
语境;
字符串mScope、mEmail、token;
GetToken(上下文、字符串范围、字符串电子邮件){
this.context=上下文;
this.mScope=范围;
this.mEmail=电子邮件;
}
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
token=GoogleAuthUtil.getToken(上下文、mEmail、mScope);
//使用首选项保存令牌供以后使用,或者在此处使用令牌做任何好事
Log.v(“ranjapp”,“Token是”+Token);
}捕获(UserRecoverableAuthe异常){
手部异常(e);
}捕获(GoogleAuthEx){
手部异常(ex);
}捕获(例外e){
//显示错误对话框
}
返回null;
}
无效句柄异常(最终异常e){
getActivity().runOnUiThread(新的Runnable()){
@凌驾
公开募捐{
if(UserRecoverableAuthException的实例){
Intent Intent=((UserRecoverableAuthException)e).getIntent();
startActivityForResult(意向书,10098);
}else if(例如GooglePlayServicesAvailabilityException的实例){
int statusCode=((谷歌PlayServicesAvailabilityException)e)
.getConnectionStatusCode();
Dialog Dialog=GooglePlayServicesUtil.getErrorDialog(状态码,getActivity(),10099);
dialog.show();
}
}
});
}
}
您必须在google play console中注册您的应用程序才能成功获取令牌。另外,请确保在应用程序中设置了播放服务
要在谷歌云控制台上注册Android应用程序,请执行以下操作:
keytool-exportcert-alias-keystore-list-v
例如,您正在Eclipse中使用调试键,那么该命令如下所示:
keytool-exportcert-alias androiddebugkey密钥库~/.android/debug.keystore-list-v
然后密钥库密码是“android”有关更多信息:调用以下方法以获取移动应用中使用的令牌和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();
}
}
下面的类用于获取令牌
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();
}
}
});
}
}
私有类GetToken扩展了异步任务{
语境;
字符串mScope、mEmail、token;
GetToken(上下文、字符串范围、字符串电子邮件){
this.context=上下文;
this.mScope=范围;
this.mEmail=电子邮件;
}
@凌驾
受保护的Void doInBackground(Void…参数){
试一试{
token=GoogleAuthUtil.getToken(上下文、mEmail、mScope);
//使用首选项保存令牌供以后使用,或者在此处使用令牌做任何好事
Log.v(“ranjapp”,“Token是”+Token);
}捕获(UserRecoverableAuthe异常){
手部异常(e);
}捕获(GoogleAuthEx){
手部异常(ex);
}捕获(例外e){
//显示错误对话框
}
返回null;
}
无效句柄异常(最终异常e){
getActivity().runOnUiThread(新的Runnable()){
@凌驾
公开募捐{
if(UserRecoverableAuthException的实例){
Intent Intent=((UserRecoverableAuthException)e).getIntent();
startActivityForResult(意向书,10098);
}else if(例如GooglePlayServicesAvailabilityException的实例){
int状态代码=(