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

融云IM即时通讯
• 阅读 471

实现方式请参照 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

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
UIWebView长按保存图片和识别图片二维码的实现方案(使用缓存)
0x00需求:长按识别UIWebView中的二维码,如下图长按识别二维码0x01方案1:给UIWebView增加一个长按手势,激活长按手势时获取当前UIWebView的截图,分析是否包含二维码。核心代码:略优点:流程简单,可以快速实现。不足:无法实现保存UIWebView中图片,如果当前We
风斗 风斗
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;
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Android 服务器推送技术
在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相对比较麻烦,最近利用几天的时间对Android的推送通知服务进行初步的研究。在Android手机平台上,Google提供了C2DM(CloudtoDevi
Stella981 Stella981
3年前
Angular2+ iframe跨域调用父页面js
业务场景:列表页面添加一个导入功能,该导入功能由第三方页面提供,导入完成后需要通知主列表刷新数据。先来看看iframe跨域调用父页面的实现逻辑(以postMessage方式为例)_(postMessage介绍:https://developer.mozilla.org/zhCN/docs/Web/API/Window/pos
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
3年前
Notification使用详解之三:通过服务更新进度通知&在Activity中监听服务进度
上次我们讲到如何实现一个可更新的进度通知,实现的方式是启动一个线程模拟一个下载任务,然后根据任务进度向UI线程消息队列发送进度消息,UI线程根据进度消息更新通知的UI界面。可是在实际应用中,我们一般会将上传、下载等比较耗时的后台任务以服务的形式运行,更新进度通知也是交由后台服务来完成的。不过有的时候,除了在通知里面显示进度信息,我们也要在Activit
融云IM即时通讯 融云IM即时通讯
11个月前
如何自定义本地通知提示音
如果使用了SDK的本地通知,只想自定义本地通知的提示音,可以参考如下:自定义声音文件,命名为“smsreceived”,格式为“caf”(这里是SDK代码根据这个命名来判断设置本地通知提示音的,所以一定要一致)找到工程中添加的sdk的资源文件RongClo
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
融云IM即时通讯
融云IM即时通讯
Lv1
北京云中融信网络科技有限公司(简称“融云”),是全球互联网通信云服务领创品牌。2014 年由创下亿级日活神话的“飞信”核心团队组建而成,依托沉淀近 20 年的领先技术基因,开创性地将通信技术封装为 SDK 提供给开发者和企业用户,大幅降低了行业对通信功能开发的难度和成本。 自成立以来,融云专注于向开发者和企业提供专业、简单、稳定的即时通讯和实时音视频 PaaS 服务。凭借产品、技术、服务等多方面优势,融云收获了超 80 万开发者和 2200+ 国家政府机关、企事业单位的青睐,支撑起 155 万+ 应用的通信需求,覆盖社交、娱乐、游戏、教育、电商、医疗等各行业场景,并打造出一系列中企出海最佳实践案例。 在全球范围内,融云构建了一张覆盖 245 个国家及地区的通信云网络,设立了多个海外数据中心以及数千加速节点,稳定互联,确保跨地域通信体验更加流畅。基于客户业务需求,融云可提供公有云、私有云、混合云等多种部署模式。 权威咨询机构“艾瑞咨询”数据报告显示,融云即时通讯云市场份额已连续多年稳居第一。
文章
112
粉丝
0
获赞
0