
1.應(yīng)用程序注冊APNs推送消息。
說明:
a.只有注冊過的應(yīng)用才有可能接收到消息诈泼,程序中通常通過UIApplication的registerUserNotificationSettings:方法注冊仙蚜,iOS8中通知注冊的方法發(fā)生了改變,如果是iOS7及之前版本的iOS請參考其他代碼厂汗。
b.注冊之前有兩個前提條件必須準備好:開發(fā)配置文件(provisioning profile,也就是.mobileprovision后綴的文件)的App ID不能使用通配ID必須使用指定APP ID并且生成配置文件中選擇Push Notifications服務(wù)呜师,一般的開發(fā)配置文件無法完成注冊娶桦;應(yīng)用程序的Bundle Identifier必須和生成配置文件使用的APP ID完全一致。
2.iOS從APNs接收device token汁汗,在應(yīng)用程序獲取device token衷畦。
說明:
a.在UIApplication的-(void)application:(UIApplication )application didRegisterForRemoteNotificationsWithDeviceToken:(NSData )deviceToken代理方法中獲取令牌,此方法發(fā)生在注冊之后知牌。
b.如果無法正確獲得device token可以在UIApplication的-(void)application:(UIApplication )application didFailToRegisterForRemoteNotificationsWithError:(NSError )error代理方法中查看詳細錯誤信息祈争,此方法發(fā)生在獲取device token失敗之后。
c.必須真機調(diào)試角寸,模擬器無法獲取device token菩混。
3.iOS應(yīng)用將device token發(fā)送給應(yīng)用程序提供商忿墅,告訴服務(wù)器端當前設(shè)備允許接收消息。
說明:
a.device token的生成算法只有Apple掌握沮峡,為了確保算法發(fā)生變化后仍然能夠正常接收服務(wù)器端發(fā)送的通知疚脐,每次應(yīng)用程序啟動都重新獲得device token(注意:device token的獲取不會造成性能問題,蘋果官方已經(jīng)做過優(yōu)化)邢疙。
b.通彻髋可以創(chuàng)建一個網(wǎng)絡(luò)連接發(fā)送給應(yīng)用程序提供商的服務(wù)器端, 在這個過程中最好將上一次獲得的device token存儲起來坤候,避免重復(fù)發(fā)送亲雪,一旦發(fā)現(xiàn)device token發(fā)生了變化最好將原有的device token一塊發(fā)送給服務(wù)器端嘿期,服務(wù)器端刪除原有令牌存儲新令牌避免服務(wù)器端發(fā)送無效消息。
4.應(yīng)用程序提供商在服務(wù)器端根據(jù)前面發(fā)送過來的device token組織信息發(fā)送給APNs蛮原。
說明:
a.發(fā)送時指定device token和消息內(nèi)容,并且完全按照蘋果官方的消息格式組織消息內(nèi)容聪廉,通常情況下可以借助其他第三方消息推送框架來完成瞬痘。
5.APNs根據(jù)消息中的device token查找已注冊的設(shè)備推送消息。
說明:
a.正常情況下可以根據(jù)device token將消息成功推送到客戶端設(shè)備中板熊,但是也不排除用戶卸載程序的情況框全,此時推送消息失敗,APNs會將這個錯誤消息通知服務(wù)器端以避免資源浪費(服務(wù)器端此時可以根據(jù)錯誤刪除已經(jīng)存儲的device token干签,下次不再發(fā)送)津辩。