苹果推送通知服务(Apple Push Notification Service) 简称APNS. 是iOS应用中十分常见的一种交互方式.
APNS依托一个或几个系统常驻进程运作, 接管所有应用的消息推送, 所以可看作是独立于应用之外, 而且是设备和苹果服务器之间的通讯, 而非应用的提供商服务器.
这和 Android不同, Android更像是传统桌面电脑系统的做法. 每个需要后台推送的应用有各自的单独后台进程, 才能和各自的服务器通讯, 交换数据.
另外其实 Android 也有类似 APNS 的 GCM(Google Cloud Message),属于开发者可选,非强制.
所以你大概看出来区别,iOS 的消息推送机制面世之时是一种全新的解决方案(堪称平台中的平台),应用本身不能有常驻的后台进程,系统的开销少,内存使用更少,电量也
更少(把更多的运算和资源开销放在云端,非设备端)。而 Android 的特点,虽然开销大,优点是更稳定快速,但不明显。
APNS的工作原理:
1. App向设备请求是否允许使用通知服务
2. 设备会携带App名向苹果的推送通知服务器发送允许接受通知服务的请求
3. 苹果推送通知服务器将deviceToken和App名发送给设备
4. App将deviceToken等信息发送至我们自己的存储通知内容的服务器
5. 我们自己的存储通知内容的服务器将deviceToken和通知内容发送给苹果推送通知服务器
6. 苹果推送通知服务器最后将通知内容按照deviceToken下发到设备
APNS的使用:
1. 在https://developer.apple.com/account/ios/identifiers/bundle/bundleList.action中注册App的id
2. 在https://developer.apple.com/account/ios/certificate/certificateList.action?type=development中注册APNS推送证书下载并安装
3. 一般的APNS都是在AppDelegate中进行.
1). 首先要注册通知服务, 由于iOS8.0之后的推送通知注册方法改变, 所以要进行设备的系统版本判断
// 注册通知服务
if ([UIDevice currentDevice].systemVersion.floatValue < 8.0) {
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)];
} else {
UIUserNotificationSettings* settings = [UIUserNotificationSettings settingsForTypes:(
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert) categories:nil];
[application registerUserNotificationSettings:settings];
[ application registerForRemoteNotifications];
}
4. 注册成功调用的方法
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
5. 注册失败调用的方法
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
6. 接送推送消息的触发方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
另: 推送中经常出现在icon上的角标 [UIApplication sharedApplication].applicationIconBadgeNumber