INVALID_ARGUMENT:请求包含无效参数

问题描述 投票:0回答:1

我正在尝试通过 firebase 从节点向 ios 设备发送推送通知。

这就是我所做的。

  1. 使用
    await messaging().getAPNSToken();
  2. 在应用程序中生成 APNSToken
  3. 将token发送到后端保存。在存储令牌之前...
  4. 使用以下函数将其转换为 FCM 令牌
  5. 然后使用新的 FCM 令牌发送通知,如下所示
  6. 我得到的回复如下所示。
export const convertAPNSToFCMToken = async token => {
  const fcmMessage = {
    application: 'com.xxxx.xxxx',
    sandbox: false,
    apns_tokens: [token]
  }

  const options = {
    headers: {
      Authorization: `Bearer ${accessToken}`,
      access_token_auth: true
    }
  }

  try {
    const { data } = await axios.post('https://iid.googleapis.com/iid/v1:batchImport', fcmMessage, options)
    return data.results[0].registration_token
  } catch (error) {
    winston.error('Unable to send message to Firebase')
    winston.error(error)
  }
}

这是尝试发送通知的方法

const sendFCMMessage = async ({ accessToken = '', fcmToken = '', title = '', body = '' }) => {
  try {
    const fcmMessage = JSON.stringify({
      message: {
        data: {},
        notification: {
          title: title,
          body: body
        },
        token: fcmToken
      }
    })

    const options = {
      hostname: 'fcm.googleapis.com',
      path: `/v1/projects/${process.env.GOOGLE_SERVICE_ACCOUNT_PROJECT_ID}/messages:send`,
      method: 'POST',
      headers: {
        Authorization: `Bearer ${accessToken}`
      }
    }

    const request = https.request(options, resp => {
      resp.setEncoding('utf8')
      resp.on('data', data => {
        winston.info('Message sent to Firebase for delivery, response:')
        winston.info(data)
      })
    })

    request.on('error', err => {
      winston.error('Unable to send message to Firebase')
      winston.error(err)
    })

    request.write(fcmMessage)
    request.end()
  } catch (e) {
    winston.error(e.message)
    return Promise.reject(e)
  }
}

我收到以下回复

{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.FcmError",
        "errorCode": "INVALID_ARGUMENT"
      },
      {
        "@type": "type.googleapis.com/google.firebase.fcm.v1.ApnsError",
        "statusCode": 400,
        "reason": "BadDeviceToken"
      }
    ]
  }
}

注:

  • 我生成了所有必需的身份验证数据并将其链接到 Firebase 消息控制台,如下所示

enter image description here

javascript react-native firebase-cloud-messaging react-native-firebase
1个回答
0
投票

三月以来还没人回复?现在很多人都面临这个问题。我向我的 iOS 设备发送通知,突然发生这种情况,然后令牌被取消注册。现在应用程序必须再次打开并获取通知令牌并将通知发送到新令牌。

其他线程中的某人建议您使用 Biuld Settings > Lagacy Build 构建应用程序。但我还没有尝试过,不知道这会如何影响它。

© www.soinside.com 2019 - 2024. All rights reserved.