Firebase Messaging偶尔会因内部错误而失败

时间:2020-08-12 17:58:13

标签: firebase-cloud-messaging

这周,我在通过Node.js库向我的iOS设备发送消息(代码是相同的,库版本是相同的)时,内部错误很多。

很难调试,因为有时它可以工作。当我放置一个for循环以发送10条消息时,我的设备将获得3-4。

FirebaseMessagingError: Internal error encountered.
>      at FirebaseMessagingError.FirebaseError [as constructor] (/node_modules/firebase-admin/lib/utils/error.js:42:28)
>      at FirebaseMessagingError.PrefixedFirebaseError [as constructor] (/node_modules/firebase-admin/lib/utils/error.js:88:28)
>      at new FirebaseMessagingError (/node_modules/firebase-admin/lib/utils/error.js:254:16)
>      at Function.FirebaseMessagingError.fromServerError (/node_modules/firebase-admin/lib/utils/error.js:287:16)
>      at Object.createFirebaseError (/node_modules/firebase-admin/lib/messaging/messaging-errors.js:34:47)
>      at FirebaseMessagingRequestHandler.buildSendResponse (/node_modules/firebase-admin/lib/messaging/messaging-api-request.js:119:47)
>      at /node_modules/firebase-admin/lib/messaging/messaging-api-request.js:94:30
>      at Array.map (<anonymous>)
>      at /node_modules/firebase-admin/lib/messaging/messaging-api-request.js:93:30
>      at processTicksAndRejections (internal/process/task_queues.js:97:5) {
>    errorInfo: {
>      code: 'messaging/internal-error',
>      message: 'Internal error encountered.'
>    },
>    codePrefix: 'messaging'
>  } 

我尝试更改auth密钥,但仍然出现错误。

代码很简单

import * as admin from 'firebase-admin'
admin.initializeApp()
async function sendPushNotification(
  tokens: string[],
  title: string,
  body: string
): Promise<admin.messaging.BatchResponse> {
  console.log('sending %s to %d devices', body, tokens.length)
  const message = {
    notification: {
      title: title,
      body: body,
    },
    tokens: tokens,
    apns: {
      payload: {
        aps: {
          sound: 'default',
        },
      },
    },
  }
  return admin.messaging().sendMulticast(message)
}

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题:node.js firebase admin SDK向iOS发送通知有时因500 / ISE而失败。

它似乎特定于iOS,或者至少在iOS上更常见,因为在Android开发过程中我从未遇到过这个问题。我联系了Firebase支持人员,这是他们所说的话:

内部服务器错误通常是由于超时引起的。无法避免一些小问题,这就是为什么我们建议开发人员实现指数退避重试机制的原因。您可以参考此StackOverflow discussion,以获取有关重试后补偿和指数补偿的更多信息。

无论如何,在我这方面建立一些重试支持似乎是一个好主意。我以前从未使用过它,但是我喜欢npm上的凤头鹦鹉模块的外观。我计划继续使用自述文件开头给出的retryWithBreaker示例,只是将退避尝试和断路器设置得更高,也许分别是5和20。

相关问题