推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的。一般说来,当要显示消息或下载数据的时候,通知是由远程服务器(程序的提供者)发送,然后通过苹果的推送通知服务(Apple Push Notification Service,简称apns)推送到设备的程序上。
推送的新消息可能是一条信息、一项即将到期的日程或是一份远程服务器上的新数据。在系统上展现的时候,可以显示警告信息或在程序icon上显示数字,同时,也可以播放警告音。一旦用户注意到程序有新的信息、时间或是数据,他们可以运行程序并访问新的内容。也可以选择忽略通知,这时程序将不会被激活。
推送原理
推送的实现方式:
- 客户端应用程序向apns注册通知服务,从
- APNS Server获取deviceToken。
-
- 客户端应用程序接受deviceToken。
- 客户度应用程序将deviceToken发送给push服务器端程序(Provider),也就是应用程序服务器。
- 当应用服务器需要向给客户端发送通知时,将通知发送给APNS服务器。
- APNS服务器将消息发送给客户端,然后有设备操作系统将通知发送给应用程序。
- (void)applicationDidFinishLaunching:(UIApplication *)app { |
// other setup tasks here.... |
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; |
} |
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken { |
const void *devTokenBytes = [devToken bytes]; |
self.registered = YES; |
[self sendProviderDeviceToken:devTokenBytes]; // custom method |
} |
|
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { |
NSLog(@"Error in registration. Error: %@", err); |
} |
客户端接受从apns得到得消息,并进行处理
- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif { |
NSString *itemName = [notif.userInfo objectForKey:ToDoItemKey] |
[viewController displayItem:itemName]; // custom method |
application.applicationIconBadgeNumber = notification.applicationIconBadgeNumber-1; |
} |
实现推送服务也需要服务器得参与,服务器端应用程序配置比较简单,参考apple文档