如何使用 quickblox 从 javascript 发送推送通知
Posted
技术标签:
【中文标题】如何使用 quickblox 从 javascript 发送推送通知【英文标题】:How to send push notifications form javascript using quickblox 【发布时间】:2015-01-13 10:44:30 【问题描述】:我正在尝试从我的后端服务器通过 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”。谁能帮我看看为什么会这样?
【问题讨论】:
quickblox.com/developers/Messages#Messages_API - 你有没有:A)为用户创建了一个推送令牌,B)订阅了他们推送通知?如果没有可用的(订阅)用户可以将它们发送到,QB 不会将它们添加到队列中。 【参考方案1】:-
您需要将消息编码为 base64。
您需要确保您的移动应用能够理解解码后的消息。
例如,
发送推送通知到 android 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);
);
在此示例中,移动应用正在查找以下格式的消息: "message","user_id","device_type","message_qb_id","message_type","send_status","send_time"
【讨论】:
以上是关于如何使用 quickblox 从 javascript 发送推送通知的主要内容,如果未能解决你的问题,请参考以下文章
如何管理 quickblox 会话 Javascript SDK