发布于 

iOS APNs: 静默推送

最近在看人工智能相关的知识,无意中发现了一个巨牛的 人工智能教程,分享一下给大家。

教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点 这里 可以直接看教程。


今天跟大家介绍一下 ios 的静默推送功能。

静默推送,简单来说就是通过推送实现用户无感知的消息通知。

该系列博文:

iOS APNs: 远程推送
iOS APNs: 本地推送
iOS APNs: 处理数据
iOS APNs: 静默推送(本篇)

普通推送

例如微信,好友给你发送了一条消息,你的微信APP 在后台, 此时会收到带声音的一个消息提示。

这条推送机油有文字又有声音,点开这个推送可以直接打开 APP.

从程序的角度来讲,进入 App 后会调用下面的方法:

iOS10.0.x 和其之前的系统调用下面的方法:

1
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

iOS10.0.x 之后的系统,会调用如下的方法:

1
2
3
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler

静默推送的异同

1.没有弹出框

没有推送的弹框出现,用户毫无感知的接收到了这个推送消息. 有 润物细无声 的感觉。

该推送既没有文字又没有声音。

2.需要用户授权允许推送

这个跟普通推送一样,都需要用户授权才可以推送。

3.会执行代理方法

静默推送来的时候,也能执行上面的回调方法。执行上面方法的场景如下:

1.App 在前台.
2.App 在后台, 但是没有被 kill 掉.

4.iOS7 以后才有的

对于 iOS 之前是没有静默推送的。

5.可以延长后台时间

收到静默推送后,在应用程序挂起之前有 30 秒左右可以执行相关的操作。

6.推送频率的控制

静默的推送是苹果推送服务器控制推送频率的。

苹果推送服务根据后台推送任务的能耗(用电量,接收情况)来控制后台推送的推送频率和延迟时间。


总之, 静默推送是普通推送的一种变种而已。

无论是静默推送还是普通推送,开发者证书里面必须开通 push 相关的功能,并且也需要用户开启允许推送的授权。

这个在 iOS APNs: 远程推送 里面已经介绍过,不在这里赘述。

推送的格式

普通推送的格式,大致是这个样子:

1
2
3
4
5
6
7
8
{
"aps":
{
"alert":"Testing.. (15),
"badge":1,
"sound":"default"
}
}

静默推送是不允许带 alert badge sound 等字段的,但是必须包含 "content-available":1.

例如下面的形式都可以:

形式1

1
2
3
4
5
6
{
"aps":
{
"content-available":1
}
}

形式2

1
2
3
4
5
6
7
{
"aps":
{
"custom":"open_profile_page"
"content-available":1
}
}

其中 custom 是自己定义的,大家根据需求自行扩展即可。

形式3

1
2
3
4
5
6
7
{
"aps" : {
"content-available" : 1
},
"acme1" : "bar",
"acme2" : 42
}

这个来自苹果开发者 文档

使用场景

具体的使用场景, 需要结合本身的业务和功能特点来说。

静默推送的前提是 APP 没有被杀死,可以通过回调函数来执行相关的代码。

另外静默推送不会打扰用户,比如用户正在游戏中战斗,你频繁的使用普通推送给他,估计他都要疯了.。

我个人使用静默推送的场景大致是这样的,APP 将要挂起的时候, 请求服务器去发一条静默推送,然后使用本地通知的方式唤起用户来打开 APP,从而保证 APP 处于保活的状态,至少静默推送可以增加被后台挂起的时间。

关于本地通知的内容,可以参考之前的文章 iOS APNs: 本地推送.

更多的使用场景等大家在业务中去挖掘。


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

veryitman