本地推送和遠程推送

1.本地推送算法

本地通知是有本地應用觸發的,它是基於時間行爲的一種通知形式,例如鬧鐘定時、代辦事項提醒,又或者一個應用在一段時間後不使用一般服務器

會提示用戶使用此應用等都是本地通知。建立一個本地通知一般分爲如下幾個步驟:網絡

  1.建立UILocalNotification。app

  2.設置處理通知的時間fireDate。框架

  3.配置通知的內容:通知主體、通知聲音、圖表數字等。性能

  4.配置通知傳遞的自定義數據參數userInfo(這一步可選)。優化

  5.調用通知,可使用scheduleLocalNotification:按計劃調度一個通知,也可使用presentLocalNotificationNow當即調用通知。spa

 

2.遠程推送代理

和本地推送不一樣,遠程推送通知是由應用服務提供商發起的,經過蘋果的APNS(Apple Push Notification Server)發送到應用客戶端。調試

PushNotification_FlowChart

遠程通知的過程能夠分爲如下幾步:

  1.應用服務提供商從服務器端把要發送的消息和設備令牌(device token)發送給蘋果的消息推送服務器APNS。

  2.APNS根據設備令牌在已註冊的設備(iPhone、iPad、iTouch、mac等)查找對應的設備,將消息發送給相應的設備。

  3.客戶端設備接收到的消息傳遞給相應的應用程序,應用程序根據用戶設置彈出通知消息。

固然,這只是一個簡單的流程,有了這個流程咱們還無從下手編寫程序,將上面的流程細化能夠獲得以下流程圖,在這個過程當中會提到如何在程序中完成這些步驟:

PushNotification_FlowChartDetail

1.應用程序註冊APNs推送消息。

說明:

a.只有註冊過的應用纔有可能接收到消息,程序中一般經過UIApplication的registerUserNotificationSettings:方法註冊,iOS8中通知註冊的方法發生了改變,若是是iOS7及以前版本的iOS請參考其餘代碼。

b.註冊以前有兩個前提條件必須準備好:開發配置文件(provisioning profile,也就是.mobileprovision後綴的文件)的App ID不能使用通配ID必須使用指定APP ID而且生成配置文件中選擇Push Notifications服務,通常的開發配置文件沒法完成註冊;應用程序的Bundle Identifier必須和生成配置文件使用的APP ID徹底一致。

2.iOS從APNs接收device token,在應用程序獲取device token。

說明:

a.在UIApplication的-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken代理方法中獲取令牌,此方法發生在註冊以後。

b.若是沒法正確得到device token能夠在UIApplication的-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error代理方法中查看詳細錯誤信息,此方法發生在獲取device token失敗以後。

c.必須真機調試,模擬器沒法獲取device token。

3.iOS應用將device token發送給應用程序提供商,告訴服務器端當前設備容許接收消息。

說明:

a.device token的生成算法只有Apple掌握,爲了確保算法發生變化後仍然可以正常接收服務器端發送的通知,每次應用程序啓動都從新得到device token(注意:device token的獲取不會形成性能問題,蘋果官方已經作過優化)。

b.一般能夠建立一個網絡鏈接發送給應用程序提供商的服務器端, 在這個過程當中最好將上一次得到的device token存儲起來,避免重複發送,一旦發現device token發生了變化最好將原有的device token一塊發送給服務器端,服務器端刪除原有令牌存儲新令牌避免服務器端發送無效消息。

4.應用程序提供商在服務器端根據前面發送過來的device token組織信息發送給APNs。

說明:

a.發送時指定device token和消息內容,而且徹底按照蘋果官方的消息格式組織消息內容,一般狀況下能夠藉助其餘第三方消息推送框架來完成。

5.APNs根據消息中的device token查找已註冊的設備推送消息。

說明:

a.正常狀況下能夠根據device token將消息成功推送到客戶端設備中,可是也不排除用戶卸載程序的狀況,此時推送消息失敗,APNs會將這個錯誤消息通知服務器端以免資源浪費(服務器端此時能夠根據錯誤刪除已經存儲的device token,下次再也不發送)。

相關文章
相關標籤/搜索