### 簡介
iOS 7在推送方面最大的變化就是允許:應用收到通知后在后臺(background)狀態下運行一段代碼,可用于從服務器獲取內容更新。功能使用場景:(多媒體)聊天,Email更新,基于通知的訂閱內容同步等功能,提升了終端用戶的體驗。
Remote Notifications 與之前版本的對比可以參考下面兩張 Apple 官方的圖片便可一目了然。


如果只攜帶content-available: 1 不攜帶任何badge,sound 和消息內容等參數,則可以不打擾用戶的情況下進行內容更新等操作即為“Silent Remote Notifications”。
### 客戶端設置
開啟Remote notifications
需要在Xcode 中修改應用的 Capabilities 開啟Remote notifications,請參考下圖:

修改通知處理函數
當注冊了Backgroud Modes -> Remote notifications 后,notification 處理函數一律切換到下面函數,后臺推送代碼也在此函數中調用。
~~~
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
~~~
### 服務端推送設置
推送消息攜帶 content-available: 1 是Background 運行的必須參數,如果不攜帶此字段則與iOS7 之前版本的普通推送一樣。
### 限制與注意
● “Silent Remote Notifications”是在 Apple 的限制下有一定的頻率控制,但具體頻率不詳。所以并不是所有的 “Silent Remote Notifications” 都能按照預期到達客戶端觸發函數。
●?“Background”下提供給應用的運行時間窗是有限制的,如果需要下載較大的文件請參考 Apple 的 NSURLSession 的介紹。
●?“Background ?Remote Notification” ?的前提是要求客戶端處于Background 或 Suspended 狀態,如果用戶通過 App Switcher 將應用從后臺 Kill 掉應用將不會喚醒應用處理 background 代碼。
更詳細的說明資料請查閱 Apple 官方的 iOS 開發文檔。
本文摘自:[極光push](http://docs.jpush.cn/display/dev/iOS+7+Background+Remote+Notification)