如何实现接收推送撤回通知栏指定通知?

融云IM即时通讯
• 阅读 507

实现方式请参照 SealTalk 中的 ServiceExtension。

具体步骤如下:

给工程添加一个 target :Notification Service Extension。

主工程开启 Push Notifications 和 Background Modes 功能。

Service Extension target 开启 Push Notifications 功能。

NotificationService.m 中实现 - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler :

-(void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {

UNNotificationContent *content1 = request.content; NSDictionary *userInfo = content1.userInfo; NSDictionary *aps = [userInfo objectForKey:@"aps"]; NSString *category = [aps objectForKey:@"category"]; if (aps && category && [category isEqualToString:@"RC:RcCmd"]) { NSString *appData = [userInfo objectForKey:@"appData"]; NSDictionary *appDataDic = [NSJSONSerialization JSONObjectWithData:[appData dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:nil]; NSString *idString = [appDataDic objectForKey:@"rc-dlt-identifier"]; if (idString) { [[UNUserNotificationCenter currentNotificationCenter] getDeliveredNotificationsWithCompletionHandler:^(NSArray<UNNotification *> * _Nonnull notifications) { if (notifications.count == 0) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ self.contentHandler = contentHandler; self.bestAttemptContent = [request.content mutableCopy]; self.contentHandler(self.bestAttemptContent); }); return; }

for (UNNotification *notice in notifications) { UNNotificationRequest *request = notice.request; UNNotificationContent *content = request.content; NSDictionary *userInfo1 = content.userInfo; NSString *identifier = userInfo1[@"rc"][@"id"]; if ([idString isEqualToString:identifier]) { [[UNUserNotificationCenter currentNotificationCenter] removeDeliveredNotificationsWithIdentifiers:@[request.identifier]]; } } dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ self.contentHandler = contentHandler; self.bestAttemptContent = [request.content mutableCopy]; self.contentHandler(self.bestAttemptContent);

});

}]; } } else { self.contentHandler = contentHandler; self.bestAttemptContent = [request.content mutableCopy]; self.contentHandler(self.bestAttemptContent); } } 撤回消息的推送内容示例:

{ appData = "{"rc-dlt-identifier":"B7EE-8T9S-OI44-8NSS"}"; aps = { alert = { body = "\U4f60\U6536\U5230\U4e86\U4e00\U6761\U6d88\U606f"; }; badge = 2; category = "RC:RcCmd"; "mutable-content" = 1; sound = "aaaaaa.caf"; }; rc = { cType = PR; fId = 1xTlsmAn9; id = "B7EE-918C-GI64-8NSS"; oName = "RC:RcCmd"; sourceType = 0; tId = 1xTlsmAn9; }; richMediaUri = ""; } 其中通过 aps 中的 category 判断是不是撤回消息,如果是撤回消息,appData 中的 rc-dlt-identifier 表示要撤回消息的 id 。

注:

只有公有云支持该功能;

该功能只在 iOS 10 以上有效。

详情查看:https://www.rongcloud.cn/?utm_source=SEO&utm_term=helloworld

点赞
收藏
评论区
推荐文章
风斗 风斗
3年前
Android 通知栏使用
不同版本通知栏的创建方式不尽相同,当前官方推荐使用NotificationCompat相关的API,兼容到Android4.0,但是部分新功能,比如内嵌回复操作,旧版本是无法支持的。一、设置通知内容//CHANNEL_ID,渠道ID,Android8.0及更高版本必须要设置NotificationCompat.Builde
Wesley13 Wesley13
3年前
JS必知的6种继承方式
JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么如何在JS中实现继承呢?让我们拭目以待JS继承的实现方式既然要实现继承,那么首先我们得有一个父类,代码如下:// 父类function Person(name) { // 给构造函数添加了参数  this.name  name;
Stella981 Stella981
3年前
Android 服务器推送技术
在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比较麻烦,最近利用几天的时间对Android的推送通知服务进行初步的研究。在Android手机平台上,Google提供了C2DM(CloudtoDevi
融云IM即时通讯 融云IM即时通讯
1个月前
融云IM干货丨如果用户不在线,推送通知会怎样处理?
如果用户不在线,融云的推送通知会按照以下方式处理:离线消息推送:当用户不在线时,融云会将收到的单聊消息、群聊消息、系统消息、超级群消息通过第三方推送厂商或融云自建的推送服务通知客户端。这意味着即使用户的应用没有运行,他们也能通过系统通知栏接收到消息提醒。服
融云IM即时通讯 融云IM即时通讯
1个月前
融云IM干货丨在PC端接收Push需要哪些技术条件?
在PC端接收Push通知,需要满足以下技术条件:服务端支持:需要有一个能够发送Push通知的服务端。这通常涉及到集成第三方推送服务,比如融云的推送服务。客户端集成:应用程序需要在客户端集成第三方推送SDK。融云支持两种客户端集成方案:融云Push2.0推送
融云IM即时通讯 融云IM即时通讯
1个月前
融云IM干货丨移动端接收Push通知需要哪些技术条件?
移动端接收Push通知需要满足以下技术条件:操作系统和设备支持:设备需要运行支持推送通知的操作系统,如iOS或Android。推送服务:需要一个推送服务,如苹果的APNs(ApplePushNotificationservice)或Google的FCM(F
融云IM即时通讯 融云IM即时通讯
1个月前
融云IM干货丨如何在iOS和Android平台上实现推送通知自定义?
在iOS和Android平台上实现推送通知自定义,可以按照以下步骤操作:iOS平台自定义推送通知:启用推送通知功能:在Xcode中,为您的AppID启用推送通知功能。这可以在Apple开发者账户的Certificates,Identifiers&Profi
融云IM即时通讯 融云IM即时通讯
1个月前
融云IM干货丨如何衡量推送通知的及时性?
衡量推送通知的及时性可以通过以下几个指标来进行:推送到达时间:衡量从服务器发送推送通知到用户实际接收到通知的时间差。理想情况下,这个时间应该尽可能短,以确保信息的时效性。用户拒绝通知权限请求的速度:如果用户很快就拒绝接收通知权限请求,这可能意味着推送通知的
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
融云IM即时通讯 融云IM即时通讯
1个月前
融云IM干货丨 IM 服务,开通 Web/PC 在线时手机端接收 Push
根据搜索结果,要实现在Web/PC端在线时手机端也能接收Push通知的功能,您可以按照以下步骤操作:访问控制台:您需要访问融云控制台的免费基础功能页面。确认应用信息:在控制台中确认应用名称与环境(开发/生产)是否正确无误。开启功能:找到“Web/PC在线手
融云IM即时通讯
融云IM即时通讯
Lv1
北京云中融信网络科技有限公司(简称“融云”),是全球互联网通信云服务领创品牌。2014 年由创下亿级日活神话的“飞信”核心团队组建而成,依托沉淀近 20 年的领先技术基因,开创性地将通信技术封装为 SDK 提供给开发者和企业用户,大幅降低了行业对通信功能开发的难度和成本。 自成立以来,融云专注于向开发者和企业提供专业、简单、稳定的即时通讯和实时音视频 PaaS 服务。凭借产品、技术、服务等多方面优势,融云收获了超 80 万开发者和 2200+ 国家政府机关、企事业单位的青睐,支撑起 155 万+ 应用的通信需求,覆盖社交、娱乐、游戏、教育、电商、医疗等各行业场景,并打造出一系列中企出海最佳实践案例。 在全球范围内,融云构建了一张覆盖 245 个国家及地区的通信云网络,设立了多个海外数据中心以及数千加速节点,稳定互联,确保跨地域通信体验更加流畅。基于客户业务需求,融云可提供公有云、私有云、混合云等多种部署模式。 权威咨询机构“艾瑞咨询”数据报告显示,融云即时通讯云市场份额已连续多年稳居第一。
文章
184
粉丝
0
获赞
0