https://www.jianshu.com/p/d0ef94ee5282
https://www.jianshu.com/p/1ee3d75086c7
https://blog.csdn.net/sinat_27741463/article/details/102758611
https://www.jianshu.com/p/f326987c737e
http://www.cocoachina.com/articles/17769
https://www.jianshu.com/p/3260f864e5aa
iOS 遠程推送和本地推送時播放自定義音頻
先上結論:
在各平台及極光推送技術論壇看了大量技術貼后,總結了實現接到推送時播放音頻的幾種方法:
- 使用voip,即pushKit,是蘋果專為視頻通話開放的高優先級推送,此推送可支持很大程度的自定義,但是如果APP沒有視頻通話功能時使用這個方法,審核時很可能被拒,是一種偏方。我這里沒用這個方法。
- 使用靜默推送,然后在接受到推送之后創建本地推送,在本地推送中播放音頻。但是靜默推送每小時有次數限制。未采用此方法。
- 直接在推送中設置sound字段,sound字段支持自定義音頻,只需要將音頻拖到工程中,並在發送推送時將音頻全名放到sound字段中即可,系統會自動播放這段音頻。我這里直接用的這個方法,此方法注意事項及通知示例見下方。
- 使用Notification Service Extension,在推送回調里使用AVAudioSession來播放音頻,這個方法在iOS12.1之后已經不可用了。iOS12.1之前給出這個拓展推送主要是為了豐富推送的UI樣式,推送信息加密之類的,結果卻被用做推送語音播報,所以在12.1之后,在這個推送擴展里面AVAudioPlayer就失效了.
需要注意的是:
-
以上2,3方法,播放的音頻在默認情況下只有5秒左右,當通知欄收回時,音頻也會自動停止。想要播放更長的時間則需要在手機設置-》你的APP設置-》通知-》橫幅風格 改為持續,這樣推送通知不會收回,音頻就可以播放完。或者保證音頻在五秒左右也可以。
-
應用在后台時想觸發回調需要在推送中傳入字段:
"content-available":1
,或者"content-available":true
-
靜默推送需要設置
"mutable-content":1 //或true
,否則不會走target中的回調,且在一些版本的iOS系統下,target中回調不會斷點,但是會正常執行。
通知示例:
{"aps"=>{ "content-available" => 1, "alert" => { "title"=>"這是標題", "subtitle"=>"這是小標題", "body"=>"這是內容" }, "badge" => 1 "sound" => "one.wav" } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
極光推送觸發回調需勾選content-available,如下圖
IOS消息推送聲音默認使用系統聲音,可以支持自定義。
注意事項:
1.由於系統播放器播放支持的音頻格式系統默認三種aiff, wav, 和 caf (應用在前端后台不運行都可以播放,只要安裝應用能收到消息就可以)。
轉換方法(afconvert /System/Library/Sounds/Submarine.aiff ~/Desktop/sub.caf -d ima4 -f caff -v)。
2.音頻放在工程主目錄。
3.音頻時長不要超過30s。
4.音頻名稱要和{"aps":{"alert":"This is some fancy sound message.","badge":2,"sound": "sound.caf"}}要和推送的sound字段值保持一個可以自己定義。
5.真機運行,靜音模式聽不到。關閉靜音模式。
詳見官網:https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

作者:志閑真人
鏈接:https://www.jianshu.com/p/d0ef94ee5282
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。