iOS推送播放语音播报更新

本文介绍了如何在iOS推送中实现语音播报,重点讲解了如何在线下载语音文件到APP或共享Group的Library/Sounds文件夹,以实现在不更新APP版本的情况下添加新的语音种类。
摘要由CSDN通过智能技术生成

88c51c11c938f00d2aaab5e052b7517a.gif

接上篇如何让iOS推送播放语音,之前的结论是iOS如果需要送审商店只能播放本地的mp3文件,这里更新一下:

更新

语音的播放,最终调用的方法是UNNotificationSound(named: xxx),而这个方法官方文档注释如下:

// The sound file to be played for the notification. The sound must be in the Library/Sounds folder of the app's data container or the Library/Sounds folder of an app group data container. If the file is not found in a container, the system will look in the app's bundle.
    public convenience init(named name: UNNotificationSoundName)

注释里说,语音文件会从这三个地方查找:

  1. APP 的Library/Sounds文件夹

  2. APP和 Extension共享Group的Library/Sounds文件夹

  3. App bundle

而之前文章里介绍的,就是属于第三种情况,直接放在App bundle中的情况。这种情况的局限性在于,每次有新增或者变更,都需要变更同步到项目,然后APP发版用户更新后才能生效。

这种太麻烦了,有没有可能,不用更新版本,并且能直接增加新的语音种类,本篇介绍的就是这种。

实现

不更新版本,增加新的语音种类,就需要考虑,是否能在线下载?看上面的播放方法语音文件的查找目录,考虑是否可以通过在线下载语音文件到 APP 的Library/Sounds文件夹 或者 APP和 Extension共享Group的Library/Sounds文件夹下。

首先考虑第一种情况,如果想要下载到APP的Library/Sounds文件夹下,要怎么做呢?直接在推送时配置下载链接是否可行?

笔者尝试的是,在Notification Service Extension的target中,获取到配置的语音文件链接,然后下载,存储到Library/Sounds文件夹下,下载成功后,再去播放。

验证后发现不可行,因为此时的目录不是APP的Library/Sounds目录,而是推送Target的appex的Library/Sounds目录,而这个目录不在语音文件的查找范围内,所以这种不可行?那如何下载到APP 的Library/Sounds目录下呢?

下载到APP的Library/Sounds

笔者想到有两种可能方案:

  1. 推送时配置下载链接,在APP处理推送方法的地方,进行下载

  2. 单独接口配置下载链接,APP打开时调用,提前下载

首先方案一,APP 处理推送方法是在Notification Service ExtensioncontentHandler之后,而语音播报是在contentHandler时,即,下载在播报之后,这种情况下,第一次的语音是播报不出来的;而且 APP 不打开的情况下,是否允许下载,是否能下载成功都未知,所以不可取。

再来看方案二

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值