消息推送小探索:对即时性和送达率有要求的场景 【免费送掘金小册5折优惠券】(还剩一张)

183 阅读6分钟

这是我参与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 字段来控制。

  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 支持时效性推送

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 相同。

docs.jiguang.cn/jpush/clien…

  • 调用 [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证书

help.apple.com/developer-a…

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逆向

docs.jiguang.cn/jpush/clien…