前言
在接入极光推送过程中,发现官网文档比较老旧了,而且使用的是OC版本,在上架Match 2.0的过程中,需要增加推送功能。于是就花了一些精力去研究,并最终改写得到了Swift版本的代码,这里写一个总结,希望能对想使用Swift接入极光推送的朋友们提供一些启发。
iOS推送机制和JPush的意义
APNs
iOS推送,最终只有一条官方渠道,那就是APNs。APNs通知是指通过向Apple APNs服务器发送通知,到达iOS设备,由iOS系统提供展现的推送。
极光推送的意义
一般开发者都是自己部署服务器,向APNs Server推送。极光推送,是在这中间增加了一步,即开发者自己部署的服务器向极光服务器推送,然后由极光服务器向APNs推送。
iOS和JPush的关系图(来源极光推送官网)
这样做有什么意义呢?极光认为带来了下列好处:
- 减少开发及维护成本:应用开发者不需要去开发维护自己的推送服务器与 APNs 对接。集成了 JPush iOS SDK 后不必自己维护更新 device token。通过 JPush 的 Web Portal 直接推送,也可以调用 JPush 的 HTTP 协议 API 来完成,开发工作量大大减少。
- 减少运营成本:极光推送支持一次推送,同时向 Android, iOS, WinPhone 三个平台。支持统一的 API 与推送界面。极光推送提供标签、别名绑定机制,以及提供了非常细分的用户分群方式,运营起来非常简单、直观。
- 提供应用内推送:除了使得 APNs 推送更简单,也另外提供应用内消息推送。这在类似于聊天的场景里很有必要。
接入前期准备
设置iOS消息推送证书
接入通知前,需要严格按照此文档配置相关证书。否则将会影响消息推送组件的正常使用。苹果开发最烦人的部分恐怕证书绝对算的上是一个了,关于推送证书的生成,这里推荐一个博客,可以参考。
iOS相比于安卓比较特殊,分为生产环境(上架版)和测试环境(开发版),最后导出极光所需要的.p12文件。导出.p12文件的坑也不少,推荐这篇博文,供参考。
最终在极光控制台上,分别将生产环境和开发环境的两个.p12文件上传,通过验证后,会出现下面截图的样子。
极光平台注册
在极光平台注册你的app,主要需要Bundle ID和开发者认证(企业营业执照)。注册完成后,获得重要信息:AppKey,这个码是后面一直需要使用的。
极光SDK的导入
导入极光SDK,既可以选择手动,也可以选择使用cocoapods。我使用的是cocoapods,原因很简单,因为如果不想要推送功能了,只需要在podfile里删掉pod ‘JPush’那行就行了。
导入后,一定记得要在XCode里勾上Application Target 的 Capabilities->Push Notifications 选项,否则将无法接受推送。
代码
添加bridge文件
因为极光推送是由OC写成,因此swift的项目里不能直接使用,需要借助桥接文件。只要在项目里新建一个OC文件,XCode就会创建一个xxx-Bridging-Header.h文件,在该文件中加入代码,就可以使用极光推送SDK了,啊真香!
|
|
添加Delegate
在AppDelegate.swift文件中,让AppDelegate遵从JPUSHRegisterDelegate,后面就可以使用相关代理方法了。
初始化相关代码
初始化APNs和JPush
初始化代码如下
|
|
上报device_token
实现JPUSHRegisterDelegate的代理方法,上报device_token。device_token主要是用来帮助推送定位到特定的设备使用的。
|
|
接收到消息的处理
这个部分为可选,主要是用来实现用户点开通知后的特定动作,比如跳转到特定页面。这就要跟后端开发人员商量好,将特定的消息通过通知的extra选项传递过来,然后手机端在做相应的跳转。
|
|
根据通知类型跳转到不同页面的效果:
清楚应用ICON角标
当用户点进应用之后,应用角标的通知数目应该清0,否则强迫症患者会被逼疯。
|
|
设置Tags和alias
Tags是区分通知类型的,可以给不同的推送类型打Tag,比如我想接受新题目通知,不想接收点赞通知。而alias一般是有唯一性的,需要根据用户名或手机号这种好区分的东西来分辨。
|
|
上架前的提醒
提交新版本或者初次上架之前,最后会遇到一个关于IDFA的选项。
您的 App 正在使用广告标识符 (IDFA)。您必须先提供关于 IDFA 的使用信息或将其从 App 中移除,然后再上传您的二进制文件。
记得要勾上是。否则会遇到麻烦。
参考
原文作者: Chih-Hao
原文链接: http://zhihaozhang.github.io/2018/09/20/match4/
发表日期: September 20th 2018, 6:01:51 pm
版权声明: 本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可
-
Next PostMatch开发笔记 伍 3.0版的新功能与上架
-
Previous PostPrometheus+微信实时报警模块的实现与Docker部署