iOS之“您有新的订单,请及时处理”

此文只适用于主动调用或者推送消息过来的时候APP在前台运行状态,想要APP后台播放应该使用一个可能被拒的手段。
这个星期在开发公司APP的V1.2版本,这个版本中有个需求是要加入语音合成,下面简称为TTS,配合着之前的极光推送,就能得到饿了吗,美团等外卖平台的 【您有新的订单,请及时处理】推送+语音效果。
这边说明一下,推送是用的极光,TTS原本打算是用阿里云的,但后来CTO说阿里云的目前不稳定,还在测试,所以还是用了老牌 ---科大讯飞TTS,看着官方文档做环境集成,然后Xcode代码基本没啥问题,但它官方给的demo除了给了TTS的还有其他很多的东西,所以我这边只把语音合成的部分提出来。

一、集成流程看这里

二 代码部分

当你把环境都配置好后,由于是整个项目只要有推送就得语音合成,所以与官方给的SDK Demo不同,需要写在APPDelegate中,

1.在 .m 文件中导入相关文件

//讯飞TTS
#import "iflyMSC/IFlyMSC.h"
#import "Definition.h"
#import "iflyMSC/iflyMSC.h"
#import <AVFoundation/AVFoundation.h>
#import <QuartzCore/QuartzCore.h>
#import <AVFoundation/AVAudioSession.h>
#import <AudioToolbox/AudioSession.h>

并且 遵循代理,创建语音合成的对象

@interface AppDelegate ()<IFlySpeechSynthesizerDelegate>
@property (nonatomic, strong) IFlySpeechSynthesizer * iFlySpeechSynthesizer;
@end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//讯飞TTS

    
    [self initSynthesizer];//初始化TTS语音

    //设置sdk的log等级,log保存在下面设置的工作路径中
    [IFlySetting setLogFile:LVL_ALL];//LVL_ALL表示全部日志打印
    
    //打开输出在console的log开关
    [IFlySetting showLogcat:YES];
    
    //创建语音配置,appid必须要传入,仅执行一次则可
    NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",APPID_VALUE];
    
    //所有服务启动前,需要确保执行createUtility
    [IFlySpeechUtility createUtility:initString];
    
    return YES;
}

初始化TTS类对象

- (void)initSynthesizer
{
    //合成服务单例
    if (_iFlySpeechSynthesizer == nil) {
        _iFlySpeechSynthesizer = [IFlySpeechSynthesizer sharedInstance];
    }
    _iFlySpeechSynthesizer.delegate = self;
    
    //设置语速1-100
    [_iFlySpeechSynthesizer setParameter:@"50" forKey:[IFlySpeechConstant SPEED]];
    
    //设置音量1-100
    [_iFlySpeechSynthesizer setParameter:@"80" forKey:[IFlySpeechConstant VOLUME]];
    
    //设置音调1-100
    [_iFlySpeechSynthesizer setParameter:@"50" forKey:[IFlySpeechConstant PITCH]];
    
    //设置采样率
    [_iFlySpeechSynthesizer setParameter:@"16000" forKey:[IFlySpeechConstant SAMPLE_RATE]];
    
    //设置发音人 有很多,可见文档中自己挑选哦
    [_iFlySpeechSynthesizer setParameter:@"xiaoyan" forKey:[IFlySpeechConstant VOICE_NAME]];
    
    //设置文本编码格式
    [_iFlySpeechSynthesizer setParameter:@"unicode" forKey:[IFlySpeechConstant TEXT_ENCODING]];
    
}

3.在极光推送的代理方法中实现语音前的文本处理,

需要注意的点:极光推送这边有两个回调,一个是willPresentNotification,另一个是didReceiveNotificationResponse,两个区别在于,前者是有推送时实时语音,后者是有推送时点击了才会触发,我们的需求当然是写在前者里啦!
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {

    NSDictionary * userInfo = notification.request.content.userInfo;
    

    //这边一般是语音播报极光回调信息中的文本,我这边是写死的一句话

    NSString *str = @"您有新的订单,请及时处理"
    [_iFlySpeechSynthesizer startSpeaking:str];

    if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
        [JPUSHService handleRemoteNotification:userInfo];
    }
    completionHandler(UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置
}

4.网上有资料说语音合成的回调必须也写上,否则无法实现语音合成(具体也没去证实过),但这些回调里你可以啥都不用写

- (void)onSpeakBegin
{
  
}
-(void)onBufferProgress:(int)progress message:(NSString *)msg
{
    NSLog(@"bufferProgress:%d,message:%@",progress,msg);
}
-(void)onSpeakProgress:(int)
progress
{
    NSLog(@"playprogress:%d",progress);
}
-(void)onSpeakPaused
{
    
}
-(void)onSpeakResumed
{
    
}
-(void)onCompleted:(IFlySpeechError *) error
{
    
}

好了,TTS就是这么简单,上面列了几个注意的点千万别漏了,快去让你的APP说话吧。当然,也不是一定要配合推送,自己写个小demo点击按钮触发也是可以的哦。

以上!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,966评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,417评论 4 61
  • 凌晨三点的夜里,写给自己。写给我的懒惰与沉迷
    Glorecy阅读 1,616评论 0 0
  • 1.单个文本对象、整体文本对象 2.运动图形-效果器-随机效果器、步幅效果器 3.运动图形-效果器-着色效果器+(...
    李英俊LJ阅读 4,776评论 0 0
  • 一、概述 Mybatis官方提供逆向工厂,可以针对单表自动生成mybatis执行所需要的代码(如mapper.ja...
    yjaal阅读 10,671评论 3 6

友情链接更多精彩内容