關(guān)于iOS推送如何配置,這個(gè)大家都不陌生了拇涤,但我今天要講的是收到推送后捣作,即使用戶不點(diǎn)擊,也要第一時(shí)間在程序處理一些邏輯鹅士,刷新UI券躁,或者運(yùn)行一段代碼。
需求是這樣的:當(dāng)我應(yīng)用收到推送時(shí),不管用戶有沒(méi)有點(diǎn)擊推送通知也拜,要馬上連接打印機(jī)以舒,并打印出小票。我在網(wǎng)上查了好多資料慢哈,發(fā)現(xiàn)都不是很齊全蔓钟,所以我自己決定寫(xiě)一下。
關(guān)于前期推送的配置我就不說(shuō)了岸军,本文主要講的是收到推送后的后臺(tái)操作奋刽,關(guān)于推送有兩種瓦侮,一種是普通推送(有聲音艰赞,有提醒),另一種是靜默推送(沒(méi)有文字沒(méi)有聲音)只用于后臺(tái)刷新用肚吏》窖可以根據(jù)需求選擇,我用的普通推送罚攀。
其實(shí)做下來(lái)也很簡(jiǎn)單党觅,只不過(guò)要自己踩踩坑。斋泄。杯瞻。
第一步:
你要后臺(tái)操作,一定要打開(kāi)后臺(tái)刷新的開(kāi)關(guān):
第二步:
我們來(lái)到了AppDelegate炫掐,關(guān)于接受推送的代理方法我就不詳細(xì)講了魁莉,這里只講到一個(gè):
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:
(void (^)(UIBackgroundFetchResult))completionHandler
這個(gè)方法是應(yīng)用在后臺(tái)接收到推送的回調(diào),在這方法里可以編寫(xiě)我們的后臺(tái)操作代碼募胃,關(guān)于這里的代碼我是這樣寫(xiě)的:
這里有一個(gè)需要注意的是:
completionHandler(UIBackgroundFetchResultNewData);
這個(gè)回調(diào)是告訴系統(tǒng)旗唁,我后臺(tái)操作完畢了,之后應(yīng)用又會(huì)變成墓碑模式痹束,所以這個(gè)回調(diào)一定要在所有操作完成后再回調(diào)检疫,我一開(kāi)始沒(méi)留意,所以代碼總是跑一半就不執(zhí)行了祷嘶,調(diào)試半天才發(fā)現(xiàn)是這個(gè)問(wèn)題屎媳,這個(gè)一定要注意!B畚 烛谊!所以我最后在所有延時(shí)操作都完畢后再回調(diào),這樣就沒(méi)問(wèn)題了环壤。
好了晒来,到這里你就以為可以收到推送后臺(tái)操作了嗎?還少了一步郑现,最后一步需要后臺(tái)協(xié)助湃崩。
第三步:
一定要叫后臺(tái)小伙伴在推送的時(shí)候加多一個(gè)字段:
"content-available":1
加了這個(gè)字段才會(huì)觸發(fā)那個(gè)后臺(tái)接受推送的代理方法荧降。
好了,到這里攒读,基本就可以完成接受推送后臺(tái)操作了朵诫,其實(shí)也很簡(jiǎn)單,把我踩到的坑也說(shuō)了一下薄扁。