Pub/Sub на Android через вход через Google

Я хочу использовать 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")
      }
    }


0
0
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Подписка на Cloud Pub/Sub через устройства Android будет считаться антишаблоном. Как вы заметили, модель аутентификации не способствует использованию входа в Google для аутентификации. Кроме того, ограничения на количество ресурсов в Pub/Sub (10 000 подписок на тему или проект) означают, что вы сможете поддерживать только такое количество устройств/пользователей.

Вместо этого вы захотите подключить подписку Pub/Sub к Firebase Cloud Messaging , чтобы отправлять уведомления на устройства конечных пользователей. Вы можете активировать функцию, когда сообщение публикуется в теме, а затем отправлять уведомление на устройство.

Спасибо за помощь! Я собираюсь исследовать этот путь.

Den 12.04.2023 12:22

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