Android: чтение текста сообщения Gmail из службы с помощью Gmail api - PullRequest
0 голосов
/ 07 марта 2020

Что я хочу от службы, я хочу прочитать тело сообщения gmail, когда пришло уведомление gmail. Когда приходит уведомление Gmail, возникает тревога, и я получаю полный текст сообщения в alarmReceiver.

Я получил быстрый запуск android здесь gsuits api: https://developers.google.com/gsuite/guides/android. Но там описывается только около Android Sdk и зависимостей. Я не нашел всю процедуру захвата тела Gmail.

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:25.0.1'
compile 'com.google.android.gms:play-services-auth:15.0.1'
compile 'pub.devrel:easypermissions:0.3.0'
compile('com.google.api-client:google-api-client-android:1.23.0') {
    exclude group: 'org.apache.httpcomponents'
}
compile('com.google.apis:google-api-services-<API>-<VERSION>') {
    exclude group: 'org.apache.httpcomponents'
}}

После этого, какова пошаговая процедура, которую я могу получить / получить тело gmail в своем приложении android?

1 Ответ

1 голос
/ 07 марта 2020

Обновление: расширенная версия, если кому-то нужна (Средняя): https://shorturl.at/zKQR7


Сначала вам необходимо убедиться, что вы прошли аутентификацию с помощью Google. Вы можете сделать это с помощью Firebase Auth (перед использованием вам нужно будет посмотреть, как он настроен, есть хорошая документация):

            val providers = arrayListOf(
                AuthUI.IdpConfig.GoogleBuilder().build()
            )

            startActivityForResult(
                AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setAvailableProviders(providers)
                    .build(),
                RQ_FIREBASE_AUTH
            )

После аутентификации вы можете использовать FirebaseAuth.getInstance().currentUser.

Следующим шагом будет настройка службы Gmail:

            val credential = GoogleAccountCredential.usingOAuth2(
                applicationContext, listOf(GmailScopes.GMAIL_LABELS, GmailScopes.GMAIL_READONLY)
            )
                .setBackOff(ExponentialBackOff())
                .setSelectedAccountName(FirebaseAuth.getInstance().currentUser?.email)

            val service = Gmail.Builder(
                NetHttpTransport(), AndroidJsonFactory.getDefaultInstance(), credential
            )
                .setApplicationName("YourAppName")
                .build()

Обратите внимание, что вышеизложенное, конечно, не готово к работе.

Наконец, вот часть для чтения:

val messageRead = service.users().messages()?.get(FirebaseAuth.getInstance().currentUser?.email, message?.id)?.setFormat("raw")?.execute()

Таким образом, вы можете получить представление о теле вашего сообщения, как это messageRead?.snippet

Однако следует отметить две неочевидные вещи:

  1. Вы должны ожидать и обрабатывать UserRecoverableAuthIOException исключение. В этот момент пользователь должен явно разрешить вашему приложению выполнять определенные действия с сообщениями

  2. Все эти execute вызовы не обрабатываются в основном потоке.

Надеюсь, это поможет! (извините, у меня нет времени, чтобы написать подробные инструкции).

...