今天遇到的產品需求是類似美團外賣,當有訂單推送的時候,提示“您有新訂單了”這樣的提示音。一般的通知還是用的系統的提示音。本來以為一會會就搞定,結果用了快兩小時的時間。不多說,上代碼:
1.項目用的是極光推送。所以直接在這個方法中,將收到的通知內容進行解析。我們的需求是當后臺給的字段“extrasparam”等于2的時候是訂單,播放自定義聲音。別的類型播放系統聲音。系統聲音列表詳見:iOS 系統提示音列表,小伙伴們不要忘了將你們的自定義聲音,改成和后臺配置的“sound”字段的值一致,拖入工程中,記得要是caf格式的,切記切記。(我們用的是sound.caf, 哈哈)
2.但是這樣做的話,只有在App出于前臺的時候才會播放自定義聲音。因為將自定義聲音的名稱改為和后臺小哥哥配置的值一致,導致App后臺的時候,不管什么類型的通知,播放的都是自定義聲音,難受~
嘗試一:在- (void)jpushNotificationCenter:(UNUserNotificationCenter*)center didReceiveNotificationResponse:(UNNotificationResponse*)response withCompletionHandler:(void(^)())completionHandler;方法中,調用更改通知聲音方法,結果失敗。原因是這個方法是在用戶點擊聲音的時候才會調用。但是我不要啊,我要推送過來的時候就播放自定義聲音啊!
嘗試二:讓后臺小哥哥給我推送消息,然后在收到自定義消息的時候在發送一個本地通知。結果還沒實施就看到極光的官方文檔中寫到:
因為推送消息的話是不經過蘋果的APNs,相當于是App內部的消息。
解決辦法:
自己找了好多文檔和博客看,都沒有很好的解決我的問題。靈機一動,讓后臺小哥哥給我傳sound的值的時候加個判斷唄。也就是當extrasparam = 2的時候,sound的值是“sound.caf”,其他的時候值是“normal.caf”。我工程里的聲音命名為“sound.caf”,哈哈,簡單粗暴,完美解決。