Вызвать метод ниже, чтобы получить токен и учетную запись 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();
}
}
});
}
}
Чтобы получить токен, вам необходимо зарегистрировать свое приложение в игровой консоли Google. Также убедитесь, что у вас есть настройка игровых сервисов в вашем приложении.
Чтобы зарегистрировать свой Android приложение с помощью Google Cloud Console:
- Посетите Google Cloud Console.
- Если у вас есть существующий проект, к которому вы добавляете приложение для Android, выберите проект. В противном случае нажмите «Создать проект» вверху, введите имя и идентификатор проекта, затем нажмите «Создать». Примечание. Имя, которое вы указываете для проекта, - это имя, которое отображается пользователям в приложении «Настройки Google» в списке подключенных приложений.
- В левой части экрана выберите APIs & auth.
- Включите API, который вы хотите использовать, установив статус в положение ON.
- В левой части навигации выберите Учетные данные.
- Нажмите Создать новый идентификатор клиента или Создать новый ключ, подходящий для вашего приложения.
- Заполните форму, которая появляется, заполнив детали вашего Android-приложения. Чтобы получить SHA1 отпечатки пальцев для вашего приложения, выполните следующую команду в терминале:
keytool -exportcert -alias <keystore_alias> -keystore <keystore_path> -list -v
Например, вы используете отладочный ключ с Eclipse, то команда выглядит следующим образом: keytool -exportcert -alias androiddebugkey-keystore ~/.android/debug.keystore -list -v
Тогда пароль хранилища ключей «андроид».
- Нажмите «Создать».
Для получения дополнительной информации: https://developer.android.com/google/auth/http-auth.html
Это, похоже, установил ее. Но теперь я получаю еще одну ошибку. Несанкционированный 401.Я внедрил логин Google+ в действие, которое вызывается до того, на котором мне нужны письма. Что я сделал, чтобы получить разрешение? – ayushgp
Вы получаете токен? – Psypher
Нет. Я не получаю токен. Я использую знак google + и создаю ApiClient с помощью этого кода: 'Scope gmailreadonly = new Scope (« oauth2: googleapis.com/auth/gmail.readonly »); mGoogleApiClient = новый GoogleApiClient.Builder (это) .addConnectionCallbacks (это) .addOnConnectionFailedListener (это) .addApi (Plus.API) .addScope (Plus.SCOPE_PLUS_LOGIN) .addScope (gmailreadonly) .build(); 'Но это не работает. удалить аккаунт Google+ и реализовать этот метод? – ayushgp