- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我收到此错误:使用 gcm 推送通知时接收者 key “registrationTokens”的假值。
您可以在下面找到我的代码:
Device.find({ user: { $in: users }}, function (err, devices) {
if (err) {
logger.error('500 ' + err)
return res.status(500).json({
code: config.errorCode.status500.code,
message: config.errorCode.status500.message
})
}
var androidRegTokens = []
var iOSReqTokens = []
for (var i = 0; i < devices.length; i++) {
if (devices[i].platform == 'Android') {
androidRegTokens.push(devices[i].deviceToken)
} else {
iOSReqTokens.push(devices[i].deviceToken)
}
}
if (androidRegTokens.length > 0) {
gcmPush('Notification is sent.', androidRegTokens)
}
if (iOSReqTokens.length > 0) {
apnsPush('Notification is sent.', iOSReqTokens)
}
return res.json({ msg: 'Operation succeed.'})
})
函数 gcmPush('Notification is sent.', androidRegTokens) 的主体是:
this.sender.send(message, { registrationTokens: deviceTokens }, function (err, response) {
if (err) {
console.error(err)
}else {
console.log(response)
}
})
有谁知道我的代码有什么问题吗?起初推送通知工作得很好,但每次我调用该服务时都会发生此错误。
编辑:
感谢 Luiz Fernando,我已经解决了这个问题。问题在于函数:
gcmPush('Notification is sent.', androidRegTokens)
我忘记添加作为构造函数一部分的标题:
function GcmPush (title, message, deviceTokens) {
this.sender = new gcm.Sender(config.gcmSender)
this.sendPushNotification(title, message, deviceTokens)
}
最佳答案
deviceTokens 对象是一个假值,它可以是:null、undefined、0、''、NaN、false。
也许发生这种情况是因为您正在填充嵌套在异步操作中的 iOSReqTokens 和 androidRegTokens (看起来 Device.find 是异步的)。因此,Device.find 的回调和 for 循环发生在不同的时间。也许,for 循环是在响应之后发生的,所以这个响应将是未定义的(确实是)。
所以,你需要使用一些异步控制流库,比如Promise或Async并确保操作顺序正确。
另外,您在哪里使用推送的注册?
关于node.js - 这个错误: Falsy value for recipient key 'registrationTokens' 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908390/
我收到此错误:使用 gcm 推送通知时接收者 key “registrationTokens”的假值。 您可以在下面找到我的代码: Device.find({ user: { $in: users }
当我尝试使用 Firestore 获取数据时,出现上述错误 - 我正在尝试从数据库检索 token ,以便可以发送消息: exports.getUsers = functions.https.onRe
我是一名优秀的程序员,十分优秀!