Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用quickblox从javascript发送推送通知_Javascript_Node.js_Push Notification_Quickblox - Fatal编程技术网

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

如何使用quickblox从javascript发送推送通知,javascript,node.js,push-notification,quickblox,Javascript,Node.js,Push Notification,Quickblox,我正在尝试从后端服务器通过Quickblox发送推送通知消息。执行此操作的代码如下所示: app.post('/requests', function(req, res) { var mobileNumber = req.param('mobile_number'); if (typeof mobileNumber === 'undefined') { return res.badRequest("Parameters missing: [mobile

我正在尝试从后端服务器通过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);

                        });
                    });
                });
            });
        });
    });
});
**** 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] } } }
请注意,我在记录每个Quickblox请求之后的响应。因此,QB.messages.events.create之后的日志如下所示:

    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);

                        });
                    });
                });
            });
        });
    });
});
**** 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。 您需要确保您的移动应用程序能够理解解码的消息。 比如说,

正在向android qb_用户id:20290发送推送通知 我的qb_用户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}

-您是否:A为用户创建了推送令牌,B为用户订阅了推送通知?如果没有可用的订阅用户将其发送到,QB不会将其添加到队列中。