我正在尝试通过 firebase 从节点向 ios 设备发送推送通知。
这就是我所做的。
await messaging().getAPNSToken();
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"
}
]
}
}
注:
三月以来还没人回复?现在很多人都面临这个问题。我向我的 iOS 设备发送通知,突然发生这种情况,然后令牌被取消注册。现在应用程序必须再次打开并获取通知令牌并将通知发送到新令牌。
其他线程中的某人建议您使用 Biuld Settings > Lagacy Build 构建应用程序。但我还没有尝试过,不知道这会如何影响它。