一、背景
成都一家集口碑和實(shí)力的網(wǎng)站建設(shè)服務(wù)商,擁有專業(yè)的企業(yè)建站團(tuán)隊(duì)和靠譜的建站技術(shù),十年企業(yè)及個(gè)人網(wǎng)站建設(shè)經(jīng)驗(yàn) ,為成都上千多家客戶提供網(wǎng)頁設(shè)計(jì)制作,網(wǎng)站開發(fā),企業(yè)網(wǎng)站制作建設(shè)等服務(wù),包括成都營銷型網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),同時(shí)也為不同行業(yè)的客戶提供成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)的服務(wù),包括成都電商型網(wǎng)站制作建設(shè),裝修行業(yè)網(wǎng)站制作建設(shè),傳統(tǒng)機(jī)械行業(yè)網(wǎng)站建設(shè),傳統(tǒng)農(nóng)業(yè)行業(yè)網(wǎng)站制作建設(shè)。在成都做網(wǎng)站,選網(wǎng)站制作建設(shè)服務(wù)商就選創(chuàng)新互聯(lián)建站。為了解決小商戶老板們?cè)陬l繁交易中不方便核對(duì)、確認(rèn)到賬的痛點(diǎn),產(chǎn)品MM提出了新版本需要支持收款到賬語音提醒功能。這篇文章總結(jié)了開發(fā)過程中遇到的坑和一些小技巧。
二、技術(shù)方案
后臺(tái)喚醒App
收款到賬語音提醒需要收款方在收到款后,播放一段TTS合成語音播報(bào)金額,微信在前臺(tái)時(shí)可以通過模板消息將需要播報(bào)的金額帶下來,再請(qǐng)求TTS數(shù)據(jù)并播放,但是app在掛起或者被kill掉的情況下要如何請(qǐng)求語音數(shù)據(jù)并播放呢?
iOS提供了兩種方式喚醒處于掛起或已經(jīng)被kill掉的app。分別是Silent Notification和VoIP Push Notification,客戶端在被喚醒之后將獲得30s的后臺(tái)運(yùn)行時(shí)間,這段運(yùn)行時(shí)間足以請(qǐng)求合成語音數(shù)據(jù)并播放。
1.Silent Notification:
Silent Notification在iOS7以上便可以支持,但是每小時(shí)能推送的Silent Notification次數(shù)有限制。
2.VoIP Push Notification
VoIP Push Notification則是在iOS8以上才支持的新Push類型,相比于Silent Notification,VoIP Push具有高優(yōu)先級(jí)、低延遲的優(yōu)勢,并且沒有次數(shù)限制。
對(duì)比這兩種技術(shù)方案,VoIP Push Notification明顯更適合用于收款到賬語音提醒的喚醒方案。
TTS合成語音
TTS語音合成方案分為離線合成方案和在線合成方案,離線合成方案省去網(wǎng)絡(luò)請(qǐng)求,合成速度更快,節(jié)省網(wǎng)絡(luò)流量,但是合成音的聽起來比較機(jī)械,語速和停頓的處理較差一些。如果對(duì)合成音的效果要求不是特別高,可以考慮采用iOS自帶的AVSpeechSynthesis框架,免去語音庫的合入,減少安裝包大小。
在線合成方案的效果則相對(duì)更像人聲,富有感情??紤]到產(chǎn)品體驗(yàn),我們采用了搜索產(chǎn)品部提供的在線語音合成方案,接入方式可以看這篇文章。合成音格式支持wav,mp3,silk,amr,speex,對(duì)比后發(fā)現(xiàn),在合成相同文本的情況下,amr的壓縮率最高,但是能聽到音質(zhì)下降明顯。silk格式壓縮率次高,且能保持相對(duì)清晰的音質(zhì),單條合成語音大小在2KB左右。
喚醒后播放音頻文件
在請(qǐng)求到合成語音后,要在后臺(tái)或者鎖屏狀態(tài)下播放音頻文件,AVAudio Session的Category值需要使用AVAudioSessionCategoryPlayback或是AVAudioSessionCategoryPlayAndRecord,CategoryOptions根據(jù)實(shí)際需要可選擇MixWithOthers(與其他聲音混音)或是DuckOthers(調(diào)低其他聲音的音量)。
需要注意的是,只有iOS10以上才支持app被喚醒后在后臺(tái)/鎖屏狀態(tài)下播放音頻。所以iOS10以下的設(shè)備,在收到VoIP Push后只能在local push上設(shè)定一段固定鈴聲,這也是為什么iOS10以下只有“微信支付收款到賬”,而沒有后面具體的金額數(shù)值。
三、靜音開關(guān)檢測
不幸的是,在產(chǎn)品發(fā)布后沒多久就受到了某互聯(lián)網(wǎng)大佬的吐槽。
從產(chǎn)品體驗(yàn)上來說,收款到賬的金額播報(bào)是隨著local push的彈出一起播放的,更像是一種特殊的push鈴聲,而蘋果對(duì)push鈴聲的處理是受到靜音開關(guān)控制的,所以講道理,這個(gè)吐槽是合理的。然而前面提到App在被VoIP Push喚醒之后,需要將AudioSessionCategory設(shè)置為AVAudioSessionCategoryPlayback或AVAudioSessionCategoryPlayAndRecord才可以在后臺(tái)播放音頻文件,這兩種模式是不受靜音開關(guān)控制的。要實(shí)現(xiàn)這個(gè)需求,就必須獲取當(dāng)前靜音開關(guān)的狀態(tài)。而蘋果在iOS5之后并沒有明確地提供一種方式讓開發(fā)獲取靜音開關(guān)的狀態(tài),這就陷入了一個(gè)尷尬的局面。
蘋果在iOS5之前可以使用以下方式監(jiān)聽靜音鍵開關(guān)
- (BOOL)isMuted { CFStringRef route; UInt32 routeSize = sizeof(CFStringRef); OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &routeSize, &route); if (status == kAudioSessionNoError) { if (route == NULL || !CFStringGetLength(route)) return YES; } return NO; }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站標(biāo)題:iOS開發(fā)微信收款到賬語音提醒功能思路詳解-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://aaarwkj.com/article24/gogce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、建站公司、定制開發(fā)、域名注冊(cè)、微信公眾號(hào)、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容