Apple推送通知(四)silent APNS
前言
我在上一篇文章中介绍了传统的APNS推送的原理和配置,以及调用的方法。使用传统的APNS推送最大的限制就是字节数的限制,payload最大不能超过256 bytes。而有时往往我们需要更多的信息推送,这时我们就需要用到silent APNS
简介
silent APNS
是iOS 7新加的一个非常好的特性,和以往传统的APNS最大的不同是,当一个silent APNS
推送到设备时,iOS系统并不会用弹出框提示内容,也不会听到声音,看到图标上的badge,用户不会知道任何事情。而silent APNS
与传统的APNS相同的是,当推送到设备时,如果App处于激活状态则会调用到相同的系统方法,来让App获取到推送的信息,然后我们可以在App中发起HTTP请求,获取我们想要的数据,之后再展示给用户。
设置
silent APNS
和传统的APNS对于证书,签名的设置都是一样的。我们需要在Xcode设置UIBackgroundModes.
1 | <key>UIBackgroundModes</key> |
Xcode设置图:
Json数据
我们在传统的APNS中想要收到的消息是以JSON格式提供的,类似于下面这样:1
2
3
4
5
6
7{
"aps":{
"alert": "Hello, world!",
"sound": "default"
"badge": "2"
}
}
而在silent APNS
中我们需要设置推送的payload为下面的JSON格式1
2
3
4
5
6{
"aps":{
content-available: 1
"alert": {...}
}
}
注册deviceToken
我们在上一节中已经清楚讲了在我们的项目中添加注册设备的deviceToken
,获取deviceToken
的方法,而关于silent APNS
最大的不同之处是我们需要注册的类型不同.
在传统的APNS中,我们使用注册UIRemoteNotificationTypeAlert
, UIRemoteNotificationTypeBadge
, UIRemoteNotificationTypeSound
1
2
3
4
5
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert |UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound)];
}
而在silent APNS
中,我们需要多注册一个UIRemoteNotificationTypeNewsstandContentAvailability
类型
1 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
推送调用
当APNS
消息推送过来的时候,传统的APNS会直接使用声音、弹出框等提示用户,通过点击消息就可以触发下面的方法,而在silent APNS
中,当推送到达设备时,如果App处于激活状态,则会自动调用下面的方法:
1 | -(void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo fetchComplet ionHandler:(void (^) (UIBackgroundFetchResult))completionHandler{ |
我们在silent APNS
中需要做的就是通过在上面的回调方法中加入自己的逻辑,譬如根据推送过来的信息发起HTTP请求,获取更多想要展示的数据,然后再利用localNotification
或者是其他手段将信息展示给用户,就可以很好的通过Apple推送通知来增强用户体验。