蘋果推送通知服務(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