iosapnsios 消息推送送是怎么实现的

因为App的功能需要最近一直在调研苹果的APNs推送,开始时觉得超麻烦现在感觉还是比较easy,“难者不会会者不难”,自己踩过了这么多的坑终于会了不出来吐槽(装X)┅下对不起自己,23333

在测试发送APNs消息的时候,需要写服务器代码给苹果服务器发消息本人作为一个纯iOS开发者,对服务器代码十窍通九窍还好现在网上很多第三方提供这个功能,因为我们公司使用的是个推就直接使用个推提供的功能测试了,不需要我来写服务端代码真爽

3、真机,需要添加到开发许可设备中

5、苹果APNs推送证书,分:开发环境证书 (Development)、生产环境证书(Production)等同样,也是使用“Development”注意使用個推平台APNs推送需上传该推送证书,这里我将导出的开发环境证书提交个推平台关于证书生产和导出可以查看个推 APNs配置技术文档()。

6、Xcode8.2(不同版本在配置时有点不同)最低支持版本iOS 8.0。

1、创建新项目或修改老项目配置项目

3、使用个推的测试一下,测试DeviceToken

注意保持推送APNs环境囷你的App推送环境一致因为经常有人会把证书环境搞错,导致推送收不到

分享一下,我在给“Provisioning Profile”文件命名时有个习惯以“Dev: ”(开发环境)、“In House: ”(企业包环境)、“XC Ad Hoc: ”(分发包环境)、“XC: ”(App Store),其中后面三个都是生产环境

2)打包成 ipa 包安装到iPhone上,可能会忘记打包时的配置或者是其他人发你的包是不是就不能知道APNs的环境了? 很早之前我的方法是获取App的 DeviceToken使用开发和生产环境APNs证书都推送一下,看看是哪個能推送到后来发现了还有其他方法的,那就是解析ipa包:

1)先解压ipa包找到.app文件,显示包内容

二:正式推送APNs推送我们需要的信息

2、使鼡个推网站上的“透传消息”下发

这样就可以推送自定义消息内容到iPhone上了,到这里APNs的功能已经全部完成了后面就要看看具体需求了,将個推的服务端集成部分发给你们服务端开发人员让他“码”起来了,如果有问题让他们联系个推的技术支持,2333

个推最新版本1.5.3 iOS SDK添加了“iOS 10 APNs展示统计”功能,该功能使用到了iOS10 新特性需要添加NotificationService 扩展模块能准确统计到 iOS10 以上 APNs 展示信息,这个功能太爽了APNs 展示数据无法统计是多少開发者及运营的痛啊,相信有了这个功能能更好的跟踪APNs推送到达情况具体集成步骤可以查看“”。
推送成功后可以在个推后台进行查看嶊送情况 如图:

个推渠道下发还是区分蛮清晰的, 个推成功下发为通过个推通道进行下发 APNs成功下发模块为离线后,走APNs通道下发 其中仩面说的展示统计数据就是 APNs模块中的展示数了。 用户量有点小别介意哈 zZZ。

APNs的消息在App不同状态、APNs消息内容、通知操作不同、iOS系统版本不同回调方法也不同,下面这张图片是上次咨询个推时个推的技术人员发我的,可以参考看看注意使用时要测试一下,防止苹果系统又變化了:

说到这里不得不说一下个推的推送机制了在我们服务端给个推服务器推送消息时,个推服务器会检查推送对象是否在线(应该昰根据个推SDK和个推服务器心跳包和网络连接判断的超过一定时间没有收到心跳包就是“不在线”,不过这种做法可能会出现假在线情况就是忽然断网,在服务器下次检测心跳包的期间服务器会认为对象在线):

1)对象在线:下发个推的透传消息,不发送APNs推送消息
2)對象离线:下发个推的透传消息,发送APNs推送消息
从上面可以看得出,个推的透传消息是每次都下发的这样也保证的个推的消息到达率,不过这种做法会出现消息重复例如是收到消息弹框提醒用户操作,个推透传消息和APNs推送消息都收到了处理不好的话会提醒用户二次┅样的消息。

这里比较好的是个推在透传消息方法中提供了“offLine”字段这个值是“YES”时,表示这是一条离线消息在下发个推透传消息时,也发送了APNs推送消息在处理消息时可以忽略,如果消息的重要性不是很高可以这么做,因为在忽略个推的透传消息后APNs消息也没有收到就导致该条消息丢失。
另外一种处理方式:参照网上的一些解决方法我建立一个配置表,处理过的数据在表中标注防止APNs和个推的透傳方法消息重复操作。
5、个推透传消息注意点

上面二张图第一张是个推网站下发透传消息时的界面,第二张是个推透传消息回调方法需要特别注意的是第一张图中最下面的“payload”和个推透传方法中“payloadData”,这二个中不是同一个概念

“payload” 是个推自定义字段,添加在APNs的消息内嫆中不是苹果原生字段,会通过APNs推送消息一并下发到iPhone客户端结构如上图中代码块展示,这个字段一般是在APNs消息中添加附带消息例如附带一个酒吧网站url,在收到通知消息是发现是url,App直接打开这个网址
“payloadData”是该条透传消息内容,对应图上的“消息内容”这个字段不會通过APNs推送到iPhone客户端,是通过个推服务器直接下发给个推SDK的当然你也可以将“消息内容”和“payload”设置成一样的,这个就看你们的具体使鼡情况来定了

再说说第一张中“*拆分Android和iOS推送任务”,选择“是”的话会拆分Android和iOS推送任务后,将生成两个taskid分别对android和ios推送数据进行统计囷展示,方便之后查询推送数据统计

最后一个比较实用的就是个推的“高级通知”,如下图将APNs推送中的字段都列举出来了,不要开发鍺特意记APNs中有哪些字段方便一些对APNs还不是很熟悉的初学者使用,当然不包括我了哈哈哈哈。

App发布到AppStore时需要更换APNs证书或者更换App中个推AppId,因为个推的网站中只能上传一个证书开发时上传的都是开发APNs证书,当开发测试完成后准备发布时,App需要生产环境的APNs证书这时有二種方案可以使用:

1)创建二套个推AppId:这种方案是在个推网站中添加二个应用,一个用于开发、一个用于发布在开发测试期间使用开发的個推AppId,在发布时使用发布的个推AppId这种方案需要注意发布时切换AppId,忘记换就GG第一次发布还好,两个个推AppId的作用互换一下就可以了如果昰更新发布,那只能重新提交苹果审核了

2)更换APNs证书:这种方案是在发布时重新上传生产APNs证书,注意个推的证书更换后需要10分钟左右生效这种方案需要注意在之后版本更新开发时,需要申请新的个推AppId不然会影响在线的客户。

我使用的是第一种方案使用二套个推AppId,个嶊的文档中也是推荐使用第一种方案

三:公司服务器自己推送和使用个推推送的流程差异

1、公司服务器自己推送(简称:自己推送)流程

3)推送时,根据用户ID获取到DeviceToken将消息内容、DeviceToken和APNs推送证书发送给苹果服务器

3)将ClientId和用户ID绑定,保存服务器

4)推送时根据用户ID获取到ClientId, 将消息内容和ClientId发送给个推服务器

四:自己推送和第三方对比

1、成本:自己推送需要专人进行开发,并且需要一定数量的服务器和带宽支持在開发完成后的使用过程中还需要有专人进行维护。使用第三方推送只需要集成SDK就可以实现功能,不仅减小了开发成本与维护成本甚至茬推送稳定性上第三方也会比自己做的推送更好一些。

2、精准推送:可以将针对内容及标签等信息进行精准推送比如将杭州的新闻推送給杭州用户,自己推送需要额外开发而第三方大部分已经支持这样的功能。

3、推送统计:自己推送还是需要额外开发该功能而第三方基本都必备该功能,相对来说就我现在使用的个推统计效果还是令人满意的区分在线下发和APNs下发统计功能,支持通知的展示统计和点击統计可以知道真实的下发量,下发后有多少被展示了有多少被点击了。

4、可控性:使用第三方推送可控性太低想想,如果第三方推送厂商宕机、或者被黑客攻击了你服务没法推送了,需要等待第三方厂商响应或者第三方厂商出问题了,也会影响你的推送所以那些痛的经验告诉我们要选择家专业做推送,比如个推至少人家也是百亿级用户量,服务器挂了怼他去哈哈。

总结一下:自己推送成本高、服务相对更可控使用第三方推送成本低、功能更多。建议如果公司特别大对成本不在乎又要求服务可把控,可以自己搭建推送服務如果是小公司或者才创业的公司,使用第三方厂商更加合适没有统一答案,要根据自身产品特点、公司情况不断权衡和调整

1、在開发测试时,更换了推送证书证书更换后需要10分钟左右生效,测试时感觉好麻烦不能立即生效么。

2、推送时可以角标自动增加,产品的需求作为一个开发人员不知道有什么好,不过产品这样要求只能做了,还好个推支持

3、可以统计通知的展示率和点击率,运营哃学可以在推送活动通知后知道用户对什么样的活动比较感兴趣,更方便他们运营

4、可以对指定人群推送,例如我们活动在上海可鉯指定给上海用户大力推送。这个比较好不用全部用户都发送,保证不相关的用户不被打扰

5、个推的透传方法可以保证数据的到达,洇为苹果的APNs推送不保证是否到达和到达时间所以就可能会丢失,使用个推的透传方法可以保证能收到消息

6、在发送透传消息时,“iOS高級通知”中“代码块”功能比较赞我个人超喜欢,可以提前预览客户端收到APNs通知消息的数据格式

上图可以分为三个阶段

第一阶段:Push服务器应用程序把要发送的消息、目的iPhone的标识打包,发给APNS

第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone并把消息發到iPhone。

第三阶段:iPhone把发来的消息传递给相应的应用程序 并且按照设定弹出Push通知。



1、首先是应用程序注册ios 消息推送送

4、 服务端程序向APNS服務发送消息。

5、APNS服务将消息发送给iPhone应用程序

无论是iPhone客户端跟APNS,还是Provider和APNS都需要通过证书进行连接的。下面介绍一下所用到证书的制作


2、填寫你的邮箱和常用名称,并选择保存到硬盘




//true:表示的是产品发布推送服务 false:表示的是产品测试推送服务

我要回帖

更多关于 ios 消息推送 的文章

 

随机推荐