前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS12.1以上在后台或者被杀死无法语音播报的解决方案:用NotificationServiceExtension实现【修订】

iOS12.1以上在后台或者被杀死无法语音播报的解决方案:用NotificationServiceExtension实现【修订】

作者头像
公众号iOS逆向
发布2021-04-30 16:05:33
1.4K0
发布2021-04-30 16:05:33
举报
文章被收录于专栏:iOS逆向与安全iOS逆向与安全
  • 1、创建NotificationServiceExtension
  • 2、 创建 AudioTool
  • 3、配置项目
  • 4、注册推送

消息推送开发指南(对即时性和送达率有要求的场景、极光推送设置心跳交互时间)

前言

  • CSDN资源下载源码:https://download.csdn.net/download/u011018979/14026303

1、原文:https://kunnan.blog.csdn.net/article/details/103702284 2、本文提供iOS12.1系统以上在后台或者被杀死无法语音播报的解决方案:通过NotificationServiceExtension实现 3、原理:iOS 10新增了Service Extension,这意味着在APNs到达我们的设备之前,还会经过一层允许用户自主设置的Extension服务进行处理,为APNs增加了多样性。 本文就是利用Service Extension处理消息并语言播报,来解决iOS12.1系统以上在后台或者被杀死无法语音播报的问题

  • 想要消息推送的消息在Service Extension中被处理,需要aps 内容中包含mutable-content : 1. (以极光平台推送为例,测试的时候,需要在高级设置开启mutable-content)
代码语言:javascript
复制
    aps =     {
alert =         {
    body = 11;
    subtitle = 111;
    title = "111223411.34";
};
badge = 1;
"mutable-content" = 1;
sound = default;
};
hasHandled = 1; //标记已经在Extension中被处理,防止重复的语言播报或者打印交易小票等冗余动作。
}

  • 正确的消息推送格式
代码语言:javascript
复制
{"aps":{"alert":"This is some fancy message.","badge":6,"sound": "default","content-available":true,"mutable-content":true}}

I 、开发步骤

iOS 10新增了Service Extension,这意味着在APNs到达我们的设备之前,还会经过一层允许用户自主设置的Extension服务进行处理,为APNs增加了多样性。

本文就是利用Service Extension处理消息并语言播报,来解决iOS12.1系统以上在后台或者被杀死无法语音播报的问题

在这里插入图片描述

1、创建NotificationServiceExtension

  • 1.1选择新建Notification Service Extension

在这里插入图片描述

注意:

1、Service Extension的Bundle Identifier不能和Main Target(也就是你自己的App Target)的Bundle Identifier相同,否则会报BundeID重复的错误。 2、Service Extension的Bundle Identifier需要在Main Target的命名空间下,比如说Main Target的BundleID为io.re.xxx,那么Service Extension的BundleID应该类似与io.re.xxx.yyy这样的格式。

  • 1.2 创建NotificationService.m继承UNNotificationServiceExtension ,并实现方法- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler

Service Extension服务已经创建成功之后,你的项目中包含两个方法。

1、didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *contentToDeliver))contentHandlerAPNs到来的时候会调用这个方法,此时你可以对推送过来的内容进行处理,然后使用contentHandler完成这次处理。但是如果时间太长了,APNs就会原样显示出来。 也就是说,我们可以在这个方法中处理我们的通知,个性化展示给用户。 2、serviceExtensionTimeWillExpire而serviceExtensionTimeWillExpire方法,会在过期之前进行回调,此时你可以对你的APNs消息进行一下紧急处理。

  • NotificationService.m
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 iOS逆向 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • I 、开发步骤
    • 1、创建NotificationServiceExtension
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档