天天看點

iOS Push Notification注意事項

推送的原理是,iphone連着唯一的一條連接配接到apple的伺服器,由apple的伺服器連接配接到各種郵件、天氣、qq、微網誌伺服器。平時就靠apple的伺服器與各伺服器溝通,有新消息時,才告訴iphone。是以非常省流量,而且省電。iphone可以把所有的第三方程序kill掉,系統底層維持着與apple伺服器的連接配接。而android必須保留程序才能接收資訊。在推送之前很多智能系統隻能通過輪詢的方式不斷定期向伺服器詢問是否有新資訊,往往費電和費流量。 

消息推送不支援群發,隻能一個一個發.如果你的App有100萬個使用者,要發消息怎麼辦? 一個一個的發呗,發100萬次.消息包大概包括兩部分:标示使用者手機的id(32個位元組)+消息體(<=256Bytes),消息體是json字元串,傳輸過程用ssl加密 

deviceToken生成之後不是永遠不變化的,當重裝系統後将發生變化,正因為token有可能改變,是以建議在app start的時候即,(didFinishLaunchingWithOptions)的時候調用registerForRemoteNotificationTypes,來檢測deviceToken是否改變, 如果改變則傳送給push伺服器,token應該存在本地用來判斷是否變化,最好的方法是你第一次擷取到deviceToken之後,也送出,然後存在本地,之後每次都比較,發現有變化,就更新你的伺服器上的記錄,那麼舊device在push伺服器中的record怎麼辦,一般是發送給APNS 然後通過他的回報消息來處理使用者在device裡删除app,調用registerForRemoteNotificationTypes後,成功注冊後 APNS傳回token,然後回調delegate的方法didRegisterForRemoteNotificationsWithDeviceToken如果注冊失敗則調用,didFailToRegisterForRemoteNotificationsWithError 

注意點:在第一次調用registerForRemoteNotificationTypes,方法時候沒有聯網,則回調的delegate方法不回調用,在第一次調用registerForRemoteNotificationTypes,注冊成功之後,之後即使沒有聯網,在調用registerForRemoteNotificationTypes,方法時候會把上一次的devicetoken作為最新的token,使用者在第一次安裝app的時候,是一定會向APNS發送手機注冊消息,然後APNS 給出使用者提示 是否本地接受推送,如果接受則在通知中的包括,不能推送 則在通知中心的不包括(隻要設定了都會向本地發消息 接受與否在于本地設定)。此時如果解除安裝app重新安裝的話,則使用者不會再次收到推送本地判斷。而預設是讓使用者可以接受本地可以接受推送消息,此時如果使用者不想接受推送消息可以去通知中心設定