如何导入ios usernotificationns.framework

【译】UserNotifications Framework 入门介绍 - 推酷
【译】UserNotifications Framework 入门介绍
UserNotifications Framework 入门介绍
随着 iOS 10, tvOS 10, 和 watchOS 3 的发布, 苹果正在引入一个新的叫做 UserNotifications 的 framework。这个全新的 API 集合提供了一种统一的面向对象的
方式在这些平台上使用本地和远程的通知。相比目前的 API 会格外好用,本地和远程通知的处理方式很相似,并且访问通知内容不再仅通过字典型数据类型。
在这个教程中,我将遍历一遍这个新的 framework 的基础并且展示如何便捷的它的优点来为你的应用增加通知功能。
这个教程要求使用包含最新 iOS, tvOS, 和 watchOS 的 SDK 的 Xcode8 。
1.&注册通知
对任何需要通知的应用来说,第一步就是向用户请求权限。在之前的 iOS 版本中,在使用 UserNotifications 的 framework 的时候,通常是在应用刚刚启动完之后就执行这一步操作。
在使用任何 UserNotifications 的 API 之前,你必须在需要使用这个 framework 的 Swift 代码文件里增加下面这个导入声明
import UserNotifications
接下来,为了给你的 app 注册通知,你需要在你的
AppDelegate
application(_:didFinishLaunchingWithOptions:)
方法中增加如下代码:
let center = UNUserNotificationCenter.current()
let options: UNAuthorizationOptions = [.alert, .badge, .sound]
center.requestAuthorization(options: options) { (granted, error) in
if granted {
application.registerForRemoteNotifications()
通过这个代码,我们得到了当前
UNUserNotificationCenter
的对象的引用。下一步,我们根据我们应用需要的通知能力来配置
UNAuthorizationOptions
。请注意在这里可以任意组合以上的选项,比如只有
,或者同时有
通过使用这些对象,我们接下来通过调用
UNUserNotificationCenter
requestAuthorization(options:completionHandler:)
方法向我们的 app 申请展示通知的认证。这个 handler 的 block 会回传两个参数
一个代表是否得到的用户授权的
在某些情况下,系统不能为你的应用请求通知的认证时,会返回一个包含错误信息的 Error 对象。
你可以在上面的代码中看到,如果授权被用户授予的话,我们可以接下来注册远程通知。如果你需要使用推送通知的话,就需要这行代码。同时你也需要为你的项目多配置几步,详见这篇教程:
苹果原先引入推送通知的目的是使应用如果不在前台的话可以响应事件,可是…
请注意注册远程推送会调用之前 iOS 版本相同的
UIApplication
的回调方法。成功的话,
application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
,这个方法会调用,失败的话
application(_:didFailToRegisterForRemoteNotificationsWithError:)
会被调用。
2.&发送通知
在这一节的教程里,我们主要集中在通过使用 UserNotifications framwork 来实现发送本地推送。在这个 framework 的介绍中,发送远程推送通知的方法并没有改变。
一个本地推送在发送之前,通常是由一个
UNNotificationRequest
实例来代表的。这种类型的对象通常由下面几个元素组成:
* Identifier(识别符):一个唯一让你去区分不同通知的
* Content(内容):&一个包含所有通知需要展示的信息的
UNNotificationContent
对象,包括标题,子标题和应用的标记数.
* Trigger(触发器):一个系统用来确定什么时候该发送你的通知给你的应用的
UNNotificationTrigger
首先,我们将看一下那些可以用来创建本地推送的不同种类的触发器。
UNNotificationTrigger
类是个抽象类,意味着你不能直接创建它的实例。所以你只能使用那些可以用的子类。目前,UserNotifications 的framework提供了下面三种:
UNTimeIntervalNotificationTrigger
, 能够在一定时间后触发发送通知。
UNCalendarNotificationTrigger
, 能在特定日期和时间的触发发送通知,不管通知是什么时候创建的。
UNLocationNotificationTrigger
, 能够在用户到达或者离开某个设计好的地理位置触发,发送通知。
下面的代码展示了如何生成各个类型的触发器:
let timeTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 60.0 * 60.0, repeats: false)
var date = DateComponents()
date.hour = 22
let calendarTrigger = UNCalendarNotificationTrigger(dateMatching: date, repeats: true)
let center = CLLocationCoordinate2D(latitude: 40.0, longitude: 120.0)
let region = CLCircularRegion(center: center, radius: 500.0, identifier: &Location&)
region.notifyOnEntry =
region.notifyOnExit =
let locationTrigger = UNLocationNotificationTrigger(region: region, repeats: false)
通过上面的代码,可以生成以下条件的触发器:
timeTrigger
会在通知发送后的一个小时之后触发。
timeInterval
UNTimeIntervalNotificationTrigger
构造的时候以秒级别传入。
calendarTrigger
将会在每天 10:00PM 触发。预定的日期和时间可以在
UNCalendarNotificationTrigger
构造函数里通过改变传入的
DateComponents
这个对象的配置来轻松的改变。
locationTrigger
在用户到达指定坐标的 500 米内会触发,在这个例子里面是 40&N 120&E。从代码中可以看到,这类触发器可以使用任何坐标,或者任何区域大小,而且可以同时在进入和离开指定区域时触发通知。
下一步,我们需要创建通知的内容。这个通过创造一个
UNMutableNotificationContent
类的对象实例来实现。这个类必须像常用的
UNNotificationContent
类一样使用,对大量的通知内容只有可读的权限。
下面的代码展示了如何创建一个基础通知需要的内容:
let content = UNMutableNotificationContent()
content.title = &Notification Title&
content.subtitle = &Notification Subtitle&
content.body = &Some notification body information to be displayed.&
content.badge = 1
content.sound = UNNotificationSound.default()
如果你想要一个可用的属性列表,可以看一下
UNMutableNotificationContent
最后,我们现在只需要创建
UNNotificationRequest
对象并且发送它,可以通过下面的代码实现:
let request = UNNotificationRequest(identifier: &LocalNotification&, content: content, trigger: timeTrigger)
UNUserNotificationCenter.current().add(request) { error in
if let error = error {
// Do something with error
// Request was added successfully
有了这些代码,我们通过传递一个标示,内容对象和触发器给构造函数来创建了请求对象。接下来我们调用当前的
UNUserNotificationCenter
add(_:completionHandler:)
方法,然后使用完成的 handler 来实现是否成功计划发送通知之后的逻辑。
3.&接收通知
当使用 UserNotifications framework 的时候,处理收到消息的是一个实现了
UNUserNotificationCenterDelegate
协议的对象。这个对象可以是你想要的任何对象,并不是像之前的 iOS 版本,一定要是应用的代理。另一个需要注意的是,你必须在你的应用完全启动之后才能设置代理。对一个 iOS 应用来说,这个意味着你必须在你的应用的代理中除了
application(_:willFinishLaunchingWithOptions:)
application(_:didFinishLaunchingWithOptions:)
这两个方法中来给代理赋值。通过下面的代码可以非常容易的实现给用户通知设置代理:
UNUserNotificationCenter.current().delegate = delegateObject
随着你的代理的设置,当应用收到了一个通知时,有两个方法你需要担心的。两个方法都会传一个
UNNotification
的对象,它代表了通知已经收到。这个对象包含了一个
参数,代表了这个通知什么时候发送的,和一个
参数,就是之前的
UNNotificationRequest
对象的实例。通过这个请求对象,你可以获取到通知的内容和触发器(如果需要的话)。这个触发器是之前说的
UNNotificationTrigger
子类的其中之一,或者在推送通知的情况下,是
UNPushNotificationTrigger
类的实例。
UNUserNotificationCenterDelegate
协议中第一个定义的方法是
userNotificationCenter(_:willPresent:withCompletionHandler:)
,这个只有在你的应用在前台收到消息时调用。你可以获取通知的内容并且当需要时在你的应用内展示你自定义的交互界面。或者,当你的应用不在运行时,你可以通过一些配置让系统进行消息推送,下面是可选项:
Alert 弹出系统生成的通知交互界面
Sound 播放伴随通知的提示音
Badge 来编辑用户主页上你的应用的标记数
下面代码展示了一个
userNotificationCenter(_:willPresent:withCompletionHandler:)
实现的例子:
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -& Void) {
let content = notification.request.content
// Process notification content
completionHandler([.alert, .sound]) // Display notification as regular alert and play sound
UNUserNotificationCenterDelegate
协议定义的方法是
userNotificationCenter(_:didReceive:withCompletionHandler:)
。这个方法是当用户对你应用通知进行交互时调用,包括消除它或者通过它打开你的应用。&
这个方法会传入一个
UNNotificationResponse
对象,而不是
UNNotification
对象。这个对象包含了
UNNotification
对象代表了发送的通知。它还包含了一个
actionIdentifier
参数来区分用户是如何与这个通知交互的。UserNotifications framework 提供了动作常量给你比对,来区分通知是消失了还是你的应用被打开了。
下面的代码展示了一个
userNotificationCenter(_:didReceive:withCompletionHandler:)
方法实现的例子:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -& Void) {
let actionIdentifier = response.actionIdentifier
switch actionIdentifier {
case UNNotificationDismissActionIdentifier: // Notification was dismissed by user
// Do something
completionHandler()
case UNNotificationDefaultActionIdentifier: // App was opened from notification
// Do something
completionHandler()
completionHandler()
请注意对这个两个函数来说,你必须在处理完通知之后调用 handler 。一旦你调用了,系统就会知道你已经用完这个通知了并且可以执行任何需要的进程了,比如把通知放到用户的 Notification 中心。
4. 管理通知
时候,你的应用的一个用户会在应用不在运行的时候收到很多条通知。他们可能也会在主页直接打开你的应用,而不是通过一个通知。在上述任何一个情况下,没有一个
UNUserNotificationCenterDelegate
协议的方法会被调用。当使用本地通知的时候,你有时也会想在展示给用户之前移除一个通知。
因此, UserNotifications framework 在当前
UNUserNotificationCenter
的实例中提供了以下的方法来操作待定的本地通知和收到却还未处理的通知。
getPendingNotificationRequests(completionHandler:)
在处理器里提供了一个
UNNotificationRequest
对象的数组。这个数组包含了所有你计划了却还没触发的本地通知。
removePendingNotificationRequests(withIdentifiers:)
&移除所有包含你传进去的
数组中对象的标示的本地通知。
removeAllPendingNotificationRequests
移除你应用所有的本地通知。
getDeliveredNotifications(completionHandler:)
&在处理器里提供了一个
UNNotificationRequest
对象的数组。这个数组包含了所有你收到了还在用户中心显示的通知。
removeDeliveredNotifications(withIdentifiers:)
&在用户中心中移除所有包含你传进去的
数组中对象的标示的收到的通知。
removeAllDeliveredNotifications
&移除你应用所有收到的通知。
5.&自定义动作通知
UserNotifications framework 也让你可以更好的使用在 iOS8 中引入的自定义通知拓展和动作。
首先,你需要分别定义你应用支持
unnotificationaction
unnotificationcategory
类的自定义的动作和拓展。比如你想让用户可以输入文字的动作,你可以使用
UNTextInputNotificationAction
UNNotificationAction
的子类。一旦你的动作和拓展定义好了,你只需要在当前的
UNUserNotificationCenter
的实例中调用
setNotificationCategories(_:)
方法。下面的代码展示了,如何简单地在你应用中为消息类型注册回复和删除动作:
let replyAction = UNTextInputNotificationAction(identifier: &com.usernotificationstutorial.reply&, title: &Reply&, options: [], textInputButtonTitle: &Send&, textInputPlaceholder: &Type your message&)
let deleteAction = UNNotificationAction(identifier: &com.usernotificationstutorial.delete&, title: &Delete&, options: [.authenticationRequired, .destructive])
let category = UNNotificationCategory(identifier: &com.usernotificationstutorial.message&, actions: [replyAction, deleteAction], intentIdentifiers: [], options: [])
center.setNotificationCategories([category])
接下来,当用户使用你的一个自定义动作地时候,之前我们提到的
userNotificationCenter(_:didReceive:withCompletionHandler:)
相同的方法会被调用。在这个例子里,这个传入的
UNNotificationResponse
对象的动作标示将和你之前定义的自定义动作相同。这个需要注意的是,如果用户通过一个文字输入的通知动作交互的话,方法中传入的响应对象会是
UNTextInputNotificationResponse
下面的代码展示了一个实现这个方法的例子,包括了之前创建动作的逻辑:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -& Void) {
let actionIdentifier = response.actionIdentifier
let content = response.notification.request.content
switch actionIdentifier {
case UNNotificationDismissActionIdentifier: // Notification was dismissed by user
// Do something
completionHandler()
case UNNotificationDefaultActionIdentifier: // App was opened from notification
// Do something
completionHandler()
case &com.usernotificationstutorial.reply&:
if let textResponse = response as? UNTextInputNotificationResponse {
let reply = textResponse.userText
// Send reply message
completionHandler()
case &com.usernotificationstutorial.delete&:
// Delete message
completionHandler()
completionHandler()
另外,如果你想好好利用本地通知的优点的话,你可以简单的在创建通知的时候在你的
UNMutableNotificationContent
对象上设置
categoryIdentifier
新的 UserNotifications framework 提供了全面并且使用简单的 面向对象的 API 来操作在 iOS,watchOS 和 tvOS 中本地和远程通知。这使得它可以简洁的安排不同情境下的本地通知,同时也简化了处理通知和自定义动作的整个工作流程。
与往常一样,请务必在下面留下你的评论和反馈,并看下我们的其他关于 iOS 10 和 watchOS3 新特点的文章和教程。
UserNotifications framework 也让你可以更好的使用在 iOS8 中引入的自定义通知拓展和动作。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致Pages: 1/2
主题 : Xcode7.3 使用IOS10下的UserNotifications.framework框架
级别: 新手上路
可可豆: 14 CB
威望: 14 点
在线时间: 51(时)
发自: Web Page
来源于&&分类
Xcode7.3 使用IOS10下的UserNotifications.framework框架&&&
iOS10 下已经明确警告⚠:Legacy VoIP background mode is deprecated and no longer supported.自己的项目用的就是VoIP background mod。所以一直没有升级Xcode。项目里面有个重要的功能:就是用过VoIP background mode连接传来的通知,本地推送给用户。这样就有个矛盾。情况一:使用Xcode7.3&&支持 VoIP background mode&&但是没有UserNotifications.framework框架,做不了ios10下的本地推送。情况二: 使用Xcode8.0 可以做ios10下的本地推送,但是不支持VoIP background mode,推送的时机都捉不到了。我就想在xcode7.3中使用UserNotifications.framework框架,自己做了实验,直接复制UserNotifications.framework这个文件到Xcode7.3对应的文件目录下之后,编译是通不过的。直接作为第三方库使用也是编译通不过的。新手求救!!!!!!!
级别: 精灵王
发帖: 1788
可可豆: 1936 CB
威望: 1934 点
在线时间: 3745(时)
发自: Web Page
换个xcode8很麻烦吗?
级别: 新手上路
可可豆: 14 CB
威望: 14 点
在线时间: 51(时)
发自: Web Page
回 1楼(noah1985) 的帖子
使用Xcode8.0 不支持VoIP background mode&&整个项目后台就全挂了。
级别: 新手上路
UID: 456404
可可豆: 10 CB
威望: 11 点
在线时间: 55(时)
发自: Web Page
表示我也遇到这个问题。~~想用xcod7适配ios10 的 通知功能
级别: 新手上路
可可豆: 3 CB
威望: 3 点
在线时间: 8(时)
发自: Web Page
我现在的业务也是这样,项目在xcode8 中开发的集成的极光推送用到了这个UserNotifications.framework框架,就只有手机系统是ios10的能收到推送,现在想兼容iOS8.0系统的怎么做?
级别: 新手上路
可可豆: 3 CB
威望: 3 点
在线时间: 8(时)
发自: Web Page
file:///Users/huangluoxin/Library/Containers/com.tencent.qq/Data/Library/Application%20Support/QQ/Users//QQ/Temp.db/25B437BE-077B-4FBE-BE2C-CC2.png可能是这个原因
级别: 新手上路
可可豆: 3 CB
威望: 3 点
在线时间: 8(时)
发自: Web Page
回 5楼(hlx_up) 的帖子
可能是这个原因
描述:可能是这个原因
图片:25B437BE-077B-4FBE-BE2C-CC2.png
级别: 新手上路
可可豆: 14 CB
威望: 14 点
在线时间: 51(时)
发自: Web Page
回 4楼(hlx_up) 的帖子
可以判断iOS版本的,通过判断ios版本使用不同推送机制啊。
级别: 新手上路
可可豆: 5 CB
威望: 5 点
在线时间: 37(时)
发自: Web Page
回 楼主(lijialun) 的帖子
楼主 为什么我xcode7.3.1 按照你写的 ,usernotification.framework 选了optional ,还是报错误
图片:屏幕快照
12.40.50.png
级别: 新手上路
UID: 176365
可可豆: 185 CB
威望: 124 点
在线时间: 510(时)
发自: Web Page
回 楼主(lijialun) 的帖子
楼主,请问问题解决了吗?
Pages: 1/2
关注本帖(如果有新回复会站内信通知您)
苹果公司现任CEO是谁?2字 正确答案:库克
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版玩转 iOS 10 推送 —— UserNotifications Framework(中) - 简书
<div class="fixed-btn note-fixed-download" data-toggle="popover" data-placement="left" data-html="true" data-trigger="hover" data-content=''>
写了15926字,被520人关注,获得了504个喜欢
玩转 iOS 10 推送 —— UserNotifications Framework(中)
咱们聊了一些:
iOS 10 before 推送的流程
iOS 10 beta 推送的基本使用方法
以及跟 iOS 10 before 推送的区别
这一篇咱们将继续探讨 iOS 10 推送,并向大家介绍一些进阶的内容。
Notification Actions
在 iOS 10 中,可以允许推送添加交互操作 action,这些 action 可以使得 App 在前台或后台执行一些逻辑代码。并且在锁屏界面通过 3d-touch 触发。如:推出键盘进行快捷回复,该功能以往只在 iMessage 中可行。(Notification Actions 在 iOS 8 引入,快捷回复在 iOS 9 引入,在 iOS 10 中,这些 API 被统一。)
在 iOS 10 中,这叫 category,是对推送功能的一个拓展,可以通过 3d-touch 触发。
创建 action
即一项交互操作
title 是交互按钮的内容
options 可以让该 action 成为一条可在前台执行的 action
UNNotificationAction *action = [UNNotificationAction actionWithIdentifier:@"reply" title:@"Reply" options:UNNotificationActionOptionNone];
创建 category
可添加多个 action 的数组,就像图片中一样,有多种操作
其中的 id,需要填写你想要添加到哪个推送消息的 id
UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:@"message" actions:@[action] minimalActions:@[action] intentIdentifiers:@[] options:UNNotificationCategoryOptionNone];
把 category 添加到通知中心:
[[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithArray:@[category]]];
触发方式:
Remote Notifications 配置 payload,指定其中 category 的值与第 2 步中 Identifier 一致:
alert : "Welcome to WWDC !",
category : "message"
Local Notifications 只需要在创建 contnet 的时候指定 Id 即可:(content 相关内容请参照
中的 Content 部分)
content。categoryIdentifier = @"message";
Dismiss Actions
锁屏及在通知中心收到推送,侧滑,会展示 action。
只要点击 Clear 就可以将该条推送清除,并且重复的内容不会被发送到你的其他 iOS 设备上。
跟 Notification Actions 只有一点小区别,就是添加 action 到 category 的时候,增加一个 option 的值 UNNotificationCategoryOptionCustomDismissAction:
UNNotificationAction *clearAction = [UNNotificationAction actionWithIdentifier:@"clear" title:@"clear" options:UNNotificationActionOptionNone];
UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:@"clear" actions:@[clearAction] intentIdentifiers:@[] options:UNNotificationCategoryOptionCustomDismissAction];//这里增加一个 dismiss 的值
Response handling
用户点击这些 actions 以后,是启动 App、触发键盘、清除通知或是有其他的响应,这些全部只需要实现协议 UNUserNotificationCenterDelegate 中的一个方法就可以控制:
@interface ClassName () &UNUserNotificationCenterDelegate&
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
其中的 response 包含以下内容:
其中的 trigger 可以用来判断是远程推送还是本地推送。
处理 response 举例:
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
NSString *categoryIdentifier = response.notification.request.content.categoryI
if ([categoryIdentifier isEqualToString:@"handle category"]) {//识别需要被处理的拓展
if ([response.actionIdentifier isEqualToString:@"input text"]) {//识别用户点击的是哪个 action
//假设点击了输入内容的 UNTextInputNotificationAction 把 response 强转类型
UNTextInputNotificationResponse *textResponse = (UNTextInputNotificationResponse*)
//获取输入内容
NSString *userText = textResponse.userT
//发送 userText 给需要接收的方法
[ClassName handleUserText: userText];
completionHandler();
Service Extension
可以在手机「接收到推送之后、展示推送之前」对推送进行处理,更改、替换原有的内容。
使用了这个玩意,你们公司原有发送推送的 payload 可以完全不变,而在客户端对接收到的内容(只有一条字符串)进行加工,从而适配 iOS 10 的展示效果(标题+副标题+内容)。
「接收到推送之后、展示推送之前」:
此时,你获得了一小段在后台运行代码的时间(也可以用来干别的坏事&。&,可以偷偷的断点下载你们 App 的更新包)
而如果你更改推送内容出了错误,或者你调用什么方法失败了,那么最终会正常的展示最初接收到的推送内容。
Potential uses
值得你们 App 充分发挥的是可以做以下事情:
端到端加密
给推送展示内容添加附件(比如照片、背景音乐),使得内容更加丰富,就像从推送里拉出了一个网页有木有!
不急,我们先来介绍怎么
添加 Service Extension
先在 Xcode 打开你的 App 工程,File - New - Target 然后添加这个:
然后会自动创建一个 UNNotificationServiceExtension 的子类 NotificationService,通过完善这个子类,来实现你的需求。
点开 NotificationService.m 会看到 2 个方法:
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentH
self.bestAttemptContent = [request.content mutableCopy];
self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
self.contentHandler(self.bestAttemptContent);
- (void)serviceExtensionTimeWillExpire {
self.contentHandler(self.bestAttemptContent);
didReceiveNotificationRequest 让你可以在后台处理接收到的推送,传递最终的内容给 contentHandler
serviceExtensionTimeWillExpire 在你获得的一小段运行代码的时间即将结束的时候,如果仍然没有成功的传入内容,会走到这个方法,可以在这里传肯定不会出错的内容,或者他会默认传递原始的推送内容
Example payload
alert : "New Message",
mutable-content : 1
encrypted-content : "#myencryptedcontent"
首先需要添加 mutable-content : 1,这意味着此条推送可以被 Service Extension 进行更改
同时可以附加一条 encrypted-content,可以提取该内容进行替换
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
//用你的重编码方法对该内容进行更改
NSString *decryptedBody = [DecryptClass decrypt: request.content.userInfo[@"encrypted-content"]];
//创建新的 content 并添加修改过的 body
UNMutableNotificationContent *newContent = [UNMutableNotificationContent new];
newContent.body = decryptedB
//回调新的 content
contentHandler(newContent);
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
玩转简书的第一步,从这个专题开始。
想上首页热门榜么?好内容想被更多人看到么?来投稿吧!如果被拒也不要灰心哦~入选文章会进一个队...
· 143721人关注
分享 iOS 开发的知识,解决大家遇到的问题,讨论iOS开发的前沿,欢迎大家投稿~
· 28856人关注
纪录开发的点点滴滴,相互学习,共同进步~
专题内容主要包括Object-C、Swift等开发技巧以及学习过程的内容
· 2261人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:

我要回帖

更多关于 usernotifications 的文章

 

随机推荐