如何实现推送并播报消息?
2016-11-14 本文已影响38053人
繁华乱世沧桑了谁的容颜
项目需要一个类似美团的那种播音功能
首先我们先来实现播音功能
我们就用iOS自带的SIRI功能来读首先 先导入
import <AVFoundation/AVFoundation.h>
//初始化语音播报
AVSpeechSynthesizer * av = [[AVSpeechSynthesizer alloc]init];
//设置播报的内容
AVSpeechUtterance * utterance = [[AVSpeechUtterance alloc]initWithString:@"轻轻的我走了,正如我轻轻的来"];
设置语言类别 我这里用的台湾口音, 因为我发现大陆的口音SIRI不会读,好像刚学会说话的小孩子一样 说的不清楚 具体原因我也不知道
AVSpeechSynthesisVoice * voiceType = [AVSpeechSynthesisVoice voiceWithLanguage:@"zh-TW"];
utterance.voice = voiceType;
//设置播报语速
utterance.rate = 0.4;
[av speakUtterance:utterance];
好的测试一下 确实可以读了 , 下面开始写推送自动读取消息,这里我用的是极光推送,就以iOS10的接受推送的方法为例
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler
{
NSDictionary *aps =userInfo[@"aps"];
解析出来需要读得文字
NSString *alert = aps[@"alert"];
让SIRI来读消息
[self siriWithcontent:alert];
}
好了,现在读出了推送的消息,然而问题来了, 如果是运行时没有问题,但是当锁屏,或后台运行时发现不点击推送消息,就不执行SIRI读文字的方法,想想有没有直接执行的办法呢?这个时候找到一个Background Modes 的方法,具体实现如下:
首先要打开Remote notifications,并加入content-available: 1 这个参数
976B517A-19EE-4BBC-A0C1-B0BAEEAA7605.png打开以后推送的时候就会走以下的方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler