iOS后臺語音播報技術(shù)實現(xiàn)

記錄一下前段時間的產(chǎn)品提出的坑爹需求。前段時間要求實現(xiàn)商家收款訂單的語音播報功能, 并且要求實現(xiàn)的功能是點擊APP進入后臺或者APP進程殺死之后,依舊能收到語音播報,于是只能考慮蘋果的推送擴展(Notification Service Extension), 在網(wǎng)上查找了一番教程之后,發(fā)現(xiàn)蘋果在iOS12.1后就禁用了里面的AVAudioPlayer
image.png

于是開始了漫漫填坑之路,由于要求app后臺也能播報,那么就只能使用推送進行。好在蘋果雖然禁用了語音推送,但推送時的sounds我們還可以自定義(沒錯,就是我們平常微信聽到的那聲叮咚!)這個sounds有個最大播放時長,大概是在10s左右,所以語音文字不能太長,語速也盡量控制的快一點,我們是直接上萬能的淘寶找人專門錄了一套語音文件,包括xxx收款,個十百千萬,1234567890等等這些。然后再根據(jù)收到的錢進行語音拼接合成。

之后又遇到個新的問題,推送擴展和主項目工程其實相當于兩個獨立的target,我們將語音文件放在主工程目錄下,Notification Service Extension是無法直接訪問聲音文件的。---這個時候就需要用到APP Group了。下面是APP Group的介紹

  • AppGroup allows data sharing between two different apps or even app and widgets by creating one common shared path (like document directory). Data saved over there can be accessed by any app which is associated with that particular AppGroup. It is an offline data sharing between apps.
    這段蘋果說明告訴我們:App Groups可以使兩個不同的Target(或者APP與其Extension)之間進行數(shù)據(jù)共享。

AppGroup的創(chuàng)建也非常簡單:
1.在Apple Developer中配置APP的App ID時,勾選AppGroups選項:


image.png

2.創(chuàng)建AppGroup


image.png

3.將APP Groups添加到APP ID中?;氐讲襟E1創(chuàng)建的APP ID那里,可以看到APP Groups選項為黃色待編輯狀態(tài),點擊Edit將步驟2創(chuàng)建的APP Groups添加進去
image.png

4.將APP Groups添加到Xcode工程中
image.png

處理好了APPGroup之后。檢查項目工程目錄應該會是這樣子
image.png

這樣處理好了之后就可以在NotificationServiceExtension里面愉快的訪問聲音文件了。之后我們只需要在NotificationServiceExtension解析推送數(shù)據(jù),合成語音,播放即可。下面上代碼,文中會有注釋


image.png

image.png

PS:關(guān)于代碼中的拼接播報語音,之前我們是想本地合成語音來著,但是由于收到推送后再臨時去合成語音+播放,這個時間太短(推送的那聲sounds也就10s~)怕來不及,就采用了先后臺合成語音片段再推送過來的方式。并且安卓那邊也采用后臺合成的語音片段,便于兩端統(tǒng)一。

最后總結(jié)一下邏輯實現(xiàn),通過Notification Service Extension實現(xiàn)后臺播報,通過AppGroups實現(xiàn)聲音文件訪問。最后再通過修改推送sounds實現(xiàn)播報語音的目的。缺點是語音不能太長,所以字盡量精簡,播報文件的語速盡量放快。另外,項目采用極光推送,需要將mutable-content設(shè)置為1才可生效

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容