消息推送小探索:对即时性和送达率有要求的场景

引言

本文针对对即时性和送达率有要求的场景,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 字段来控制。

  1. 若使用 Web 控制台,需勾选 “可选设置”中 mutable-content 选项;
  2. 若使用 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,基不包含专用密钥

消息推送小探索:对即时性和送达率有要求的场景

see also


上一篇:解决Druid设置Oracle的Clob字段时的小坑


下一篇:【技术贴】双击电脑桌面的快捷键出现属性。。。