利用MUI+个推实现APP消息推送

从2015年7月开始使用MUI进行APP的开发,到现在已经有一个年头了。而以前做过的东西都没有整理过,以后会将自己遇到的坑整理下来。
这篇主要是讲利用MUI和集成的个推来实现APP的消息推送功能。
首先我得先赞一下个推的技术客服人员的服务态度真的好。遇到问题去找他们,直接将我拉到了一个讨论组,瞬间八个程序猿来帮你。这波我服。
Dcloud上关于个推的配置使用指南在此我是链接


MUI里对于接收push有两种监听事件
1、receive
2、click
下面分别介绍这两种监听的触发机制
对于IOS来说:当应用在线时,直接触发receive事件 。
当应用不在线时,是从苹果的APS发消息给终端,终端接收到消息会进入消息中心,点击该消息打开应用触发click事件。
对于Android来说:
首先android可以接收的消息类型很多,以下例子是就透传消息来说
android在接收透传消息时
1、如果该消息符合透传消息的格式 ([‘title’ => “通知标题”,’content’ => “通知内容” , ‘payload’ => “通知去干嘛这里可以自定义”]),无论应用是否在线,都会进入消息中心,点击该消息打开应用并触发click事件。
2、如果该消息不符合透传消息的格式,如果应用在线,会直接触发receive事件,如果应用不在线,则既不会在消息中心展示,也不会触发任何事件。


以下就是本人结合个推的API和项目中的实例来封装的一个类
项目是基于ThinkPHP3.2.3

<?php
namespace Common\Lib;
class IGeTui {private $host;private $appKey;private $appId;private $masterSecret;private $cid;//客户端标识private $deviceToken;private $igt;/*** 写在前面的话:* IOS建议使用透传消息模板来推送消息* android可以使用点击通知打开应用模板和透传消息模板* */public function __construct(){//导入个推的SDK文件vendor("IGeTui.IGt#Push");vendor("IGeTui.igetui.utils.AppConditions");//赋值$this -> host = 'http://sdk.open.api.igexin.com/apiex.htm';$this -> appKey = '';$this -> appId = '';$this -> masterSecret = '';$this -> cid = '';$this -> deviceToken = '';$this -> igt = new \IGeTui($this -> host , $this -> appKey , $this -> masterSecret);}/*** 2016-7-29* 推送给所有APP的用户(官方给的demo)* (这个没什么用,因为要分IOS和Android客户端推送的话,建议使用pushIGtMsgL())* */function pushMessageToApp(){$template = $this -> IGtNotificationTemplateDemo();//基于应用消息体$message = new \IGtAppMessage();$message -> set_isOffline(true);$message -> set_offlineExpireTime(10 * 60 * 1000);//离线时间单位为毫秒,例,两个小时离线为3600*1000*2$message -> set_data($template);$appIdList=array($this -> appId);$message->set_appIdList($appIdList);$rep = $this -> igt-> pushMessageToApp($message);var_dump($rep);echo ("<br><br>");}//消息模版:// 1.TransmissionTemplate:透传功能模板// 2.LinkTemplate:通知打开链接功能模板// 3.NotificationTemplate:通知透传功能模板// 4.NotyPopLoadTemplate:通知弹框下载功能模板/*** 2016-7-29* 3.NotificationTemplate:通知透传功能模板* param1  :   ['title' => "通知标题",'content' => "通知内容" , 'payload' => "通知去干嘛这里可以自定义"]* */function IGtNotificationTemplateDemo($data){$template =  new \IGtNotificationTemplate();$template -> set_appId($this -> appId);//应用appid$template -> set_appkey($this -> appKey);//应用appkey$template -> set_transmissionType(2);//透传消息类型$template -> set_transmissionContent('open');//透传内容$template -> set_title($data['title']);//通知栏标题$template -> set_text($data['content']);//通知栏内容//$template -> set_logo("http://wwww.igetui.com/logo.png");//通知栏logo$template -> set_isRing(true);//是否响铃$template -> set_isVibrate(true);//是否震动$template -> set_isClearable(true);//通知栏是否可清除//$template->set_duration(BEGINTIME,ENDTIME); //设置ANDROID客户端在此时间区间内展示消息return $template;}/*** 2016-8-1* 1.TransmissionTemplate:透传功能模板* param1  :   ['title' => "通知标题",'content' => "通知内容" , 'payload' => "通知去干嘛这里可以自定义"]* 注意  第二个参数必须是这种格式 否则android客户端收不到* */function IGtTransmissionTemplateDemo($data){$template =  new \IGtTransmissionTemplate();$template -> set_appId($this -> appId);//应用appid$template -> set_appkey($this -> appKey);//应用appkey$template -> set_transmissionType(2);//透传消息类型$template -> set_transmissionContent($data);//透传内容//$template->set_duration(BEGINTIME,ENDTIME); //设置ANDROID客户端在此时间区间内展示消息return $template;}/*** 2016-8-4* 2.LinkTemplate:通知打开链接功能模板* */   function IGtLinkTemplateDemo($data){$template =  new \IGtLinkTemplate();$template -> set_appId($this -> appId);//应用appid$template -> set_appkey($this -> appKey);//应用appkey$template -> set_title($data['title']);//通知栏标题$template -> set_text($data['content']);//通知栏内容$template -> set_isRing(true);//是否响铃$template -> set_isVibrate(true);//是否震动$template -> set_isClearable(true);//通知栏是否可清除$template -> set_url($data['url']);//$template->set_duration(BEGINTIME,ENDTIME); //设置ANDROID客户端在此时间区间内展示消息return $template;}/*** 2016-7-29* 别名绑定* */function aliasBind(){$rep = $this -> igt -> bindAlias($this -> appId,'','');dump($rep);}/*** 2016-8-2* IOS推送消息的方式  IOS只用透传消息 APN推送* param1(推送消息)  :   ['title' => "通知标题",'content' => "通知内容" , 'payload' => "通知去干嘛这里可以自定义"]* param2(是否是群推消息)  :   bool* */function getIOSMsg($data , $isList = false){$template = new \IGtAPNTemplate();$apn = new \IGtAPNPayload();$alertmsg = new \DictionaryAlertMsg();$alertmsg -> body = $data['content'];//$alertmsg -> actionLocKey="测试测试2";//$alertmsg -> locKey="333333";//$alertmsg -> locArgs = array("locargs");$alertmsg -> launchImage="launchimage";//IOS8.2 支持$alertmsg -> title = $data['title'];//$alertmsg -> titleLocKey = $data['title'];//$alertmsg -> titleLocArgs = array("TitleLocArg");$apn -> alertMsg = $alertmsg;$apn -> badge = 1;$apn -> add_customMsg("payload",$data['payload']);$apn -> contentAvailable=1;$apn -> category="ACTIONABLE";$template -> set_apnInfo($apn);if($isList){$message = new \IGtListMessage();$message -> set_data($template);}else{$message = new \IGtSingleMessage();$message -> set_isOffline(true);//是否离线$message -> set_offlineExpireTime(3600*12*1000);//离线时间$message -> set_data($template);//设置推送消息类型}       //$ret = $this -> igt -> pushAPNMessageToSingle($this -> appId, $this -> deviceToken, $message);//var_dump($ret);return $message;}/*** 2016-8-2* android推送消息方式* param1(推送消息)  :   ['title' => "通知标题",'content' => "通知内容" , 'payload' => "通知去干嘛这里可以自定义"]* param2(是否群推消息) :  bool* param3(消息模板)  :*   1.TransmissionTemplate:透传功能模板*   2.LinkTemplate:通知打开链接功能模板*   3.NotificationTemplate:通知透传功能模板*   4.NotyPopLoadTemplate:通知弹框下载功能模板* */function getAndroidMsg($data , $isList = false , $type = 1 ){switch($type){case 1 :$template = $this -> IGtTransmissionTemplateDemo($data);break;case 2 :$template = $this -> IGtLinkTemplateDemo($data);break;case 3 :$template = $this -> IGtNotificationTemplateDemo($data);break;}//个推信息体if($isList){$message = new \IGtListMessage();$message -> set_isOffline(true);$message -> set_offlineExpireTime(3600*12*1000);$message -> set_data($template);}else{$message = new \IGtSingleMessage();$message -> set_isOffline(true);//是否离线$message -> set_offlineExpireTime(3600*12*1000);//离线时间$message -> set_data($template);//设置推送消息类型}return $message;}/*** 2016-8-2* 总的单推消息的接口* param1(推送消息)  :   ['title' => "通知标题",'content' => "通知内容" , 'payload' => "通知去干嘛这里可以自定义"]* param2(接收人)   :   ['cid' => "",'device_token' => "" , system=""]* */public function pushIGtMsg($msg , $to ){//1根据系统平台不同获得不同的推送消息if($to['system'] == 1){$message = $this -> getIOSMsg($msg);$this -> igt-> pushAPNMessageToSingle($this -> appId, $to['device_token'], $message);}else if($to['system'] == 2){$message = $this -> getAndroidMsg($msg);//2接收方$target = new \IGtTarget();$target->set_appId($this -> appId);$target->set_clientId($to['cid']); //执行推送消息动作try {$this -> igt->pushMessageToSingle($message, $target);}catch(RequestException $e){$requstId =e.getRequestId();$this -> igt->pushMessageToSingle($message, $target,$requstId);}}}/*** 2016-8-2* 总的群推消息接口* param1(推送消息)  :   ['title' => "通知标题",'content' => "通知内容" , 'payload' => "通知去干嘛这里可以自定义"]* param2(接收人)    :   array(['cid' => "",'device_token' => "" , system=""])* */public function pushIGtMsgL($msg , $toList ){//0设置缓存$msgCache = [];$iosCache = [];$androidCache = [];//1获得消息foreach($toList as $to){if($to['system'] == 1){//IOS消息if(!$msgCache[$to['system']]){$message = $this -> getIOSMsg($msg , true);$msgCache[$to['system']] = $message;}$iosCache[] = $to['device_token'];}else if($to['system'] == 2){if(!$msgCache[$to['system']]){$message = $this -> getAndroidMsg($msg , true);$msgCache[$to['system']] = $message;}$target = new \IGtTarget();$target->set_appId($this -> appId);$target->set_clientId($to['cid']);$androidCache[] = $target;}}//2执行推动消息动作if(count($iosCache) > 0){$contentId = $this -> igt -> getAPNContentId($this -> appId , $msgCache[1]);$this -> igt -> pushAPNMessageToList($this -> appId , $contentId, $iosCache);//dump($rs1);}if(count($androidCache) > 0){$contentId = $this -> igt -> getContentId($msgCache[2]);$this -> igt -> pushMessageToList($contentId , $androidCache);//dump($rs2);}}/*** 2016-8-3* 获得用户状态* */public function getCidStatus($cid){$rs = $this -> igt -> getClientIdStatus($this -> appId , $cid);if('Online' == $rs['result']){return true;}else{return false;}}/*** 2016-8-4* 本来想用pushIGtMsg发送LinkTemplate 但是因为IOS不支持发送带连接的消息,这就很尴尬了* 只能这样用了 ,类似于打电话那种方式* */public function pushLinkMsg($url , $to){$payload = ['action' => 'send' , 'url' => $url];//0获得该用户当前是否在线 (为android查的)$rs = $this -> igt -> getClientIdStatus($this -> appId , $to['cid']);//1根据系统平台不同获得不同的推送消息if($to['system'] == 1){//如果是IOS的情况下$msg = ['title' => '' , 'content' => '' , 'payload' => json_encode($payload)];}else if($to['system'] == 2){//如果是android的话,在线则需要发送非标准的透传消息if('Online' == $rs['result']){$msg = json_encode($payload);}else{$msg = ['title' => '' , 'content' => '' , 'payload' => json_encode($payload)];}}//2调用单推接口$this -> pushIGtMsg($msg , $to);}
}

大部分的注释都写在了里面
调用的话更简单

$pushMsg = new \Common\Lib\IGeTui();
$pushMsg -> pushIGtMsgL(['title' => "消息推送",'content' => '你收到了一条消息推送' , 'payload' => ""],$toList);

至此,就能向已经安装APP的手机推送消息通知了。

利用MUI+个推实现APP消息推送相关推荐

  1. unipush+java+个推实现app消息推送

    unipush使用指南:https://ask.dcloud.net.cn/article/35622 首先需要开通unipush, 然后需要获取cid,cid的作用就是标识是哪一个终端,也就是标识a ...

  2. 个推 tp6 --APP消息推送(Cid单推)

    1,安装项目依赖. composer require getuilaboratory/getui-pushapi-php-client-v2 2,根据用户Cid单推 public function p ...

  3. 关于 APP 消息推送,看这篇文章就够辣!!

    原链接:http://www.sohu.com/a/168278657_251759 APP消息推送作为消息分发渠道,一方面起到内容告知的作用,另一方面在一定程度上可以提高用户活跃,在用户流失后也许能 ...

  4. 如何构建一套高可用的 APP 消息推送平台

    转载自  如何构建一套高可用的 APP 消息推送平台 消息推送作为移动 APP 运营中的一项关键技术,已经被越来越广泛的运用.本文追溯了推送技术的发展历史,剖析了其核心原理,并对推送服务的关键技术进行 ...

  5. IOS开发之实现App消息推送(最新)

    IOS开发之实现App消息推送(最新) 标签: 推送最新AppStoreXCode6ios开发 2014-11-19 21:13  58412人阅读  评论(77)  收藏  举报   分类: IOS ...

  6. 国内APP消息推送机制以及微信消息延迟问题剖析

    转自:https://club.huawei.com/thread-15878044-1-1.html 一.前言 随着安卓手机以及QQ/微信/支付宝/滴滴出行/美图外卖等一大批移动通信/移动消费应用的 ...

  7. APP消息推送测试点

    APP消息推送测试点 2019.03.15 17:38:39 字数 190 阅读 50 消息推送对象 1.单个推送 2.多个推送 3.及安卓和IOS渠道推送 ps: 注意生产环境和测试环境的分开,避免 ...

  8. app消息推送服务器端,系统服务:APP消息推送服务

    APP消息推送服务开通方法 在云表官网-管理控制台中,选择要开通APP消息推送服务的服务器,然后选择要开通APP消息推送服务的应用空间,点击对应应用空间的"应用空间管理". 在进入 ...

  9. php实现app消息推送

    如何用php实现APP消息推送 现在有很多的消息推送厂商,比如阿里云的消息推送,极光推送,融云的消息推送.他们的原理都是把sdk内置在app里面,达到消息推送的目的,通过一张图来了解一下,看不懂不要紧 ...

最新文章

  1. Go 知识点(05)— 类型别名与类型定义
  2. nginx(一)安装与命令总结
  3. 【luogu P3384 树链剖分】 模板
  4. 生产环境中on yarn模式是否采用yarn session
  5. 基于NFS实现lamp的负载均衡之二: 部署NFS服务器
  6. 计算机游戏高少手电影,支持switch,还有电影特技!上手简评骨伽IMMERSA Ti游戏耳机...
  7. MySQL存储过程(五)——存储过程查看、删除和修改
  8. 协同过滤推荐算法-----向量之间的相似度
  9. 乔布斯:你须寻得所爱(转)
  10. cmpp具体java实例_cmpp3.0_JAVA_实现 - 源码下载|Windows编程|源代码 - 源码中国
  11. 软件设计师【软考中级】复习笔记 —— 第十章(多媒体基础知识)
  12. chapter1 静态分析技术-09资源节查看 resource hacker
  13. stm32管脚重映射
  14. Element 之loading颜色修改
  15. win 7 与 virtualbox ubuntu 共享文件夹
  16. 信号是受噪声Nt干扰的余弦波Xt = Acoswt + φ + Nt,试求它的自相关函数。假设φ是在[0, 2Π]上均匀分布的随机变量,Nt是均值为0方差为σ2的白噪声,且 Nt 与 φ 互不相关。
  17. PHP判断ip是否在指定IP段内(微信支付回调IP段验证)
  18. (Record)西数企业级硬盘查验方法
  19. 带孩子们做环球旅行的读后感_适合夏天制作的简单小手工,带着孩子们做起来!...
  20. ebs开发入门 oracle 知乎_知乎日报

热门文章

  1. 铜九铁路客运将于2008年9月1日正式开通
  2. AEG POWER可控硅工业充电机RCS
  3. C语言编程练习:水仙花数
  4. CAD制图软件中如何设置选择对象的显示效果?
  5. 转载 Latex各种命令、符号、公式、数学符号、排版(非常详细)
  6. 推荐一些有趣的在线编程游戏
  7. 为树莓派3B+编译 64位UEFI 固件
  8. binlog2sql 安装使用
  9. 计算机毕业设计ssm校园竞赛管理系统设计与实现hyr9b系统+程序+源码+lw+远程部署
  10. 英语作文框架(四级)