推送的原理主要分為以下幾步:
成都創(chuàng)新互聯(lián)公司于2013年創(chuàng)立,是專業(yè)互聯(lián)網技術服務公司,擁有項目網站設計、成都做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元托里做網站,已為上家服務,為托里各地企業(yè)和個人服務,聯(lián)系電話:13518219792
1.由App向iOS設備發(fā)送一個注冊通知,用戶需要同意系統(tǒng)發(fā)送推送。
2.iOS向APNs遠程推送服務器發(fā)送App的Bundle Id和設備的UDID。
3.APNs根據設備的UDID和App的Bundle Id生成deviceToken再發(fā)回給App。
4.App再將deviceToken發(fā)送給遠程推送服務器(自己的服務器), 由服務器保存在數據庫中。
5.當自己的服務器想發(fā)送推送時, 在遠程推送服務器中輸入要發(fā)送的消息并選擇發(fā)給哪些用戶的deviceToken,由遠程推送服務器發(fā)送給APNs。
6.APNs根據deviceToken發(fā)送給對應的用戶。
· APNs 服務器就是蘋果專門做遠程推送的服務器。
·deviceToken是由APNs生成的一個專門找到你某個手機上的App的一個標識碼。
· deviceToken 可能會變,如果你更改了你項目的bundle Identifier或者APNs服務器更新了可能會變。
很多應用都會實現(xiàn)推送功能,我們可以集成第三方框架實現(xiàn)推送功能,
比如:JPush推送:
個推:
下面來說說收到推送消息的邏輯處理
一、收到推送消息有三種情況:
1、應用未啟動(默認顯示在通知欄,或者鎖屏時顯示在鎖屏頁面)
2、應用在后臺掛起(默認顯示在通知欄,或者鎖屏時顯示在鎖屏頁面)
3、應用在前臺(默認不顯示)
二、點擊推送消息有兩種情況:1、應用未啟動 - 啟動這個時候如論是點擊推送消息打開應用還是點擊icon打開應用都會調用以下方法(具體的可以根據 userInfo 進行判斷):(只有重新打開APP和后臺殺死后在打開APP才會走下面的方法)
2、應用在后臺 - 應用在前臺應用在后臺掛起時點擊推送消息和應用在前臺時收到推送消息,都會調用以下方法:
ios 7 以上會調用下面這個方法
ios 10 會調用 下面的方法
應用在后臺掛起時默認是不調用該方法的,如果你需要接收到推送消息還沒點擊推送就調用該方法,可以讓服務器發(fā)給APNS時在aps 字典中加入:
aps = {
content-available = 1;
}
首先根據APP的狀態(tài)進行判斷 這里當APP在前臺顯示的時候根據需求我們沒有消息進行處理
第一步:發(fā)送通知
第二步:添加觀察者
第三步:進行頁面的跳轉,這地方有一個重點是如何獲取的當前頁面的然后才能夠實現(xiàn)跳轉
在此給View寫了一個分類方法
第四步:實現(xiàn)跳轉到目的controller
導語:
由于移動設備內存、CPU、電量的局限性,iOS 不允許 APP 的進程常駐后臺(事實上可以申請后臺運行一段時間,最長約 10 分鐘),這樣當用戶主動殺掉 APP,或者 APP 進入后臺超過約定時長時,就意味著該 APP 進程的結束。這在很大程度上保障了前臺 APP 的流暢性,也延長了手機的使用時長,獲得了較好的用戶體驗。但是這也意味著,服務器無法主動和用戶交互(如推送實時消息等)。為了解決這個限制,蘋果推出了 APNs,允許設備和服務器分別與蘋果的推送通知服務器保持長連接狀態(tài)。
iOS 的通知分為本地通知和遠程通知。本地通知是由本地應用觸發(fā)的,一般是基于時間的一種通知形式,如鬧鐘、待辦事件等的提醒。遠程通知是由開發(fā)商通過自己的服務器推送的一種通知形式,而 APNs 就是遠程通知功能的核心。
關于遠程推送,記住以下兩點就夠了:
這里就很清楚了,其實 APNs 的本質就是 服務器和客戶端之間的中介 。當服務器需要給客戶端推送消息時,先將消息發(fā)送給蘋果服務器,再由蘋果服務器找到對應設備推送下去。
那為什么還要走中介,不直接發(fā)送呢?因為這樣做一個設備(即所有 APP )只需要和蘋果的服務器建立一條長連接,而不需要每個 APP 都和服務器建立一條長連接。
可能有些人還是不太明白 APNs 的意義,覺得也只是將多個長連接變成了統(tǒng)一的一個長連接而已,有必要那么做嗎?
很有必要!
我們來看下 Android 的推送現(xiàn)狀就明白了。
Android 事實上也有類似于 APNs 的一套用于推送的服務,簡稱 GCM,即 Google Cloud Messaging。但由于 GCM 需要谷歌服務器的支持,在國內由于「墻」的原因基本不能使用。這下就熱鬧了,國內出現(xiàn)了一大堆第三方推送服務商,如華為推送、小米推送、極光推送等。APP 通過集成這些推送服務來實現(xiàn)推送功能,而這些推送服務為了保持自己的長連接不被殺死,采用了各種?;睢拘咽侄?,這也是 Android 手機使用不流暢的真兇。之前也有看到「 工信部要求國內安卓統(tǒng)一消息推送標準 」的新聞,工信部都這么重視,可見統(tǒng)一推送的意義非凡。
想要了解具體區(qū)別,可以參考這篇文章 「 國內 90%以上的 iOS 開發(fā)者,對 APNs 的認識都是錯的 」。
不言而喻,當然是盡早升級 HTTP/2 協(xié)議了。
參考:
(完)
ios開發(fā)如何實現(xiàn)消息推送機制,具體的操作如下:
1、首先注冊應用程序消息推送。
2、IOS跟服務器設備要設備口令。使用的應用程序接受設備口令。
3、然后經過應用程序將設備口令發(fā)送給蘋果的服務端程序。
4、服務端程序向蘋果服務發(fā)送消息。
5、蘋果服務將消息發(fā)送給iPhone應用程序。
6、最后,這樣就完成了ios開發(fā)消息推送機制。
想要使用消息推送系統(tǒng),推薦使用深圳極光的消息推送系統(tǒng)。極光緊密圍繞移動開發(fā)者需求,打造的開發(fā)者服務平臺,可以提供一站式SaaS服務,通過全面覆蓋PC、手機、傳感器、無線路由器等多種設備數據,打造全域數據平臺。當前,不斷更新的SaaS產品及服務已深受國內百萬開發(fā)者的認可和信賴。
ios可以使用socket,但是要想做到遠程推送可能還是需要apns機制,因為應用退到后臺的時候只有apns能處理蘋果服務器推送來的消息。iOS使用Socket的常用方式有如下:
(1)BSD Socket:是UNIX系統(tǒng)中通用的網絡接口,基于C語言,比較底層
(2)CF Socket:蘋果官方提供,來自于CoreFoundation框架
(3)AsyncSocket:對BSD Socket的封裝,OC語言
(4)ysocket:對BSD Socket的封裝,Swift語言
SOCKET原理:套接字(socket)是通信的基石,是支持TCP/IP協(xié)議的網絡通信的基本操作單元。是網絡通信過程中端點的抽象表示,包含進行。
建立Socket連接至少需要一對套接字,其中一個運行于客戶端,稱為ClientSocket,另一個運行于服務器端,稱為ServerSocket。建立連接時所需的尋址信息為IP地址和端口號。
進行遠程消息推送可以了解一下極光,極光就挺不錯的。JPush iOS 推送相比直接向 APNs 推送減少開發(fā)及維護成本:應用開發(fā)者不需要去開發(fā)維護自己的推送服務器與 APNs 對接。集成了 JPush iOS SDK 后不必自己維護更新 device token。
通過 JPush 的 Web Portal 直接推送,也可以調用 JPush 的 HTTP 協(xié)議 API 來完成,開發(fā)工作量大大減少。
注冊遠程通知并不難, 但怎么反注冊呢,我們都知道, 遠程通知的關閉,可以在手機- setting 中關閉. 那里的關閉是手機對app權限.可以理解成總開關吧.app 中也可以反注冊.如果手機中的通知權限是打開的,那怎么通過app 控制關閉遠程通知呢.下面我們來說說
-- 如果對你有幫助的話, 請留個 "喜歡"