这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战。
粉丝福利:搜索#小程序:iOS逆向
,关注公众号:iOS逆向
领取福利【掘金小册5折优惠码】
目前仅剩一张,有效日期至 11月30日 23:59。
引言
本文针对对即时性和送达率有要求
的场景,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 支持时效性推送
kunnan.blog.csdn.net/article/det…
1.2 iOS12.1以上在后台或者被杀死无法语音播报的解决方案
iOS NotificationServiceExtension实现VoiceBroadcast【app处于后台/被杀死的状态仍可进行语言播报】iOS12.1以上在后台或者被杀死无法语音播报的解决方案
———————————————— 版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
1、原文链接:blog.csdn.net/z929118967/…
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 相同。
- 调用
[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、原文链接:blog.csdn.net/z929118967/… 2、 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.基础集成官方文档 (重要)☆
docs.jiguang.cn//jpush/guid…
厂商申请指南 (重要)☆☆☆
www.yuque.com/docs/share/…
厂商集成指南 (重要)☆☆☆☆☆
www.yuque.com/docs/share/…
厂商消息回调相关(重要)☆☆☆☆☆
www.yuque.com/docs/share/…
厂商配额说明(重要)☆☆☆☆☆
www.yuque.com/docs/share/…
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证书
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,基不包含专用密钥
see also
更多内容请关注 #小程序:iOS逆向
,只为你呈现有价值的信息,专注于移动端技术研究领域;更多服务和咨询请关注公众号:iOS逆向
。