最近入职的公司是做聚合支付的,主要面对的用户都是商家,所以当顾客扫码付款的时候,即使商家的APP在后台也要进行收款金额的播报和小票的蓝牙打印(我进来的时候APP都存在两年了都没这俩功能,表示很逗逼),所以研究了一下后台推送的语音播报功能和推送后台唤醒后台蓝牙打印,在这里做个笔记。
1.APP设置
2.后台语音播报
1.语音播报我在这是使用的是iOS10之后的新的推送功能扩展叫UNNotificationServiceExtension
具体使用方法这里稍微简述一下。
Xcode工具栏选择File->New->Target->NotificationServiceExtension点击创建。
注意点:
一、此tag的Bundle ID命名方式是主项目的Bundle ID的最后加上自定义的名字,举个例子
1 | 主Bundle ID 'com.demaxia.alibaba' |
二、别忘记了选择NotificationServiceExtension Tag的支持的最低版本,因为新创建的Tag默认是最新的系统版本,但是这个功能支持的最低版本是10.0。
选择版本的地方在General的Deployment里面。(我之前就忘记选择了,导致最后找了半天原因….)
三、推送内容关键字
1 | aps = { |
说明一下,"mutable-content" = 1;
这个推送关键字是告诉系统推送过来的内容允许咱们在NotificationServiceExtension里面修改(比如:加标题啦,修改标题了),这里不细说,反正我这里没改。
"content-available" = 1;
这个是后台推送唤醒必须要加的字段,不加无反应。加了之后后台收到推送响应的方法是
1 |
|
还有很重要的一点,一定要在设置里面选择应用开启后台刷新模式,不然拔了数据线在后台测试是不会有任何反应的,谨记,谨记😭。
我这里推送的语音播报是用的文件合成的,文件是偷得支付宝的语音文件。想获取支付宝的文件的可以下载一个PP助手,在里面下载支付宝就可以获得api包了,后面的操作就不说了,都知道的,这里我直接贴出我的代码,写的不好多多见谅。
1 | #define kFileManager [NSFileManager defaultManager] |
还有这个语音播报不仅支持后台播报,即使在后台杀死了程序还是会播报的,不过只支持iOS10以上,请酌情结合使用。
3.后台唤醒蓝牙打印
如何实现蓝牙打印这里就不讲了,百度一下你就知道。这里只说一下后台蓝牙打印如何实现。
其实很简单,第一步的APP设置勾选上然后在此方法里面调起蓝牙打印就可以了
1 |
|
这里提一点,也是困惑了我很久的问题,此方法调起给我们的时间是有限制的,大概是10秒。completionHandler(UIBackgroundFetchResultNewData);
这句代码是我们告诉系统,我们的事情做完了,可以把后台给的资源回收回去了,所以这一代码要在我们的事件处理完了再去运行。
我之前就是直接写在下面了,所以一直无法进行网络回调,卡住了好几天,😔。
这里可以写一个block的回调,请网络请求完成或者事件处理完成,调用这个block,再去运行这句代码completionHandler(UIBackgroundFetchResultNewData);
就可以了。
过程大概就是以上这么多。