实现微信支付宝收款到帐语音提醒

背景

虽然我在项目里面没有遇到这个需求,可是遇到了这个面试题,一时居然说不出个因此然。趁热打铁这篇文章就是为了实现一下这个功能。php

需求

收款到帐语音提醒须要收款方在收到款后,播放一段TTS合成语音播报金额。APP在前台时能够经过模板消息将须要播报的金额带下来,再请求TTS数据并播放,APP在后台的时候就须要用到 VoIP Push Notification
来实现客户端在被唤醒以后将得到30s的后台运行时间,这段运行时间足以请求合成语音数据并播放。本篇文章就基本实现实现这一个功能,合成语音那块采用的是一个网络音频资源替代。html

技术点

1.1 方案选择

最开始准备用Remote Push + Notification Service Extension 实现这个功能,遇到了不少坑,后来就放弃了,改用VOIP方案,完美解决。git

1.2 本地通知

当应用在UIApplicationStateBackground 或者被kill掉的状况下,会推送一个本地通知,通知在iOS 10 如下是默认跟随通知播放一段“微信支付收款到帐”的本地音频,在iOS 10 以上的话则会在后台播放需求中的含具体金额的合成音频。github

1.3 测试推送

注意VOIP和APNS 服务的推送不是一个东西来的,因此用APNS的测试方法是调试不了的。我这里是用服务端推送代码并修改配置信息。web

VOIP文件夹下面须要像图片这样放好须要的证书文件,测试证书和生产证书共用一个
开发环境地址:gateway.sandbox.push.apple.com:2195
生产环境地址: gateway.push.apple.com:2195面试

Alt

Alt

用终端命令行cd到咱们的VoIP文件夹中,输入:php php文件名.php
就会执行- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(NSString *)type;微信

代码

待完善语音合成,获取静音和获取手机声音阈值等
demo地址网络