Использование API GMail на Android без использования разрешения GET_ACCOUNTS

Просто небольшой фрагмент моего кода:

Инициализировать:

    mCredential = GoogleAccountCredential.usingOAuth2(
            getApplicationContext(), SCOPES)
            .setBackOff(new ExponentialBackOff());

Затем запускаю селектор:

startActivityForResult(mCredential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);

Затем в ActivityForResult

if (resultCode == RESULT_OK && data != null && data.getExtras() != null) {
                    String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
                    if (accountName != null) {
                        PersistentUtil.persistGmailName(this, accountName);
                        mCredential.setSelectedAccountName(accountName);
                        checkDataAccess();
                    }
                }

Где checkDataAccess:

java.lang.Thread thread = new java.lang.Thread(new Runnable() {
        @Override
        public void run() {
            HttpTransport transport = AndroidHttp.newCompatibleTransport();
            JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
            Gmail mService = new com.google.api.services.gmail.Gmail.Builder(
                    transport, jsonFactory, mCredential)
                    .setApplicationName(getResources().getString(R.string.app_name))
                    .build();

            try {
                Gmail.Users users = mService.users();
                Gmail.Users.Messages messages = users.messages();
                Gmail.Users.Messages.List me = messages.list("me");
                ListMessagesResponse temp = me.execute();
                // if no error is thrown then, we are good to go
                onGmailFinished();
                //                    parseMessageList(mService, temp);
            } catch (UserRecoverableAuthIOException e) {
                startActivityForResult(
                        ((UserRecoverableAuthIOException) e).getIntent(),
                        REQUEST_AUTHORIZATION);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });

    thread.start();

ПРОБЛЕМА

ListMessagesResponse temp = me.execute(); в конечном итоге вызовет метод getAccounts(), который ищет пользователя в учетных записях, настроенных на устройстве. Он вернет null, если разрешение GET_ACCOUNTS не предоставлено.

КАК я могу сделать так, чтобы я не зависел от разрешения GET_ACCOUNTS, каким-либо способом настроить учетную запись Gmail независимо от учетных записей устройства? Я не хочу запрашивать разрешение GET_ACCOUNTS.

Есть ли способ сделать это, или мне всегда нужно использовать intentChooser и впоследствии зависеть от разрешения GET_ACCOUNTS? :(

0
0
102
1

Ответы 1

В этом ТАК сообщение говорится, что лучше использовать Выбор учетной записи, в котором он возвращает намерение в Activity, который предлагает пользователю выбрать из списка учетных записей.

If your app has the GET_ACCOUNTS permission and there's only one account, you get it right away. If your app doesn't have it, or if there are more than one account, users get a prompt so they can authorize or not the action.

Ваше приложение должно включать Сервисы Google Play, но не требует никаких разрешений.

Базовый пример кода:

private static final int REQUEST_CODE_EMAIL = 1;
private TextView email = (TextView) findViewById(R.id.email);

// ...

try {
    Intent intent = AccountPicker.newChooseAccountIntent(null, null,
            new String[] { GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE }, false, null, null, null, null);
    startActivityForResult(intent, REQUEST_CODE_EMAIL);
} catch (ActivityNotFoundException e) {
    // TODO
}

// ...

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) {
        String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
        email.setText(accountName);
    }
}

Кажется, вы получаете только электронную почту ... я намерен получить доступ к учетным записям gmail пользователей

AndreiBogdan 19.12.2018 14:32

Да, вы можете попробовать это, чтобы получить учетную запись Gmail.

jess 20.12.2018 02:43

Другие вопросы по теме