關於iOS實現前臺,後臺,鎖屏或關閉app語音播報
公司要求像支付寶收款一樣,收到推送後實現語音播報功能,之前沒有做過,特此機會研究一下。
用到的技術點:
1.如果對語音要求不是特別高的情況下,用蘋果系統自帶的AVSpeechUtterance可以實現,也可以用訊飛的sdk。
2.之前公司用的是友盟推送,可以實現基本的彈框形式推送,為了語音播報在鎖屏情況正常,我增加了iOS10 推出的UNNotificationServiceExtension “推送擴充套件”
關於在前臺實現語音播報,很簡單,
xcode 後臺設定
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler(前臺收到通知的代理方法)中寫語音播報的方法 AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:alterText]; // utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-TW"];//設定語言 // utterance.rate = 0.4; //設定語速 // utterance.volume = 0.0; //設定音量(0.0~1.0)預設為1.0 // utterance.pitchMultiplier = 1.0; //設定語調 (0.5-2.0) // AVSpeechSynthesizer *synth = [[AVSpeechSynthesizer alloc] init]; // [synth speakUtterance:utterance];
在後臺實現語音播報
謝謝www.jianshu.com/p/c06133d576e4作者的分享,利用作者提供的方法,我也實現了在後臺播放,但是鎖屏或關閉app是無法完成語音播報的。我根據作者提供的UNNotificationServiceExtension,搜尋使用方法完成了鎖屏情況的語音播報。
1.UNNotificationServiceExtension的建立參考www.cocoachina.com/ios/20161017/17769.html建立完成後- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler中語音播報的方法新增進去,這個方法主要是在沒有推出彈框前,給30s的時間處理推送的內容,所以要推送的語音最好不要太長。
注意:如果專案需求是在前臺和後臺播放,就僅需要參考www.jianshu.com/p/c06133d576e4的方法,如果所有情況都需要,僅需要新增UNNotificationServiceExtension,填寫語音播報的程式碼,⚠️,一定要推送的 "aps"字典中,一定要包含 mutable-content 鍵,並且 mutable-content 的值為 1。不然不走推送擴充套件的方法。
支付寶就是利用此方法完成iOS10以後的語音播報,iOS10以前只需要播報一端固定的語音,把固定音訊檔案放在目錄下,後臺的sound 引數寫上音訊檔案的名字。