Я следовал QUICKSTART пример из Google для настройки API GMail: https://developers.google.com/gmail/api/quickstart/androidGMail API предоставления разрешений До UserRecoverableAuthUIException
Мое приложение успешно запрашивает разрешение GET_ACCOUNTS и позволяет пользователю выбрать его/ее аккаунта Gmail. Выбранная учетная запись сохраняется в SharedPreferences для последующего доступа.
Через IntentService мое приложение отправляет электронное письмо. Я выполнил следующие инструкции: https://developers.google.com/gmail/api/guides/sending и включил библиотеки activ.jar, Additional.jar и mail.jar по мере необходимости. Когда я отправить почту с ниже код, я получаю UserRecoverableAuthUIException
:
message = service.users().messages().send(userId, message).execute();
Когда я ловлю исключение, получить намерение хранящийся за исключением, и начать намерение как новый вид деятельности, я показал диалог давая мне возможность разрешить мое приложение для отправки электронной почты с моим счетом GMail:
После нажатия кнопки «Разрешить» в этом диалоге, мое приложение отправляет электронную почту без каких-либо дополнительных вопросов. Мое приложение также появляется на странице разрешений моей учетной записи Google в Интернете, в котором говорится, что у него есть разрешение на отправку электронной почты.
Есть ли способ запустить это диалоговое окно вручную, когда я впервые получаю имя учетной записи пользователя, а не ожидаю возникновения исключения?
UPDATE
Я был в состоянии извлечь действия и данные, хранящиеся в намерении, если это помогает любому:
- действия: com.google.android.gms.ui .UNPACKING_REDIRECT
- данные: цель: //com.google.android.gms.auth.uiflows.common/KEY
где KEY - это серия символов, возможно связанных с моей учетной записью или являющихся токеном.
EDIT:
Ниже приведен код для создания объекта по проверке полномочий и запуска счета сборщика деятельность, я использую:
private GoogleAccountCredential mCredential;
private static final String[] SCOPES = { GmailScopes.GMAIL_COMPOSE };
Внутри конструктора:
mCredential = GoogleAccountCredential.usingOAuth2(
getApplicationContext(), Arrays.asList(SCOPES))
.setBackOff(new ExponentialBackOff());
Где я могу получить счёт:
private void chooseGMailAccount() {
String accountName = this.getSharedPreferences(getString(R.string.shared_pref_main),
Context.MODE_PRIVATE)
.getString(getString(R.string.srd_pref_gmail_account), null);
if (accountName != null) {
mCredential.setSelectedAccountName(accountName);
configureGMailAPI();
} else {
startActivityForResult(
mCredential.newChooseAccountIntent(),
REQUEST_ACCOUNT_PICKER);
}
}
Попробуйте отправить письмо во время регистрации i.e после того, как пользователь выберет учетную запись. В этот момент он будет перехватывать исключение, как только вы получите это исключение, покажите это всплывающее окно. После этого пользователя хорошо идти. Я думаю, нет прямого способа вызвать это всплывающее окно. В соответствии с https://developers.google.com/drive/android/auth. Авторизация происходит в ответ на получение ошибки при отправке запроса. Ваше приложение должно быть подготовлено, чтобы поймать UserRecoverableAuthIOException. Это означает, что пользователю нужно – avinash
Невероятно, что вы не можете инициировать это напрямую. Я чувствую, что это будет единственный путь в этот момент. Вместо отправки электронной почты я мог бы попытаться создать и удалить пустой черновик. Я не смогу реализовать это до конца этой недели, но я буду обновлять исходное сообщение с результатами. – Programmer001