前言:
推送功能是每一个App都要有的功能,对于我们写的项目的通用框架来说是必须要添加进去的。但是之前都是大部分都写在appdelegate.m里面,处理消息在前台,后台,程序杀死之后的方法,消息红点,iOS各种版本的代理方法,光一个极光推送就占据了appdelegate.m半壁江山,以后再写一些第三方的话,那appdelegate.m代码看起来改起来可谓是生无可恋了。作为一个有思想的程序员,能忍吗?肯定不能忍!下面我们就探索iOS极光推送的插件式地集成和降低与appdelegate.m的耦合的方法,达到优雅地集成极光推送。
准备工作:
一、苹果开发者中心生成证书
前往苹果开发者中心生成证书或者使用里面的keys
生成推送证书的步骤我就不说了,现在还不会生成推送证书的话你就站墙角唱国歌去吧,顺便思考下自己的人生。
我这里主要讲一下前段时间苹果刚出来的keys的使用:
首先认识一下keys

翻译过来的意思是:为您的通知请求使用Apple Push通知服务。所有应用程序都使用一个键。Oh,my God! Very good呀!
使用keys有两个好处:
1、同一个开发者账号可以使用一个 key,避免了每一个app生成一个开发推送证书和一个上线的推送证书的问题。
2、该key一旦生成,永不过期,惊不惊喜,意不意外,避免了推送证书一年生成一次的问题。

生成完点开需要Key ID和Team ID到时候极光后台要用。
二、极光推送官网创建应用


选择Token Authentication,上面的证书配置就不用填写了,填写下面的Token Authentication 配置,填写Bundle ID,这个填写完是不能更改的,想更改的话只有在极光推送官网删除应用重新创建,再填写上面准备好的Key ID和Team ID。以上准备工作就算做完了。另外获取极光推送设置的应用的AppKey,项目中要用的。
三、自己的app里面添加极光推送的代码

新建AppDelegate的分类文件,如上图所示:

其中.h文件暴露出3个方法,一个初始化方法,在appdelegate里面调用,下面两个是程序在前台和程序进入后台的时候消失的处理,从appdelegate.m中分离,在自己写的分类中实现,达到分离的效果。
.m文件中就是将之前在appdelegate.m中写的初始化方法,处理消息在前台,后台,程序杀死之后的方法,消息红点,iOS各种版本的代理方法,这里我就不一一介绍了,下面demo里面自己看吧,没啥难的。
我要说的是,最主要的是归结到我写的一个封装方法的处理:

如上图所示,无论是iOS 10以上,还是iOS 10一下,程序在前台、后台还是程序杀死的时候的收到消息的处理都在这个里面处理,跟后台商量好他们推送的消息的类型区分不同的消息,然后做相应的收到消息的跳转处理,就哦了。上面我写了一个枚举类型,区分不同的消息,大家可以根据自己的app消息类型修改枚举类型。
设置标签别名
1、在登陆注册的时候,拿到userID设置标签别名
//设置设备别名
[JPUSHService setTags:[NSSet setWithObject:userId] completion:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
DLog(@"%tu,%@,%tu",iResCode,iTags,seq);
} seq:0];
2、在退出登录的时候清空设备别名
//清空设备别名
[JPUSHService cleanTags:^(NSInteger iResCode, NSSet *iTags, NSInteger seq) {
DLog(@"%tu,%@,%tu",iResCode,iTags,seq);
} seq:1];
最后,呈上Demo: Demo
四、测试


最后到极光推送后台,测试自己的推送效果。
总结:懒惰会让程序员想到一些更好的方案去解决手上的问题,往往的结果都是节省了很多体力劳动,以及达到同样的需求用的是最优雅最便捷的方式。
以上有问题,欢迎大家批评指正,共同学习,共同进步。
网友评论