1.远程推送的详细描述
不使用第三方推送的原因:
1.只能给客户端发送推送,平台web不能发送。
2.我们考虑到使用太多第三方平台,会导致app产生强大的依赖,后期运维成本过高
故使用自定义推送
2.远程推送的步骤:
从我们公司的服务器生成推送,在使用APNs推送给用户
1.设置远程推送服务器
有几个关键的组件:团队的服务器、APNs、我们的设备、安装在用户设备上的app
从我们的服务器开始决定什么时候要发送推送。在该发请求的时候,服务器生成一个请求包含通知内容以及用户设备的device token。接着把这个请求发送给APNs,他们会处理发送推送给特定用户的设备的事情。在接收到通知,设备等莪操作系统会处理用户交互以及分发通知给你的app
2.我们app注册一个devicetoken用来识别我们的app,用来和APNs交流
使用苹果提供的跨平台iOS与tvOS都可以使用的API首先请求registerForRemoteNotifications,收到token之后调用代理方法didRegisterForRemoteNotificationsWithDeviceToken
这个devicetoken对于你的app和设备两个独一无二的,另外一个app的device token都不是同一个.
我们的app支持push notification.并且我们的开发者账户中,也必须有一个推送服务通知服务对应我们的app id
3.和APNs建立一个可信任的连接
我们的服务器和APNs必须建立一个安全的连接,在我们的服务器上需要安装全局CA根证书,这个根证书在mac操作系统的钥匙串中。为了发送通知,我们服务器这端与APNs使用HTTP/2和TLS建立一个基于token或基于证书的信任。我们使用了基于证书的信任
因为我们目前只有一个app,所以使用证书比较方便。如果是多个app,则需要分开创建多个证书,所以使用基于token的信任比较好。
这个TLS建立过程如下图所示:
如果我们的证书失效了,这个连接就会中断。证书有效期一年的时间,所以我们需要提前重新申请证书
4.理解APNs提供了什么
-
APNs 致力于准确的给用户发送通知,并给用户带来最棒的体验,安卓用的通知框则需要手动加入。
-
APNs管理了一个与用户设备可信任的、加密的持续的IP连接
-
APNs合并了相同标识符的通知
-
设备离线的时候APNs也可以存储和发送通知
5.查看苹果官方文档,如何实现远程推送
-
询问用户:是否授权能发送推送给用户,即使不在运行状态或是在后台。将询问结果存储起来,发给后台。个人中心模块有权限再次改变推送状态
-
可以通过getNotificationSetting查看setting的状态,更好的提高用户体验(比如只要alert,或是需要角标与声音)
-
设置UNUserNotificationCenterDelegate的代理,用户通知中心会调用这个方法在合适的时间(含有3个可选的代理方法 处理用户对推送的回复、app运行时在前台时如何处理这个通知、现实通知设置)
-
在UNNotificationSettings中管理与通知有关的设置和app授权状态