简介:本文详细探讨了iOS13系统下微信收款到账语音提醒功能的开发过程,包括技术方案的选择、注意事项及解决方案,以及如何通过千帆大模型开发与服务平台优化功能。
在iOS13系统发布后,微信收款到账语音提醒功能的开发面临了新的挑战。苹果对PushKit的能力进行了限制,使得原有的VoIP方案不再适用。为此,我们深入研究了新的技术方案,并成功实现了在iOS13下的语音播报功能。本文将详细总结这一过程,包括技术方案的选择、开发过程中的注意事项及解决方案,并探讨如何通过千帆大模型开发与服务平台进一步优化功能。
iOS13的发布,特别是使用Xcode11编译后,苹果对PushKit在非VoIP电话场景下的使用进行了严格限制。如果开发者想要继续使用PushKit,则必须接入CallKit接口,这会导致收到VoIP Push时拉起一个全屏的接打电话界面,这在国区发布的应用中是不被允许的。因此,我们需要寻找新的技术方案来实现微信收款到账语音提醒功能。
经过深入研究,我们选择了Notification Service Extension(NSE)作为新的技术方案。NSE是苹果在iOS10中推出的一项功能,当APNs的payload上带上“mutable-content”的值为1时,就会进入NSE的代码中。在NSE中,我们可以更改通知的内容,包括通知的铃声。与VoIP方案相比,NSE不能唤醒主应用,也不能访问主应用的文件空间,只能在Extension进程中处理相应的逻辑。
在NSE中,我们可以通过给UNNotificationContent中的Sound属性赋值来达到在通知弹出时播放一段自定义音频的目的。音频文件必须存储在应用的Library/Sounds文件夹中,且支持aiff、wav等格式,铃声的长度必须小于30秒。由于我们是在NSE中自定义铃声,所以无法直接访问主应用中的Library/Sounds文件夹,只能将合成好或者下载到的语音音频文件存储到AppGroups下的Library/Sounds文件夹中。
微信的收款到账语音依赖于自研的离线语音合成库。APNs的payload中携带了需要合成的文本内容,通过离线语音合成库生成wav音频文件后,将文件写到AppGroups的Library/Sounds文件夹下,最后更改UNNotificationSound属性即可使通知播报一段自定义的收款到账语音。对于不具备离线合成能力的小型企业,可以采用在线合成再通过HTTP下载的方式。
当客户端短时间内收到多条播报通知时,后面的通知会顶掉前面的通知,导致前面的通知播报不完整。为了解决这个问题,我们需要增加一个消息队列,将所有需要播报的通知都添加到队列中,当前面的消息播放完毕后,再播放后面的消息。同时,由于NSE的代码逻辑并不是在主线程执行的,我们在处理消息播放队列以及涉及到文件读写的逻辑上,需要给相应的代码逻辑加锁,以避免多线程问题。
如果在线合成音频文件在30秒内无法成功下载,我们需要在serviceExtensionTimeWillExpire方法中进行处理,最好的兜底方案是播放一段默认的语音。
为了进一步优化微信收款到账语音提醒功能,我们可以借助千帆大模型开发与服务平台。该平台提供了丰富的AI能力和工具,可以帮助我们更高效地处理语音合成、自然语言理解等任务。通过集成千帆大模型开发与服务平台,我们可以实现更智能、更个性化的语音提醒功能,提升用户体验。
本文详细总结了iOS13系统下微信收款到账语音提醒功能的开发过程和技术方案。通过选择Notification Service Extension作为新的技术方案,并结合离线语音合成、消息队列与多线程处理等技术手段,我们成功实现了在iOS13下的语音播报功能。未来,我们将继续探索和优化微信收款到账语音提醒功能,为用户提供更智能、更便捷的服务体验。同时,我们也期待与更多合作伙伴携手共进,共同推动AI技术的发展和应用创新。