Я хочу использовать Pub/Sub в своем приложении для Android. Основная проблема в том, что я не могу использовать creds.json в проекте. Вместо этого я хотел бы использовать аутентификацию/авторизацию, как я это делаю, когда использую Gmail API. Может быть, кто-то знает, как это сделать, или может сказать мне, что это невозможно.
Позвольте мне объяснить, что у меня есть и что я хотел бы иметь.
У меня есть почтовый клиент, который использует Gmail API для работы с сообщениями. Я использую Google Sign для аутентификации.
На данный момент для проверки новых сообщений я использую CoroutineWorker , который использует для выполнения PeriodicWorkRequest.
По документам Periodic work has a minimum interval of 15 minutes. Но хотелось бы чаще получать обновления и не делать много запросов.
Я обнаружил, что Gmail API может использовать Push-уведомления.
Я подготовился и теперь могу получать обновления через Pub/Sub. Мое приложение для Android может подписаться на обновления.
Работающий код выглядит так
implementation ('com.google.cloud:google-cloud-pubsub:1.123.7')
implementation 'io.grpc:grpc-okhttp:1.54.0'
GlobalScope.launch(Dispatchers.IO) {
try {
val subscriptionName = ProjectSubscriptionName.of("myproject", "my-sub")
val subscriber = Subscriber.newBuilder(subscriptionName,
MessageReceiver { message, _ ->
Log.d("PUBSUB", "message = ${message?.data?.toStringUtf8()}")
})
.setCredentialsProvider {
GoogleCredentials.fromStream(resources.openRawResource(R.raw.creds))
}
.build()
subscriber?.startAsync()?.awaitRunning()
subscriber?.awaitTerminated()
} catch (t: Throwable) {
t.printStackTrace()
Log.i("PUBSUB", t.message ?: "Something went wrong")
}
}
Подписка на Cloud Pub/Sub через устройства Android будет считаться антишаблоном. Как вы заметили, модель аутентификации не способствует использованию входа в Google для аутентификации. Кроме того, ограничения на количество ресурсов в Pub/Sub (10 000 подписок на тему или проект) означают, что вы сможете поддерживать только такое количество устройств/пользователей.
Вместо этого вы захотите подключить подписку Pub/Sub к Firebase Cloud Messaging , чтобы отправлять уведомления на устройства конечных пользователей. Вы можете активировать функцию, когда сообщение публикуется в теме, а затем отправлять уведомление на устройство.
Спасибо за помощь! Я собираюсь исследовать этот путь.