关于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 参数写上音频文件的名字。

我已经完成了语音播报功能,遇到什么问题,可以直接私信,我会回答的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

扫码关注云+社区