iOS12.1語音不播報問題

近日,好多支付語音播報App都遇到一個問題原來好好的語音播報在iOS12.1上無效了,這可急哭了一羣小夥伴,原因是在NotificationService新特性裏面爸爸禁用了audio session,下面是官方聲明

爲了解決這個問題,樓主也是想了幾種方案:

第一種方案:既然播報不了那是不是可以使用內置語音包,通過推送不同的sound字段來控制播報,答案肯定是可以的,不過這樣有一個弊端會導致IPA包會比較大,至於語音文件可以使用科大訊飛或是百度語音合成來生成,樓主使用的Python生成的語音包;

使用腳本生成了10000個語音文件,但是這時候卻發現10000音頻文件竟然有450M,那這肯定是接受不了的,所以只能將m4a轉成碼率較小的MP3格式。這時需要用到FFmpeg,所以你需要先搭建環境,需要搭建環境的請戳這裏。接下來進行格式轉換了


轉換之後發現語音包大小下降了2/3,ok這就能接受了,當然有更好的壓縮方案的小夥伴可以聯繫樓主,好了,多的也不用講,那我們語音播報一般都有個前綴語音提示,這就需要我們合併一下音頻了,當然沒這個需求的小夥伴可以忽略


最終的文件如下

到這裏第一種方案就竣工了,接下來只要後臺根據支付方式以及支付金額推送不同的sound字段即可

第二種方案:思路也是來源於sound字段,使用語音包還是有一個弊端就是IPA太大,這時萌生了一個想法,能不能動態拼接呢?這可把樓主一頓想,這時發現一種方案在拓展裏面接受到推送後通過發送本地通知來實現呢?答案是可以的,多的也不講上代碼


首先將我們準備好的語音文件主工程,然後設置對應的播放時間(根據音頻文件來定)


這裏需要注意的是我們不需要本地推送有彈窗,所以title和body都設置爲空,或者註冊通知的時候不啓用UNAuthorizationOptionAlert,還要注意的是拓展裏面需要設置一下本地化。


這樣方案二就算是完成了,但這裏有一個弊端就是無法消除震動,只能讓用戶設置關閉震動,優勢就是能有效降低IPA包的大小

方案三:使用VOIP喚醒App

VOIP全稱voice-over-ip,是iOS8新引入的一種推送方式類型。它可以使用戶收到一個來電時喚醒App。有了這種新推送,麻麻再也不用擔心App長時間在後臺被系統殺死的問題了,因爲這種推送消息可以在後臺喚醒App。

具體VOIP的實現這裏就不做詳細的闡述,VOIP是蘋果針對即時通訊類應用開啓的,但並不只有純聊天類應用才能通過審覈,微信自然是不用說了,肯定是使用的VOIP,支付寶在iOS 12.1來臨之前其實也是使用的語音合成,後面初期解決12.1播報問題也是使用的語音包,樓主親測如此,就在前天支付寶已經完成了iOS12.1語音精準播報,然後包的大小並沒有太多變化,因此樓主基本肯定是使用了VOIP來喚醒App從而達到語音在線合成播報的目的,所以說只要你能提供給爸爸語音/視頻呼入呼出的錄製視頻,基本也是能通過審覈大關的。當然VOIP方案雖然是可行,但實現成本過高,前後端的變動都比較大,服務端得搭建一套自己的推送,不再依賴第三方推送平臺。

以上是樓主目前能解決iOS12.1播報問題的三種方案,綜合體驗和準確度來說的話,個人還是偏向第一種方案,各位小夥伴根據公司自身產品可自行選擇,最後感謝各位的閱讀,如有不足之處或有更好的實現方案請聯繫QQ:895431603

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章