IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> IOS 图文富文本推送 UNNotificationServiceExtension UNNotificationContentExtension -> 正文阅读

[移动开发]IOS 图文富文本推送 UNNotificationServiceExtension UNNotificationContentExtension

      实现一个最简单的ios图文富文本推送,只说重点以及实现的相关代码

以下功能需要在基本推送的基础上实现,关于基本推送,后面我们专门出一篇文章介绍,并一步一步实现

一.新建Notification Service Extension
如图:
在这里插入图片描述

Identity规则:包名.xxx
系统会生成NotificationService类,这是用来接收推送消息json的类,即服务器向apns发送的json原始数据可以在这里拦截到,并进行处理

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

    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];
    
    NSDictionary *dict =  self.bestAttemptContent.userInfo;
    NSDictionary *notiDict = dict[@"aps"];
    self.bestAttemptContent.subtitle = [notiDict objectForKey:@"body"];
    self.bestAttemptContent.sound = [UNNotificationSound soundNamed:@"default"];
    NSString *imagePath = dict[@"imageUrl"] ;
    UNNotificationAttachment * attachment = [UNNotificationAttachment attachmentWithIdentifier:@"imageMy" URL:[self downLoadImageWriteToFile:imagePath] options:nil error:nil];
    if (attachment)
    {
        self.bestAttemptContent.attachments = @[attachment];
    }
    self.contentHandler(self.bestAttemptContent);
}

二.新建Notification Content Extension
如图:
在这里插入图片描述
Identity规则:包名.xxx
这个会生成NotificationViewController类,主要是设置推送消息的布局,如下:

- (void)didReceiveNotification:(UNNotification *)notification {
    if (notification.request.content.attachments && notification.request.content.attachments.count > 0) {
           UNNotificationAttachment *attachment = [notification.request.content.attachments firstObject];
           //通过使用安全作用域解析创建的attachment数据而创建的NSURL,使url引用的资源可供进程访问。
           //startAccessingSecurityScopedResource与stopAccessingSecurityScopedResource需成对出现
           //当不再需要访问此资源时,客户端必须调用stopAccessingSecurityScopedResource
           if ([attachment.URL startAccessingSecurityScopedResource]) {
               NSData *imageData = [NSData dataWithContentsOfURL:attachment.URL];
               self.imageView.image = [UIImage imageWithData:imageData];
               [attachment.URL stopAccessingSecurityScopedResource];
           }
       }
}

那么问题来了,怎么将NotificationService获取到的图片信息传递到NotificationViewController类中并显示呢
我的做法是在NotificationService类中把图片下载到沙河,然后在NotificationViewController中加载沙盒图片(中间有很多细节,列如30s超时,这里不赘述),特别要注意,不同target(即Notification Service Extension与UNotification Content Extension)获取沙盒文件会出现路径不一样导致获取不到文件,以上代码中提供了一种方式,大家可以看看

apns json示例:

{
	"aps":{
		"alert":"",
		"sound":"default",
		"badge":1,
		"mutable-content": 1,
		"category": "categoryMy",
		"imageUrl":"xxx"
	}

}

其中:imageUrl是我们推送包含的图片URL,
mutable-content写固定值为1
category 必须与Notification Content Extension的plist文件一致,如果你有多个Notification Content Extension,也可以指定不同的category实现不同的布局,如图:在这里插入图片描述

代码写完后,我们可以使用推送工具模拟推送,app store上有很多第三方的推送工具,大家可以试试
推送后,如果想在Notification Content Extension或者Notification Service Extension打断点,却一直打不上怎么办,有以下两个原因
1.ios版本设置比手机的高,导致无法调试
2.没有在debug下绑定pid,pid即为刚刚Notification Content Extension或者Notification Service Extension的Identity
在这里插入图片描述
今天就简单介绍到这里,虽然说很多细节没有说明白,但是只要按照以上步骤,90%的人copy也能顺利跑起来,如果有问题或者想了解更多细节,可以留言,看到会回复

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:23:00  更:2022-09-04 01:25:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:21:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码