折腾了几天,终于搞定了安卓和ios下的个推透传推送,各种踩坑啊。
先来说说我想达到的目标,我要传送自定义的参数如文章id,然后实现页面的跳转。在安卓下,通过点击状态栏消息,跳转到指定id的页面,在ios下,分为2种情况,
1)app离线:推送的消息和安卓一样,在状态栏展现,通过点击实现跳转。
2)app在线:此时接收到的参数可以用一个confirm来询问是否跳转。
一、服务器端推送代码
首先来看看个推的推送模板,我是用php的。
function IGtTransmissionTemplateDemo(){
$template = new IGtTransmissionTemplate();
$template->set_appId(APPID);//应用appid
$template->set_appkey(APPKEY);//应用appkey
$template->set_transmissionType(1);//透传消息类型
$template->set_transmissionContent("测试离线ddd");//透传内容
//$template->set_duration(BEGINTIME,ENDTIME); //设置ANDROID客户端在此时间区间内展示消息
// 如下有两个推送模版,一个简单一个高级,可以互相切换使用。此处以高级为例,所以把简单模版注释掉。
// APN简单推送
// $apn = new IGtAPNPayload();
// $alertmsg=new SimpleAlertMsg();
// $alertmsg->alertMsg="";
// $apn->alertMsg=$alertmsg;
// $apn->badge=2;
// $apn->sound="";
// $apn->add_customMsg("payload","payload");
// $apn->contentAvailable=1;
// $apn->category="ACTIONABLE";
// $template->set_apnInfo($apn);
// APN高级推送
$apn = new IGtAPNPayload();
$alertmsg=new DictionaryAlertMsg();
$alertmsg->body="body";
$alertmsg->actionLocKey="ActionLockey";
$alertmsg->locKey="LocKey";
$alertmsg->locArgs=array("locargs");
$alertmsg->launchImage="launchimage";
// IOS8.2 支持
$alertmsg->title="水培喝水";
$alertmsg->titleLocKey="TitleLocKey";
$alertmsg->titleLocArgs=array("TitleLocArg");
$apn->alertMsg=$alertmsg;
$apn->badge=1;
$apn->sound="";
$apn->add_customMsg("payload","阿波罗度上市");
// $apn->contentAvailable=1;
$apn->category="ACTIONABLE";
$template->set_apnInfo($apn);
return $template;
}
二、推送参数
1)在线透传参数设置
$template->set_transmissionContent("测试离线ddd");这一行就是负责在线透传的,我们稍微改装下,填写入我们想要传送的自定义参数。
$template->set_transmissionContent('{"title":"文章标题","content":"正文内容","payload":{"id":"1","type":"新闻"}}');
2)离线透传参数设置
而 从 $apn = new IGtAPNPayload();这一行开始,构建的都是针对ios下app离线的推送
其中 $alertmsg->body="body"; 对应的是在线透传的content
$alertmsg->locKey="LocKey"; 对应的是在线透传的title
$alertmsg->title="水培喝水"; 对应的也是在线透传的title
然后 $apn->add_customMsg("payload","阿波罗度上市"); 这是用来传送自定义参数的,我们来改成我们想要的
$apn->add_customMsg("id","1");
$apn->add_customMsg("type","新闻");
三、客户端的解析
// 监听离线点击消息事件
plus.push.addEventListener("click", function(msg) {
var payload=(plus.os.name=='iOS')?msg.payload:JSON.parse(msg.payload);
pushGetRun(payload);
}, false);
// 监听在线消息事件
plus.push.addEventListener("receive", function(msg) {
if ( msg.payload ) {
if ( typeof(msg.payload)=="string" ) {
//alert( "payload(String): "+msg.payload );
} else {
var id = msg.payload.id;
var url = 'www/tpl/detail.html?id=' + id;
plus.nativeUI.confirm( "收到一条新消息,是否立即查看", function(e){
if(e.index==0){
mui.openWindow({
url: url,
id: 'notice' + id
});
}
}, "新消息通知", ["查看","忽略"] );
}
} else {
//alert( "payload: undefined" );
}
}, false);
});
function pushGetRun(payload) {
var id = payload.id;
var url = 'www/tpl/detail.html?id=' + id;
mui.openWindow({
url: url,
id: 'detail' + id
});
}
要注意的是在ios和安卓下,接收到的msg.payload解析不同,ios下是json数组,而安卓下却是string,需要转为json数组
22 个评论
要回复文章请先登录或注册
missfei
missfei
[已删除]
JusLink
风云杭州
HannibalSWX
6***@qq.com
跟哥
hoofa
1***@qq.com