iOS推送機制
原文地址:原文地址
研究了一下Apple Push Notification Service,實現很簡單,很環保.原理如下:
財大氣粗的蘋果提供了一堆伺服器,每個ios裝置和這些伺服器保持了一個長連線,ios版本更新提示,手機時鐘校準什麼的都是通過這個連線.
蘋果把這個長連線開放出來給大家推送訊息用,很積德,因為這是個全球服務,幾十億臺ios裝置,伺服器少說也需要上萬臺,還沒有錢可以賺. andorid的爸爸就不做這個,於是各個app為了發訊息,只能直接拼命賴在後臺維持一個長連線,電就是這樣被耗光的
蘋果提供訊息服務簡稱為APNS,只是是長連線機器的一部分,你要向你的使用者發訊息,必須通過apns中轉,你寫程式發給它,它轉發給你的手機,你的推送程式和使用者手機沒有直接聯絡
訊息推送不支援群發,只能一個一個發.如果你的App有100萬個使用者,要發訊息怎麼辦? 一個一個的發唄,發100萬次.訊息包大概包括兩部分:標示使用者手機的id(32個位元組)+訊息體(<=256Bytes),訊息體是json字串,傳輸過程用ssl加密的
標示使用者手機的ID 叫做 device tokens,每個手機都不一樣,deviceToken非常重要
推送流程:
- 首先是應用程式註冊訊息推送。
- IOS跟APNS Server要deviceToken。應用程式接受deviceToken。
- 應用程式將deviceToken傳送給PUSH服務端程式(Provider)。
- 服務端程式向APNS服務傳送訊息。
- APNS服務將訊息傳送給iPhone應用程式。
device tokens
device tokens每個機器都不一樣,比較獨一無二,但絕不是硬體碼,如果你重灌了ios系統,可能會發生變化.其實 device tokens 也是使用者的手機發起請求,由apns生成的,可以相信,apns後臺有一個key-value資料庫.
獲取device tokens 很簡單,只需要實現下面這個函式
(void)application:(UIApplication)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData)deviceToken
在這個函式裡面,你把deviceToken儲存到你伺服器上即可,這個函式是個call back函式,ios從apns得到deviceToken,就傳給它,你需要做的,寫一段儲存 這個token的程式碼注意:蘋果沒有承諾deviceToken的生成機制,隨時可能變化,最好的方法是你第一次獲取到deviceToken之後,也提交,然後存在本地,之後每次都比較,發現有變化,就更新你的伺服器上的記錄
app支援推送的技術實現
要實現推送功能,你需要幹如下幾件事情:
你需要寫3段程式
到蘋果開發者中心註冊一次,並下載一份cer檔案
從蘋果的Provisioning Portal,填寫並下載一個Provisioning Profile
先說2,3兩點
- 下載cer檔案,是推送程式要用,因為要通過ssl通道傳送資料
- 填寫並下載Provisioning Profile,並從xcode加入到你的app專案檔案中,你可以理解為辦手續,總不能無證亂髮吧
需要寫的3段程式分別是
前文提到的儲存device token的程式碼,很簡單的,隨便搭個http服務,用mysql建個表,你在app裡面用http post提交就行
第二段程式是:你的app必須做個標記,告訴ios,你會給使用者產生推送訊息,這個程式碼很簡單,一句話搞定
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)];
加在app初始化函式裡面即可
- 最後是:推送程式,這個程式碼量可能最多.邏輯很簡單:遍歷你的存放devictTokent的資料表,逐一發訊息給蘋果的APNS伺服器.推送程式,有很多開原始碼,用APNS為關鍵詞,一搜一大把,各種語言都有,改改就能用
蘋APNS伺服器地址:gateway.push.apple.com,埠是 2195
以前看到有人吹噓自己100萬使用者規模訊息推送,這個有技術含量麼? 就是1000萬使用者也得一個一個都發完,多程式?長連線?epoll? 能發多快,蘋果說了算
相關文章
- iOS分享機制iOS
- iOS 簽名機制iOS
- iOS的安全機制iOS
- iOS訊息機制iOS
- iOS推送之本地推送iOS
- iOS推送之遠端推送iOS
- iOS隱式動畫機制iOS動畫
- iOS 本地推送iOS
- iOS 推送整理iOS
- ios中推送iOS
- JavaScript是如何工作的: Web推送通知的機制JavaScriptWeb
- iOS 的看門狗機制iOS
- iOS 推送通知及推送擴充套件iOS套件
- IOS 蘋果官方推送iOS蘋果
- [譯] JavaScript 是如何工作的:Web 推送通知的機制JavaScriptWeb
- iOS——Objective C都有哪些鎖機制iOSObject
- 快速瞭解iOS簽名機制iOS
- iOS APP簽名機制詳解iOSAPP
- iOS開發-UITableView的重用機制iOSUIView
- JavaScript 工作原理之九-網頁訊息推送通知機制JavaScript網頁
- iOS推送——本地推送與遠端推送詳解(一圖看懂)iOS
- iOS 推送(蘋果原生態)iOS蘋果
- iOS本地通知(推送)iOS
- iOS 訊息轉發機制Demo解析iOS
- 二十三、iOS簽名機制(二)iOS
- iOS事件分發機制與實踐iOS事件
- iOS 開發--Objective-C 反射機制iOSObject反射
- iOS事件分發機制(二)The Responder ChainiOS事件AI
- IOS學習之NSNotificationCenter訊息機制iOS
- IOS 推送訊息 php做推送服務端iOSPHP服務端
- IOS原生接入友盟推送iOS
- iOS極光推送封裝iOS封裝
- IOS 訊息推送處理iOS
- iOS進階之訊息轉發機制iOS
- iOS 多工Multitasking、後臺機制解析iOS
- iOS中擴充套件機制Category和associativeiOS套件Go
- ios,android和javascript的UI事件機制iOSAndroidJavaScriptUI事件
- [分享]iOS開發- iOS反射機制: objc_property_t的使用iOS反射OBJ