MUI实现APP消息推送全解析,含接收监听及代码示例
跨平台开发框架MUI和专业推送服务个推相结合,这为APP实现稳定且高效的消息推送提供了成熟的方案,此方案能够有效解决开发者自建推送通道时面临的诸多难题。
推送功能的价值与选择
移动应用与用户保持互动、提升活跃度的核心功能是消息推送。对于用MUI这类HTML5跨平台框架开发的应用,其自身不具备系统级的推送能力,必须依赖第三方服务才行。个推作为国内领先的推送技术服务商,提供了稳定通道,该通道有着高到达率、低延迟的特点,其与MUI的深度集成能让开发者快速接入,还可节省大量开发和运维成本。选择成熟的推送方案,能够避免重复造轮子,能让团队更加专注于业务逻辑本身。
个推服务配置基础
尚未使用个推时,得要于个推官网去注册开发者账号,接着创建应用,借此来获取AppID、AppKey、AppSecret等关键配置信息。于MUI项目里,一般而言得要在manifest.json文件的“SDK配置”部分准确填写这些参数。除此之外,依据应用是Android还是iOS平台,还需要分别去完成相应的配置,像在iOS端上传推送证书。这些基础配置是推送功能能够正常工作的前提条件,一定要确保准确无误 。
MUI中的推送事件监听
MUI框架将个推的客户端能力予以封装,主要借由两个事件对推送作出响应,“push”以及“click”。当应用于前台运行之际,一旦接收到推送消息,“push”事件即刻触发。而当用户点击通知栏消息以打开应用之时,“click”事件便会触发。清晰理解这两个事件之间的区别起着关键作用,其决定了消息处理所处的逻辑时机。针对各种商业需求,开发者得在恰当的事件回调里面编写处理代码,像是对页面数据予以更新或者实施页面跳转等 。
不同平台的消息接收机制
安卓和iOS平台的消息推送机制有着明显不同,对于iOS,是通过苹果的APNs也就是苹果推送通知服务来统一进行转发的,当应用处于离线状态时,该消息会暂时存放在通知中心,只有在点击之后才会启动“click”事件。对于安卓,情况更为繁杂,尤其是透传消息,要是消息格式契合MUI约定那个规规范,这里面包含标题、内容等字段,不管应用在线与否都会显示通知;要是格式不符合的话,那就只有在应用处于在线状态时才会触发“push”事件,离线的话就有可能丢失 。
服务端消息推送实践
完整的推送流程得以实现,是离不开服务端配合的。开发者要在自有业务服务器之上,借由调用个推所提供的服务端 API 去发送消息。就拿 PHP 来说,可以把一个推送类进行封装,将单推、群推等功能予以集成。在发送消息的时候,要有一个包含接收者客户端 ID、消息模板、跳转参数等信息的请求体被构造出来。对于重要通知而言,失败重发机制以及发送数据统计也是需要予以考虑的,如此才能保证关键信息能够准确无误地送达目标用户。
常见问题与优化建议
在实际开展开发工作期间,或许会碰到通知栏呈现不出来的状况,或许会遇到点选时没有任何反应的情形,又或许会所收到推送消息出现收不到的问题。这些问题一般是由于配置出现差错,由于证书已经失效,由于客户端ID获取遭遇失败,或者由于消息格式存在差错而引发的。建议处于开发阶段的时候,充分借助个推管理后台所具备的消息测试功能以及送达数据统计来开展排查工作。对于生产环境而言,可以结合用户分群的方式,去达成精细化以及个性化的推送策略,并且要留意把控推送的频率,防止对用户产生干扰。
当时你于集成消息推送功能之际,遭遇到的最为棘手的问题究竟是配置这方面的问题,还是客户端逻辑处理这方面的问题?热烈欢迎于评论区之中分享你自身所拥有的经验以及解决方案,要是感觉本文具备一定帮助的话,那就请点赞予以支持。
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 ("
");
}
//消息模版:
// 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