Firebase admin sdk java 客户端突然开始 return 401 错误,状态代码 "unknown-error"
Firebase admin sdk java client suddenly started to return 401 error with status code "unknown-error"
我正在使用 firebase admin sdk 推送移动通知(firebase 云消息传递)。我已经成功地设置了它并且它在 google 云 kubernetes 引擎上工作了大约一年。然后它停止工作。这是我在后端收到的堆栈跟踪:
com.google.firebase.messaging.FirebaseMessagingException: Unexpected HTTP response with status: 401; body: null
at com.google.firebase.messaging.FirebaseMessagingClientImpl.newException(FirebaseMessagingClientImpl.java:307) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessagingClientImpl.createExceptionFromResponse(FirebaseMessagingClientImpl.java:212) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessagingClientImpl.send(FirebaseMessagingClientImpl.java:128) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessaging.execute(FirebaseMessaging.java:139) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessaging.execute(FirebaseMessaging.java:136) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.internal.CallableOperation.call(CallableOperation.java:36) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessaging.send(FirebaseMessaging.java:106) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessaging.send(FirebaseMessaging.java:90) ~[firebase-admin-6.12.1.jar!/:na]
来自 FirebaseMessagingException 的状态代码是 unknown-error
。我正在使用 gradle 依赖项 com.google.firebase:firebase-admin:6.12.1
.
我的 FirebaseApp 初始化服务器代码(kotlin):
val credentials = GoogleCredentials
.fromStream(FileInputStream(firebaseAppCredentials))
.createScoped(Arrays.asList("https://www.googleapis.com/auth/firebase.messaging"))
val options = FirebaseOptions.builder()
.setCredentials(credentials)
.build()
val firebaseApp = FirebaseApp.initializeApp(options)
我已验证 firebaseAppCredentials
包含 firebase service account 文件的路径。
这是发送代码(kotlin):
val message = Message.builder()
.setNotification(notification)
.setToken(registrationToken)
.build()
FirebaseMessaging.getInstance(firebaseApp).send(message)
你能帮忙看看如何修复它吗?
我已经实现了原始协议(原始 http 请求)并且它开始工作了。由于某些原因,Firebase Admin SDK java 库未在 http 请求中使用身份验证令牌。我怀疑这与我已将 GOOGLE_APPLICATION_CREDENTIALS evn var 配置为 gcloud 项目的服务帐户有关,但 firebase 应用程序是使用 firebase 项目的服务帐户初始化的。这是故意的,我正在使用多个 gcloud 项目,但对于 FCM 只使用了一个项目。
看起来像 com.google.firebase:firebase-admin:6.12.1
中的一些 bug/feature 并且仅在云环境中复制。
我正在使用 firebase admin sdk 推送移动通知(firebase 云消息传递)。我已经成功地设置了它并且它在 google 云 kubernetes 引擎上工作了大约一年。然后它停止工作。这是我在后端收到的堆栈跟踪:
com.google.firebase.messaging.FirebaseMessagingException: Unexpected HTTP response with status: 401; body: null
at com.google.firebase.messaging.FirebaseMessagingClientImpl.newException(FirebaseMessagingClientImpl.java:307) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessagingClientImpl.createExceptionFromResponse(FirebaseMessagingClientImpl.java:212) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessagingClientImpl.send(FirebaseMessagingClientImpl.java:128) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessaging.execute(FirebaseMessaging.java:139) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessaging.execute(FirebaseMessaging.java:136) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.internal.CallableOperation.call(CallableOperation.java:36) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessaging.send(FirebaseMessaging.java:106) ~[firebase-admin-6.12.1.jar!/:na]
at com.google.firebase.messaging.FirebaseMessaging.send(FirebaseMessaging.java:90) ~[firebase-admin-6.12.1.jar!/:na]
来自 FirebaseMessagingException 的状态代码是 unknown-error
。我正在使用 gradle 依赖项 com.google.firebase:firebase-admin:6.12.1
.
我的 FirebaseApp 初始化服务器代码(kotlin):
val credentials = GoogleCredentials
.fromStream(FileInputStream(firebaseAppCredentials))
.createScoped(Arrays.asList("https://www.googleapis.com/auth/firebase.messaging"))
val options = FirebaseOptions.builder()
.setCredentials(credentials)
.build()
val firebaseApp = FirebaseApp.initializeApp(options)
我已验证 firebaseAppCredentials
包含 firebase service account 文件的路径。
这是发送代码(kotlin):
val message = Message.builder()
.setNotification(notification)
.setToken(registrationToken)
.build()
FirebaseMessaging.getInstance(firebaseApp).send(message)
你能帮忙看看如何修复它吗?
我已经实现了原始协议(原始 http 请求)并且它开始工作了。由于某些原因,Firebase Admin SDK java 库未在 http 请求中使用身份验证令牌。我怀疑这与我已将 GOOGLE_APPLICATION_CREDENTIALS evn var 配置为 gcloud 项目的服务帐户有关,但 firebase 应用程序是使用 firebase 项目的服务帐户初始化的。这是故意的,我正在使用多个 gcloud 项目,但对于 FCM 只使用了一个项目。
看起来像 com.google.firebase:firebase-admin:6.12.1
中的一些 bug/feature 并且仅在云环境中复制。