項目用到了APNs推送(采用了極光推送),推送的用法什么的在此就不做贅述了。app中有這樣一個功能,親友測量了血壓,然后其他親友會收到相應的推送,然后點擊查看。OK,非常簡單。
然后就開始了,用戶通過血壓計測量了血壓以后,上傳數據至app,然后app簡單處理以后上傳數據至服務器,服務器經過計算,然后推送響應的消息至其他客戶端。做后台的同學把數據處理完成以后,然后就推過來了。格式大概是這樣子的:
{"ios":{"sound":"","badge":"+1","alert":"{\"createtime\":\"1449714357908\",\"data\":{\"bp\":{\"age\":\"6\",\"borthday\":\"2009-10-13 00:00:00.0\",\"diastolic_pressure\":\"100\",\"family_role\":\"yeye\",\"id\":\"26006\",\"nikename\":\"**\",\"occupation\":\"體力勞動\",\"pulse\":\"80\",\"save_time\":\"1449714357000\",\"sex\":\"男\",\"source\":\"測試設備來源\",\"state\":\"0\",\"systolic_pressure\":\"120\",\"userbh\":\"18351883607\",\"userid\":\"291\"},\"prop\":{\"healthclasstype\":\"3\",\"healthsuggests\":\"您的血壓測量值過高,請嚴格調整作息,控制飲食,戒煙戒酒。如遇身體不適,請及時就診。請密切關注血壓,每天測量。\",\"healthtip\":\"您患有中度高血壓,請遵醫囑控制血壓。\",\"memo\":\"\"}},\"msgtype\":\"1\"}"}}
OK,收到推送以后,紅色字體部分作為alert內容被直接推送過來了。但是,需要的效果是這樣的:**測量了血壓,血壓過高。;Android的做法是收到推送以后,再進行處理,然后才顯示推送消息,然后也實現了,我說iOS實現不了,至少我所接觸到的沒有人這么做啊。主管說了,不可能吧?你去再查一查。好了,那就扒一扒apple的官方文檔吧。
https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW20 ,
官方的解釋是這樣的:
alert的value類型可以為string或者dictionary,如果是string的話,這個string將直接作為alert的內容推送過來,如果是dictionary,則參照下邊的圖片
title作為消息的title,body作為alert的內容。說白了,alert的內容不能自己二次處理。從蘋果推送的機制上來看,也是不能修改alert內容的,因為蘋果的推送是由蘋果推送中心推過來的,然后點擊推送的消息進入app以后才有機會去處理消息內容,所以不可能在消息過來之前app先處理再顯示推送。
以上。

