如何使用quickblox从javascript发送推送通知
How to send push notifications form javascript using quickblox
我正在尝试通过Quickblox从后端服务器发送推送通知消息。执行此操作的代码如下所示:
app.post('/requests', function(req, res) {
var mobileNumber = req.param('mobile_number');
if (typeof mobileNumber === 'undefined') {
return res.badRequest("Parameters missing: [mobile_number]");
}
var query = {
international_number: mobileNumber
}
User.findOne(query, function(err, user) {
if (err) {
return res.dbError(err);
}
if (!user) {
console.log("User not found");
return res.apiError("NOT_FOUND");
}
var request = new Request();
request.sender_id = req.user._id;
request.receiver_id = user._id;
request.status = 'pending';
request.save(function(err) {
if (err) {
return res.dbError(err);
}
var response = {};
response.image_url = user.image_url;
response.id = request._id;
// ¡TODO! Notify the end user -- Quickblox
QB.createSession(function(err, result) {
if (err) {
console.log(err);
return res.apiError();
}
console.log("**** SESSION CREATE ****")
console.log(result);
var params = {
login: req.user.qb_username,
password: req.user.qb_password
}
console.log("LOGIN PARAMS");
console.log(params);
QB.login(params, function(err, result) {
if (err) {
console.log(err);
return res.apiError();
}
console.log("**** USER LOGIN ****")
console.log(result);
var params = {
notification_type: 'push',
environment: 'production',
user : {
ids: user.qb_id
},
message: 'SSBsb3ZlIE0mTSdzISBFc3BlY2lhbGx5IHJlZCBvbmUh',
push_type: user.device.notification_channel
}
console.log("EVENTS CREATE PARAMS");
console.log(params);
QB.messages.events.create(params, function(err, result) {
if (err) {
console.log(err);
return res.apiError();
}
console.log("**** MESSAGE EVENT CREATE ****");
console.log(result);
console.log(result.event.subscribers_selector);
QB.messages.events.list(function(err, result) {
if (err) {
console.log(err);
return res.apiError();
}
console.log(result);
console.log("**** EVENTS LIST ****");
console.log(result.items);
res.apiSend(response);
});
});
});
});
});
});
});
请注意,我会在每次 Quickblox 请求后记录响应。所以QB.messages.events.create()之后的日志如下:
**** MESSAGE EVENT CREATE ****
{ event:
{ active: true,
application_id: 18113,
created_at: '2015-01-13T10:32:45Z',
date: null,
end_date: null,
event_type: 'one_shot',
id: 1809320,
message: 'data.message=SStsb3ZlK00lMjZNJTI3cyUyMStFc3BlY2lhbGx5K3JlZCtvbmUlMjE=',
name: null,
occured_count: 0,
period: null,
updated_at: '2015-01-13T10:32:45Z',
user_id: 2185263,
notification_channel: { name: 'gcm' },
subscribers_selector:
{ environment: 'production',
tags_query: null,
user_ids: [Object] } } }
当我使用 QB.messages.events.list() 列出事件时,我得到以下响应:
{ current_page: 1,
per_page: 10,
total_entries: 19,
items:
[ { event: [Object] },
{ event: [Object] },
{ event: [Object] },
{ event: [Object] },
{ event: [Object] },
{ event: [Object] },
{ event: [Object] },
{ event: [Object] },
{ event: [Object] },
{ event: [Object] } ] }
因此,它说消息队列中有 19 个条目,一切似乎都很好。但是,当我登录到我的 Quickblox 帐户并检查消息队列时,它始终为空,因此不会计划发送任何消息。另请注意,订阅显示订阅了推送通知服务(如"gcm"和"apns")的用户。谁能帮我找出为什么会发生这种情况?
- 您需要将消息编码为 base64。
- 您需要确保您的移动应用程序知道理解解码的消息。
例如
向安卓发送推送通知 qb_user_id: 20290(来自我 - 我的qb_user_id:12121):
function b64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);
}));
}
function send_push() {
var params = {
notification_type: 'push',
push_type: 'gcm',
user: {ids: [20290]},
environment: "production",
message: b64EncodeUnicode('{"message":"HELLO WORLD","user_id":12121,"device_type":"WEB","message_qb_id":"563a55a44cedaa83885724cf","message_type":"Text","send_status":"BeingProcessed","send_time":1446663588607}')
};
QB.messages.events.create(params, function(err, response) {
if (err) {
console.log("QB.messages.events.create::error:" +err);
} else {
console.log("QB.messages.events.create::response:" + response);
}
});
}
在此示例中,移动应用正在查找以下格式的消息:{"消息","user_id","device_type","message_qb_id","message_type","send_status","send_time"}
相关文章:
- 是否可以使用推送通知Windows 8 Metro应用程序's使用Javascript
- 如何安全地获取&使用Facebook应用程序访问令牌发送通知使用PHP&Javascript
- 使用Javascript向ID数组发送通知时出现Facebook访问令牌错误
- 带有XHR的Chrome推送通知(使用不带PHP的JavaScript)
- 通知Ajax/Javascript后台PHP已经完成
- 使用javascript输出样式通知
- Javascript浏览器通知不起作用
- Javascript+Pubnub聊天通知
- 无法从Web(JavaScript)QuickBlox发送推送通知
- javascript检查加载的URL并发出通知
- 如何在 javascript 中为推送通知提供音频播放文件路径
- 在 Objective-C 中侦听来自 UIWebView Javascript 的通知
- 是否可以在javascript或jquery中禁用“您已全屏”通知
- IOS 调用 javascript 通知函数
- 是否可以在桌面通知正文JavaScript中显示图标
- 如何使用quickblox从javascript发送推送通知
- Javascript 通知 - 最大图标大小
- 我希望更新未读消息的数量,并在用户收到新消息时播放通知声音.我正在使用PHP,MySql,Javascript
- Android Phonegap:当AsyncTask完成时通知javascript
- 如何通知javascript数据库中发生的事情