使用实时通讯时,使用云引擎 Hook做自定义离线消息推送,在ios对ios聊天时,是可以收到离线推送。但是如果是安卓对ios设备聊天时,ios无法收到离线推送。云引擎hook 使用的是官网给的demo,
main.js 如下
require("cloud/app.js");undefined> //var msign = require('cloud/msign');
var mchat = require('cloud/mchat');
//var muser = require('cloud/muser');//AV.Cloud.define("conv_sign", msign.convSign); //AV.Cloud.define("_messageReceived",mchat.messageReceived); AV.Cloud.define("_receiversOffline", mchat.receiversOffline); //AV.Cloud.define("_conversationAdd",mchat.conversationAdd); //AV.Cloud.define("_conversationRemove",mchat.conversationRemove); //AV.Cloud.define("_conversationStart",mchat.conversationStart); // //AV.Cloud.afterDelete('_Followee',muser.afterDeleteFollowee); //if(!__production){ // AV.Cloud.define("test",muser.unfollowTest); //}
mchat.js 如下
var mlog = require('cloud/mlog');
var muser = require('cloud/muser');
var util = require('util');
var mutil = require('cloud/mutil');undefined> var msgTypeText = -1;
var msgTypeImage = -2;
var msgTypeAudio = -3;
var msgTypeVideo = -4;
var msgTypeLocation = -5;
var msgTypeEmotion = 1;function messageReceived(req, res) { if (req.params.convId) { // api v2 try{ var pushMessage = getPushMessage(req.params); res.success({pushMessage: pushMessage}); } catch(err) { // json parse error res.success(); } } else { console.log("receiversOffline , conversation id is null"); res.success(); } } function getPushMessage(params) { var contentStr = params.content; var convid = params.convId; var json = { badge: "Increment", sound: "default", convid: convid //来支持点击弹框,跳转至相应对话 // ,"_profile": "dev" //设置证书,开发时用 dev,生产环境不设置 }; var msg = JSON.parse(contentStr); var msgDesc = getMsgDesc(msg); var userName = findOtherNameFormConversation(convid,params.offlinePeers[0]); if (userName) { json.alert = userName + ':' + msgDesc; } else { json.alert = msgDesc; } //此处设置iOS使用测试证书推送 // if (msg._lcattrs && msg._lcattrs.dev) { json._profile = "dev"; // } return JSON.stringify(json); } function findOtherNameFormConversation(convId,userId) { var q = new AV.Query('_Conversation'); q.equalTo ('objectId', convId); q.limit (1); query.find({ success: function(results) { // results is an array of AV.Object. }, error: function(error) { // error is an instance of AV.Error. } }); q.get(convId).then(function (conversation) { console.log('1--------------------------'+conversation); p.resolve('aaa'); console.log('1-1--------------------------'+p); }, function (error) { console.log('3--------------------------'+p); p.resolve(); }); console.log('2--------------------------'+p); return p; // var conversation = results[0]; // var convAttr = JSON.parse(conversation.attr); // var dict = convAttr[userId]; // userName = dict['username']; // return results.get('attr')+convId; } function getMsgDesc(msg) { var type = msg._lctype; if (type == msgTypeText) { return msg._lctext; } else if (type == msgTypeImage) { return "[图片]"; } else if (type == msgTypeAudio) { return "[语音]"; } else if (type == msgTypeLocation) { return msg._lctext; } else if (type == msgTypeEmotion){ return "[动态表情]"; } else if (type == msgTypeVideo) { return "[视频]"; } else { return "未知消息"; } } function receiversOffline(req, res) { if (req.params.convId) { // api v2 try{ // var pushMessage = getPushMessage(req.params); // res.success({pushMessage: pushMessage}); sendAPNSMessage(req,res); // console.log('4--------------------------'); } catch(err) { // json parse error // console.log('5--------------------------'+err); res.success(); } } else { console.log("receiversOffline , conversation id is null"); res.success(); } } function sendAPNSMessage(req, res){ var params = req.params; // console.log('6--------------------------'); var q = new AV.Query('_Conversation'); q.equalTo ('objectId', params.convId); q.limit (1); q.find({ success: function(results) { // results is an array of AV.Object. var dict = results[0].get('attr'); var username = dict[params.fromPeer]['username'] var pushMessage = getAPNSPushMessage(req.params,username); // console.log('1--------------------------'+params.offlinePeers[0]+'dsdsd'+); res.success({pushMessage: pushMessage}); }, error: function(error) { // error is an instance of AV.Error. // console.log('2--------------------------'); res.success(); } }); } function getAPNSPushMessage(params,userName) { var contentStr = params.content; var json = { badge: "Increment", sound: "default", convid: params.convId //来支持点击弹框,跳转至相应对话 // ,"_profile": "dev" //设置证书,开发时用 dev,生产环境不设置 }; var msg = JSON.parse(contentStr); var msgDesc = getMsgDesc(msg); if (userName) { json.alert = userName + ':' + msgDesc; } else { json.alert = msgDesc; } if (msg._lcattrs && msg._lcattrs.dev) { json._profile = "dev"; } return JSON.stringify(json); } function conversationStart(req,res){ console.log('conversationStart'); res.success(); } function conversationRemove(req,res){ console.log('conversationRemove'); res.success(); } function conversationAdd(req,res){ console.log('conversationAdd'); res.success(); } exports.messageReceived = messageReceived; exports.receiversOffline = receiversOffline; // used by main.js exports.getPushMessage = getPushMessage; exports.conversationStart=conversationStart; exports.conversationRemove=conversationRemove; exports.conversationAdd=conversationAdd;
-
创建时间
15年9月23日
-
最后回复
15年9月23日
-
1
回复
-
1.1K
浏览
-
1
用户