如何使用quickblox从javascript发送推送通知

How to send push notifications form javascript using quickblox

本文关键字:通知 javascript 何使用 quickblox      更新时间:2023-09-26

我正在尝试通过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")的用户。谁能帮我找出为什么会发生这种情况?

  1. 您需要将消息编码为 base64。
  2. 您需要确保您的移动应用程序知道理解解码的消息。

例如

向安卓发送推送通知 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"}