处于后台,可通过 didReceiveRemoteNotification:fetchCompletion Handler: 获取通知内容 //获取情况中与普通推送的唯一不同点,此时 iOS 系统允许开发者在 App 处于后台的情况下,执行一些代码,大概提供几分钟的时间,可以用来偷偷的刷新 UI、切换页面、下载更新包等等操作。
处于退出,无法获取通知内容。
各种显示效果跟普通推送完全一样。
必须携带 "content-available" = 1;
必须携带 alert、badge、sound 中 至少 1 个字段。
仅 iOS 7 以后支持。
必须在 Xcode 工程中 TARGETS - Capabilities - Background Modes - Remote notifications 开启该功能,具体可参照 iOS 7 Background Remote Notification。
App:
通知内容类似如下:
{
"_j_msgid" = 2090737306;
aps = {
alert = "显示内容";
badge = 1;
"content-available" = 1; // 必带字段
sound = default;
};
key1 = value1;
}
处于前台,可通过didReceiveRemoteNotification(iOS 7 before)didReceiveRemoteNotification:fetchCompletionHandler:(iOS 7 after) 获取通知内容。
处于后台,可通过 didReceiveRemoteNotification:fetchCompletion Handler: 获取通知内容 // 获取情况中与普通推送的唯一不同点,此时 iOS 系统允许开发者在 App 处于后台的情况下,执行一些代码,大概提供几分钟的时间,可以用来偷偷的刷新 UI、切换页面、下载更新包等等操作。
处于退出,无法获取通知内容。
点击图标启动,无法获取通知内容。
点击推送横幅启动,在 didFinishLaunchingWithOptions 获取通知内容。
就是我们在手机上平时见到的推送通知。
包含声音、横幅、角标、自定义字段。
App :
通知内容类似如下:
{
"_j_msgid" = 200806057; // 第三方附带的 id,用于统计点击
aps = {
alert = "显示内容";
badge = 1; // App 角标,可推送 n、+n、-n 来实现角标的固定、增加、减少
sound = default; // 推送声音,默认系统三全音,如需使用自己的声音,需要将声音文件拖拽&拷贝至 Xcode 工程目录任意位置,并在推送时指定其文件名
};
key1 = value1; // 自定义字段,可设置多组,用于处理内部逻辑
key2 = value2;
}
处于前台,不会展示横幅,可通过 didReceiveRemoteNotification(iOS 7 before)didReceiveRemoteNotification:fetchCompletionHandler:(iOS 7 after)获取通知内容(前台展示横幅的方法看这里)。
处于后台,会展示横幅,无法获取通知内容。
处于退出,会展示横幅,无法获取通知内容。
点击图标启动,无法获取通知内容。
点击通知横幅启动,在 didFinishLaunchingWithOptions 获取通知内容。
普通推送
后台推送
静默推送
{
"_j_msgid" = 3938587719;
aps = {
alert = "";
"content-available" = 1; // 必带字段
};
key1 = value1;
}
推送目标篇
别名、标签、Registration ID 均是第三方提供的用于更方便地指定推送目标的功能。
Tip 6:推送根据目标的不同可分为:
广播
无差别发送给所有用户。
别名 alias 推送
第三方提供的功能
一个手机的一款 App 只能设置一个 alias(可修改)。
建议对每一个用户都取不同的别名,以此来确定唯一的用户(也可多个用户取 1 个别名)。
推送时可指定多个 alias 来下发同一内容。
仅指定 alias 的用户能够收到推送。
标签 tag 推送
第三方提供的功能。
可设置多个、可增加、清空。
用于指定多样的属性,如 『1000』+『daily』+『discount』 可用于表示月消费超过 1k、喜欢购买日用品、偏好折扣商品的用户。
如果要删除,需要在上次设置时,将设置的 tags 保存至 NSUserDefaults,本次剔除不需要的 tag 后,再重新设置。
推送时可指定多个 tag 来下发同一内容。
手机如果设置了推送指定的多个 tag 中任一个tag,都能够收到推送消息。如指定 『1000』+『globe』+『original』 (千元级消费者、全球购、原价),那么设置了 『100』+『globe』+『discount』(百元级消费者、全球购、折扣价)的用户可以收到该推送消息。
Registration ID 推送
第三方提供的功能。
在 Tip 3 的第 3 步时将 deviceToken 提供给第三方之后,其服务器会自动生成的指向该手机的唯一 id。
可在推送时指定多个 id 来下发消息。
可用于对核心用户、旗舰用户的精准推送。
应用内消息篇
Tip 7:应用内消息(以下简称消息 )和推送通知的区别,消息:
不需要 Apple 推送证书。
由第三方的服务器下发,而不是 APNs。
相比通知,更快速,几乎没有延迟,可用于 IM 消息的即时送达。
能够长时间保留离线消息,可获取所有历史消息内容。
通过长连接技术下发消息,因此:
手机必须启动并与第三方服务器建立连接。
如果手机启动立刻切至后台,很可能连接没有建立。
手机必须处于前台才能收到消息。
手机从后台切回前台,会自动重新建立连接,并收到离线消息。
没有任何展示(横幅、通知中心、角标、声音),因此可以:
自定义字段实现 UI 效果。
完全在静默情况下处理 App 内部逻辑。
使用一些 App Store 审核不会通过的功能,在审核时关闭功能,上架后通过接收消息,开启相关功能。
组合大招篇
Tip 8:tags 的组合技巧
见 Tip 5 - 标签 tag 推送。
可以在服务端来统计分析用户行为,然后将指定的 tags 发送至手机,手机接收后再为用户打上对应的 tags。
Tip 9:通知+消息的组合技巧
首先来看通知和消息特性的对比:
由于各自的特性都存在差异,因此二者结合使用是使得 App 推送性能最大化的必然选择: