記錄一下前段時(shí)間的產(chǎn)品提出的坑爹需求碍沐。前段時(shí)間要求實(shí)現(xiàn)商家收款訂單的語音播報(bào)功能, 并且要求實(shí)現(xiàn)的功能是點(diǎn)擊APP進(jìn)入后臺(tái)或者APP進(jìn)程殺死之后辙浑,依舊能收到語音播報(bào)激涤,于是只能考慮蘋果的推送擴(kuò)展(Notification Service Extension), 在網(wǎng)上查找了一番教程之后,發(fā)現(xiàn)蘋果在iOS12.1后就禁用了里面的AVAudioPlayerimage.png
于是開始了漫漫填坑之路判呕,由于要求app后臺(tái)也能播報(bào)倦踢,那么就只能使用推送進(jìn)行。好在蘋果雖然禁用了語音推送侠草,但推送時(shí)的sounds我們還可以自定義(沒錯(cuò)辱挥,就是我們平常微信聽到的那聲叮咚!)這個(gè)sounds有個(gè)最大播放時(shí)長(zhǎng),大概是在10s左右边涕,所以語音文字不能太長(zhǎng)晤碘,語速也盡量控制的快一點(diǎn),我們是直接上萬能的淘寶找人專門錄了一套語音文件功蜓,包括xxx收款园爷,個(gè)十百千萬,1234567890等等這些式撼。然后再根據(jù)收到的錢進(jìn)行語音拼接合成童社。
之后又遇到個(gè)新的問題,推送擴(kuò)展和主項(xiàng)目工程其實(shí)相當(dāng)于兩個(gè)獨(dú)立的target著隆,我們將語音文件放在主工程目錄下扰楼,Notification Service Extension是無法直接訪問聲音文件的。---這個(gè)時(shí)候就需要用到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可以使兩個(gè)不同的Target(或者APP與其Extension)之間進(jìn)行數(shù)據(jù)共享弦赖。
AppGroup的創(chuàng)建也非常簡(jiǎn)單:
1.在Apple Developer中配置APP的App ID時(shí),勾選AppGroups選項(xiàng):
2.創(chuàng)建AppGroup
3.將APP Groups添加到APP ID中抵代√诮冢回到步驟1創(chuàng)建的APP ID那里,可以看到APP Groups選項(xiàng)為黃色待編輯狀態(tài),點(diǎn)擊Edit將步驟2創(chuàng)建的APP Groups添加進(jìn)去
4.將APP Groups添加到Xcode工程中
這樣處理好了之后就可以在NotificationServiceExtension里面愉快的訪問聲音文件了庆冕。之后我們只需要在NotificationServiceExtension解析推送數(shù)據(jù),合成語音劈榨,播放即可访递。下面上代碼,文中會(huì)有注釋
PS:關(guān)于代碼中的拼接播報(bào)語音同辣,之前我們是想本地合成語音來著拷姿,但是由于收到推送后再臨時(shí)去合成語音+播放,這個(gè)時(shí)間太短(推送的那聲sounds也就10s~)怕來不及旱函,就采用了先后臺(tái)合成語音片段再推送過來的方式响巢。并且安卓那邊也采用后臺(tái)合成的語音片段,便于兩端統(tǒng)一棒妨。