美文网首页iOS developeriOS 实用iOS开发
如何实现推送并播报消息?

如何实现推送并播报消息?

作者: 繁华乱世沧桑了谁的容颜 | 来源:发表于2016-11-14 16:05 被阅读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

    打断点以后发现执行了,但是SIRI没有声音了,刚开始我还以为我的方法除问题了,后来一想不对 啊, 刚开始读得好好的,就从新看了一下后台运行的这个方法,发现Background Modes的Remote notifications是一个静默推送方法:就是收到推送(没有文字没有声音),不用点开通知,不用打开APP,就能执行

    这个是用户完全感受不到推送消息的到来和程序的某块代码已经执行了,切不发出任何的声音,只是用户正在锁屏,它会亮一下屏幕,没有任何声音,也没有任何消息框和痕迹,用于更新程序的某些数据又不想让用户知道的情况下用的

    然后我又加了Background fetch如图

    9AB2DCB7-3ABE-44EC-ACCA-9B06E47E8FB1.png

    刚开始好了 但是一会又不行了 目前不知道什么原因 ,就执行代码但是没声音

    ********那么问题来了,到底如何才能再接受到通知的时候,不管是后台运行还是黑屏状态都能读推送的消息呢?

    相关文章

      网友评论

      • 马路边的油酥饼:你问题解决了吗
        繁华乱世沧桑了谁的容颜:@Hubery_小海 没有...
        CuteMei:楼主您的问题现在解决了没?
        繁华乱世沧桑了谁的容颜:@马路边的油酥饼 没有
      • smkoc:在接受远程通知时候创建本地通知 如闹钟 ,就行了
      • zym_:我也是卡到这了,估计是过了一会系统给程序杀了,你解决了没呢
        zym_:@繁华乱世沧桑了谁的容颜 头疼,我现在这情况跟你一样啊...
        zym_:@繁华乱世沧桑了谁的容颜 我们现在就是自定义声音,但是要改成播报推送的内容,前十分钟还好,但是被挂起了就放不出来声音了....
        繁华乱世沧桑了谁的容颜:@myz_ 没有解决啊,刚写好的时候上线成功了,锁屏不会读,今天上线被拒绝了,说没有发现后台播放语音的功能! 我现在直接把background Model 给关了, 如果想推送读取的话还是用自定义声音吧, 美团应该用的就是自定义声音

      本文标题:如何实现推送并播报消息?

      本文链接:https://www.haomeiwen.com/subject/ayvhpttx.html