通过Google sign在Android上发布/订阅



我想在我的Android应用程序中使用Pub/Sub。主要问题是我不能在项目中使用creds.json。相反,我想使用身份验证/授权,就像我使用Gmail API时那样。也许有人知道怎么做,或者可以告诉我这是不可能的。

让我解释一下我有什么和我想要什么。

我有一个电子邮件客户端,使用Gmail API与消息工作。我使用Google Sign进行身份验证。

现在,为了检查新消息,我使用CoroutineWorker,它使用PeriodicWorkRequest执行。

基于文档Periodic work has a minimum interval of 15 minutes.,但是我想更频繁地接收更新,不要做很多请求。

我发现Gmail API可以使用推送通知。

我已经做了准备,我可以通过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")
}
}

通过Android设备订阅Cloud Pub/Sub将被视为反模式。正如您所指出的,身份验证模型不利于使用Google sign-on进行身份验证。此外,Pub/Sub中的资源数量限制(每个主题或每个项目10,000个订阅)意味着您只能支持那么多设备/用户。

相反,您希望将Pub/Sub订阅连接到Firebase Cloud Messaging以将通知发送到最终用户设备。您可以在消息发布到主题时触发函数,然后向设备发送通知。

最新更新