引言
本文针对对即时性和送达率有要求
的场景,iOS采用Notification Service Extension解决消息推送无法语言播报的问题,你也可以利用Voip 推送进行实现。
Voip 推送:在iOS 8 之后引入了一个基于PushKit框架的Voip推送,可以APP在杀死的情况下被唤醒,并执行代码。
在iOS 13 之后 Apple不再允许PushKit应用在非Voip电话的场景下,如果需要使用Pushkit则需要接入Callkit的接口。
I、iOS利用Notification Service Extension解决消息推送无法语言播报的问题及提升推送数据统计的精准度
核心原理:
iOS 10 新增的 Notification Service Extension 功能,用 mutable-content 字段来控制。
- 若使用 Web 控制台,需勾选 “可选设置”中 mutable-content 选项;
- 若使用 RESTFul API 需设置 mutable-content 字段为 true。
因此想要消息推送的消息在Service Extension中被处理,需要aps 内容中包含
mutable-content : 1
. (以极光平台推送为例,测试的时候,需要在高级设置开启mutable-content)
aps = { alert = { body = 11; subtitle = 111; title = "111223411.34"; }; badge = 1; "mutable-content" = 1; sound = default; }; hasHandled = 1; //标记已经在Extension中被处理,防止重复的语言播报或者打印交易小票等冗余动作。 }
- 正确的消息推送格式
{"aps":{"alert":"This is some fancy message.","badge":6,"sound": "default","content-available":true,"mutable-content":true}}
1.1 iOS15 支持时效性推送
https://kunnan.blog.csdn.net/article/details/121108318
1.2 iOS12.1以上在后台或者被杀死无法语音播报的解决方案
iOS NotificationServiceExtension实现VoiceBroadcast【app处于后台/被杀死的状态仍可进行语言播报】iOS12.1以上在后台或者被杀死无法语音播报的解决方案
———————————————— 版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
1、原文链接:https://blog.csdn.net/z929118967/article/details/103702284
2、 CSDN资源下载源码:https://download.csdn.net/download/u011018979/14026303
1.3 iOS10以上SDK端配置送达回调,可让推送数据统计更精准
从 iOS JPush SDK 3.0.7 版本,开发者可使用 Notification Service Extension SDK 上报每条 APNs 信息的送达状态。
Notification Service Extension SDK v1.0.0(随 JPush iOS SDK 3.0.7 版本发布)及以后的版本
使用方法:
- 将 jpush-extension-ios-xxx.a 和 JPushNotificationExtensionService.h 两个文件引入到您的 Service Extentsion 工程中。
- 添加 Framework:libz.tbd 和 libresolv.tbd。
- 调用 [jpushSetAppkey:] 方法设置您的 appkey,请注意这里的 appkey 应该和您极光应用的 appkey 相同。
https://docs.jiguang.cn/jpush/client/iOS/ios_api/#notification-service-extension
- 调用 [jpushReceiveNotificationRequest:] 方法上报您的 apns 消息,完成送达统计;在该方法的 block 回调中进行 apns 的显示。
#import "NotificationService.h" #import "JPushNotificationExtensionService.h" @implementation NotificationService - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { - [JPushNotificationExtensionService jpushSetAppkey:@"AppKey copied from JiGuang Portal application"]; [JPushNotificationExtensionService jpushReceiveNotificationRequest:request with:^ { NSLog(@"apns upload success"); contentHandler(request.content); }]; } @end
Notification Service Extension的使用请看这篇文章:iOS NotificationServiceExtension实现VoiceBroadcast【app处于后台/被杀死的状态仍可进行语言播报】iOS12.1以上在后台或者被杀死无法语音播报的解决方案
———————————————— 版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
1、原文链接:https://blog.csdn.net/z929118967/article/details/1037022842、 CSDN资源下载源码:https://download.csdn.net/download/u011018979/14026303
II、android 提高送达率和在线率的方案
2.1 利用厂商推送能力( 极光推送的厂商对接资料)
对即时性和送达率有要求的话,建议你们把厂商推送能力用上,可以解决app离线情况下的消息接收
具体步骤如下:1.请按照厂商通道相关参数申请教程进行注册 2.在极光控制台->应用设置->推送设置->厂商通道填写相关参数(需要开通VIP) 3.按照极光厂商通道集成指南文档 进行开发集成
注意事项:厂商推送到达时app无感,无法触发语音播报的方法
1.推荐您使用自动开发集成 2.OPPO与VIVO厂商需要您上传应用到应用市场,VIVO允许推送时间是7点~23点 3.最新版本Android sdk v3.9.1(厂商SDK版本和Android jpush SDK 保持一致)iOS sdk v3.4.0 4.基础集成官方文档 (重要)☆ https://docs.jiguang.cn//jpush/guideline/intro/ 厂商申请指南 (重要)☆☆☆ https://www.yuque.com/docs/share/5cc561e9-b103-47a3-93c5-e91a0e4b2402?# 厂商集成指南 (重要)☆☆☆☆☆ https://www.yuque.com/docs/share/0f6327ce-da8f-488e-824a-7ca53890252d?# 厂商消息回调相关(重要)☆☆☆☆☆ https://www.yuque.com/docs/share/ab5e7e6e-3f41-4959-8db7-0a279f242eec?#
厂商配额说明(重要)☆☆☆☆☆ https://www.yuque.com/docs/share/812e5511-2ec8-4caa-875d-8842eb782ca1?#
2.2 极光推送设置心跳交互时间
- 背景:
对于设备经常离线的处理方法,如果这种情况出现的几率大的话,建议更新一下SDK,并且将心跳时间从默认的4m 50s改为更短,例如1m或30s,将改善推送延时情况。
- 调用方式:必须再Application的onCreate方法里,在init之前调用。
Bundle bundle = new Bundle(); // 设置心跳30s,心跳间隔默认是4min50s bundle.putInt("heartbeat_interval", 30); JCoreManager.setSDKConfigs(this, bundle);
这个建议不要低于30s,因为会增加电量消耗
2.3 新增收钱语音助手功能
后台进行语音播报
实现方式类似音乐播放器
III、 注意定时更新iOS推送证书
苹果开发者后台更新证书
3.1 Mac 上使用【钥匙串访问】工具创建证书签名请求 (CSR)。
在Mac 生成Certificate Signing Request证书
https://help.apple.com/developer-account/#/devbfa00fef7
1、启动位于 /Applications/Utilities 中的“钥匙串访问”。
2、选取“钥匙串访问”>“证书助理”>“从证书颁发机构请求证书”。
3、在“证书助理”对话框中,在“用户电子邮件地址”栏位中输入电子邮件地址。
4、在“常用名称”栏位中,输入密钥的名称 (例如,Gita Kumar Dev Key)。
5、将“CA 电子邮件地址”栏位留空。
6、选取“存储到磁盘”,然后点按“继续”。
3.2 Create a New Production SSL Certificate
3.3 下载之后,双击安装并上传P12格式的证书到极光后台/或者其他推送平台的服务侧
双击证书后,会在 “KeychainAccess” 中打开,选择左侧“钥匙串”列表中“登录”,以及“种类”列表中“我的证书”,找到刚才下载的证书,并导出为 .p12 文件。如下图:
注意导出的时候,不要选择key,基不包含专用密钥