利用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();
$te