设为首页 加入收藏

TOP

iOS Push详述,了解一下?(二)
2019-08-31 01:05:16 】 浏览:148
Tags:iOS Push 详述 了解
PP是否在线或者离线。认为在线,会发送在线push,否则,发送离线push。

2、在线push特点

● 在线push有以下几个特点:

● 不需要经过苹果APNs。

● 需要自己实现长链接。

● 代码在app内部实现。

二、离线(远程)push流程


img17.png

离线push流程

主要流程为:

● 服务器端将消息先发送到苹果的APNs

● 由苹果的APNs将消息推送到客户的设备端

● 由iOS系统将接收到的消息传递给相应的App。

简而言之离线push是苹果系统的行为,与app状态无关,能够直接推送到指定手机的指定app。

在进一步了解离线push前,我们有必要先了解几个名词。

1、离线push名词解释

—APNs

APNs:Apple Push Notification service(苹果推送通知服务)。

APNs主要用于以下场景:当用户主动杀掉 APP,或者 APP 进入后台超过约定时长时,APP会被kill,这样保障了前台 APP 的流畅性,也延长了手机的使用时长,获得了较好的用户体验,但是这也意味着,服务器无法主动和用户交互(如推送实时消息等),所以苹果推出了 APNs,允许设备和服务器分别与苹果的推送通知服务器保持长连接状态。

关于APNs的更新有以下几点

● iOS 8以后,APNs推送的字节是2k,iOS8以前是256字节

● iOS 9以后APNs支持HTTP/2协议栈,优化长连接,具有标准的HTTP返回和管道复用技术

● iOS 10以后,推送的字节是4k,APNs可根据推送消息的唯一标示符查询某条消息是否被用户阅读,可更新某一推送消息,而不用发重读的多条消息

关于APNs更全面的介绍可以看官方文档:

https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html#//apple_ref/doc/uid/TP40008194-CH8-SW1

—payload

什么是payload?对于每一条发送给APNs的推送消息,都包含一个payload,通常是组成了一个JSON的Dictionary,这其中必不可少的是aps属性,它对应的value也是一个Dictionary,包含一些但不限于以下内容:标题、副标题、内容、附件、category等,如

img18.png

—device token

什么是device token?我们看一下官方的简介:

device token: APNs uses device tokens to identify each unique app and device combination. It also uses them to authenticate the routing of remote notifications sent to a device.(device token是APNs用于区分识别每个iOS设备和设备上不同app的一个标识符,还可以用于APNs通过它将推送消息路由到指定设备上)

即:device token里包含了device id和bundle id的信息,但是device id和bundle id不会确定唯一的device token。

但是,这里有个坑,查资料得知,iOS8及之前的iOS系统,对于同一部手机,如果卸载后重装APP的话,device token是不会变的,在token变了以后,老的token,就被认为是无效了,苹果不会对这部分无效的token推送。但是,对iOS9及以后的iOS系统,对于同一部手机,卸载后重装APP的device token是会发生变化的,而且老的token不会无效,还可以正常推送,这应该是苹果的一个bug,但是苹果也没有修复这个问题,所以这个需要开发者自己来解决,否则容易出现一个app收到多个push的问题。官方的说法是:

To protect user privacy, do not use device tokens to identify user devices. Device tokens change when the user updates the operating system and when a device’s data and settings are erased. As a result, apps should always request the current device token at launch time.(即此举为了保护用户隐私,device token会在更新系统、擦除设置重置后变化,在一定时间后会过期)

2、离线push详细流程

知道了以上概念后我们重新来看一下离线(远程)push的详细流程:

img19.png

    离线push详细流程

1) 首先是应用程序注册消息推送。

2) iOS跟APNS Server要deviceToken。应用程序接受deviceToken。

3) 应用程序将deviceToken发送给PUSH服务端程序。

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

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

值得注意的是,当由于用户反复卸载重装程序(虽然概率很小)等原因导致多个device Token指向同一台设备的同一个app,又把多个device Token发给APNs时,用户就会收到多条push。苹果APNs是不会对多个device Token是否指向同一台设备的同一个app做校验的,所以需要后台来做去重等处理保证用户不会收到多条push。

三、对离线(远程)push的响应


1、iOS 7以上对离线(远程)push时的响应

iOS 7以上关于接受离线push有两个函数

img20.png

那么这两个函数有什么区别呢?其实这两个方法都是用来处理离线push的。

差别就是,如果app在前台是收到离线(远程)push,那么就会调用

img21.png

相对的,如果在后台或者杀进程情况下,点击收到的离线push,那么就会调用,如果没有实现

img22.png

则会调用

img23.png

若实现了前者,就只调用前者。

2、iOS 10以上对离线(远程)push的响应

iOS10对push的处理主要增加了两个方法

img24.png

其中前者是对APP在前台时收到push时的处理,后者是点击push进入APP执行的函数。

用得比较多的是后者,我们可以举个例子,点击push进入APP后如何获取push的消息、角标、标题等内容:

img25.png

iOS 10关于push的一些新特性

iOS10新增的UserNotifications框架,主要有了这样几方面的更新:

● 用UserNotifications框架替换了原先与通知相关的接口,通知文字可分为title、subtitle和body三部分,通知可携带附件

● 系统在展示通知之前,可以唤起app附带的service extension,并且允许它改动通知的内容

● 用户在对通知右滑查看、下拉或者3d touch的时候,通知会展开,展开后页面的布局可以由app附带的content extension来决定

一、push的多样性


iOS10以前的push只有文字,甚至没有标题。

iOS10以后的push更加多样化,可以有主标题,副标题,甚至还有附

首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS面试题 下一篇【OC底层】OC对象本质,如 isa, su..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目