机械师
机械师
  • 发布:2018-03-01 08:57
  • 更新:2018-03-14 13:42
  • 阅读:1665

ios创建本地消息

分类:HTML5+

相关的网站
推送开发指南
推送插件配置

plus.push.addEventListener("receive", function (msg) {  
    zMessageReceive(msg);  
}, false);  

//防止反复创建的函数  
var t = true;  
function zMessageReceive(msg){  
    if(msg && t){  
        t = false;  
        var data;  
        if(typeof (msg.payload) == 'string'){  
            data = JSON.parse(msg.payload);  
        }else{  
            data = msg.payload;  
        }  
        notificationMessage(data);  
    }else{  
        t = true;  
    }  
}  

//创建本地消息  
function notificationMessage(_msg){  
    var options = {  
        title: _msg.tTitle,  
        cover: true  
    };  
    var content = _msg.tContent;  
    _msg.local = "local" ;// 表明是本地创建的消息(看需求不一定要)  
    var jsonData = JSON.stringify(_msg);  
    plus.push.createMessage(content, jsonData, options);//创建本地消息  
}  

总结:
在线:只能响应receive,但消息中心无消息
不在线:消息中心有消息,且响应click事件

2018-03-01 08:57 负责人:无 分享
已邀请:
DCloud_App_Array

DCloud_App_Array

创建本地消息也会触发receive事件,这种逻辑需要避免触发死循环,如在消息中添加特殊字段:

// 监听Push消息   
    plus.push.addEventListener("receive", function(msg) {  
        console.log("receive: "+msg.payload);  
        var payload = msg.payload;  
        if(typeof(payload)=="string"){  
            payload = JSON.parse(msg.payload);  
        }  
        if(payload&&payload.local&&"local"!=payload.local){ // 判断是否为本地创建的消息  
            // 应用在前台运行时服务器推送的消息,这时候建议直接弹出提示框,而不是创建消息添加到通知栏  
            createPushMsg();  
        }else{// 本地创建的消息  
            // 不需要处理,如果再次创建本地消息则会引起死循环  
        }  
    }, false);  

// 创建本地消息  
function createPushMsg(){  
    console.log("createPushMsg");  
    var payload = {  
        data:"1234567890",  
        local:"local"   // 表明是本地创建的消息  
    }  
    plus.push.createMessage("我是本地创建的消息", JSON.stringify(payload));  
}
  • 机械师 (作者)

    谢谢,明白了

    2018-05-02 10:54

DCloud_App_Array

DCloud_App_Array

新版本已经修复过类似问题,请更新到最新版本确认是否还存在此问题。
如果还存在,请提供下使用的HBuilder版本号。

该问题目前已经被锁定, 无法添加新回复