我正在 Android 上编写一个应用程序,该应用程序利用 Google pubsub,并且已经用 go 编写了相应的客户端。
请提前原谅我,因为这是我的第一个 Android 应用程序,也是我第一次使用 kotlin。 我已经用 Java 进行了编程,所以如果有什么看起来明显错误的地方,请提前道歉。
我已经阅读了文档,但陷入困境。
我遇到的问题源于初始化 pubsub 客户端。 我相信我的凭据 json 是与我的项目、主题等一起获取的。我遇到的问题是,我不认为我应该向项目添加更多依赖项,因为 google pubsub 示例不包含这些依赖项。 我不知道这个兔子洞有多远,但我认为 Google 的例子应该开箱即用:
我没有使用 gcloud 命令,但创建了一个credentials.json,它在我的 golang 应用程序中运行得很好。
相关位: 构建.gradle.kts
android {
packagingOptions {
resources.excludes.add("META-INF/*")
}
}
dependencies {
implementation(libs.googlePubSub)
implementation(libs.grpc)
implementation(libs.tls)
}
app/src/main/res/raw/credentials.json
gradle/libs.versions.toml
[versions]
googlePubSub = "1.134.2"
grpc = "1.68.1"
tls = "2.0.69.Final"`
[libraries]
googlePubSub = { group = "com.google.cloud", name = "google-cloud-pubsub", version.ref="googlePubSub"}
grpc = { group = "io.grpc", name = "grpc-netty", version.ref="grpc"}
tls = { group = "io.netty", name = "netty-tcnative-boringssl-static", version.ref="tls"}
问题出现在这里:
fun getPublisher(): Publisher {
return Publisher.newBuilder(getTopic()).setCredentialsProvider { credentials}.build()
}
fun getTopic(): TopicName {
val topic = TopicName.of(configuration.project, configuration.requestTopic)
val topicAdminSettings = TopicAdminSettings.newBuilder().setCredentialsProvider{ credentials }.build()
TopicAdminClient.create(topicAdminSettings).use { topicAdminClient -> topicAdminClient.createTopic(topic)}
return topic
}
我先添加了grpc库,然后添加了boringssl库,但这似乎不对。 我最近收到的错误(即使在添加了 Boringssl 库之后)是:
找不到 TLS ALPN 提供商;没有可用的 netty-tcnative、Conscrypt 或 Jetty NPN/ALPN
我必须指出,此时配置和凭据对象已正确填充。
我尝试遵循 Google pubsub Java 客户端的在线文档,并期望发布一条消息。 我还提到了一个示例项目,但这些库似乎已经过时了:
https://github.com/androidthings/weatherstation
编辑#1:
我更新了依赖项:
grpc-netty -> grpc-okhttp
并修改了包装:
resources.excludes.add("META-INF/*") -> resources.excludes.add("META-INF/INDEX.LIST") and resources.excludes.add("META-INF/DEPENDENCIES")
我现在面临的错误是应用程序没有连接到互联网。 它抱怨 pubsub.googleapis.com 无法在同一台机器上解析,ping 解析为 IP 地址。
编辑#2: 经过进一步调试,我发现我需要互联网权限。
编辑#3: Pub Sub 连接正常。
我的问题的解决方案确实是依赖。 我偶然发现过时的代码并且依赖关系不正确。
解决方案是: