iOS 10引入了推送通知框架更新,
UserNotificationsUI.framework
根据苹果文档所述,它允许我们在用户设备上显示本地和远程通知时自定义外观。
因此,如果有人知道如何在锁定屏幕上显示推送通知中的图像。与安卓推送通知相同。
谢谢,
iOS 10引入了推送通知框架更新,
UserNotificationsUI.framework
根据苹果文档所述,它允许我们在用户设备上显示本地和远程通知时自定义外观。
因此,如果有人知道如何在锁定屏幕上显示推送通知中的图像。与安卓推送通知相同。
谢谢,
创建一个 UNNotificationCategory
并将其添加到 UNUserNotificationCenter
类别中:
let newCategory = UNNotificationCategory(identifier: "newCategory",
actions: [ action ],
minimalActions: [ action ],
intentIdentifiers: [],
options: [])
let center = UNUserNotificationCenter.current()
center.setNotificationCategories([newCategory])
创建一个UNNotificationContentExtension:
然后使用代码或者Storyboard自定义你的UIViewController
。
UNNotificationContentExtension
的plist文件中添加分类:4.推送通知
本地通知
创建一个UNMutableNotificationContent
对象并将其categoryIdentifier
设置为“newCategory”,其中包含了UNUserNotificationCenter
的分类和UNNotificationContentExtension
的plist文件:
let content = UNMutableNotificationContent()
content.title = ...
content.body = ...
content.categoryIdentifier = "newCategory"
let request = UNNotificationRequest.init(identifier: "newNotificationRequest", content: content, trigger: nil)
let center = UNUserNotificationCenter.current()
center.add(request)
远程通知
设置 "mutable-content : 1"
和 "category : newCategory"
。请注意,类别值设置为 "newCategory",与之前添加到 UNUserNotificationCenter
和 UNNotificationContentExtension
的 plist 文件匹配。
示例:
{
"aps" : {
"alert" : {
"title" : "title",
"body" : "Your message Here"
},
"mutable-content" : "1",
"category" : "newCategory"
},
"otherCustomURL" : "http://www.xxx.jpg"
}
UNNotificationContentExtension
视图控制器。(在iOS10 Beta1中,这是无效的。但现在不需要3D Touch即可使用)而且...如果你只想在锁屏界面上显示推送通知中的图片,你需要添加UNNotificationAttachment
:
let content = UNMutableNotificationContent()
content.title = ...
content.body = ...
content.categoryIdentifier = "newCategory"
let fileURL: URL = ... // your disk file url, support image, audio, movie
let attachement = try? UNNotificationAttachment(identifier: "attachment", url: fileURL, options: nil)
content.attachments = [attachement!]
let request = UNNotificationRequest.init(identifier: "newNotificationRequest", content: content, trigger: nil)
let center = UNUserNotificationCenter.current()
center.add(request)
如需更详细的功能信息,请参考演示
"mutable-content": 1
,即整数 1
,而不是字符串 "1"
,我错了吗? - BigRonNotificationServiceExtension
。NotificationContentExtension
不适用,因为它只是为了呈现传递给它的现有内容。该附件必须在NotificationServiceExtension
中通过本地传递或下载。更多信息请参见 https://developer.apple.com/videos/play/wwdc2016/708/ - mfaani实际上,如果您正在设置本地通知并且只想在通知本身中显示图像,则根本不需要涉及NotificationsUI.framework或UNNotificationContentExtensions。只有在您希望用户3D触摸或扩展通知时使用自定义UI时,才有用。
要添加已经存在于设备上的图像(可以是随应用程序一起提供的图像,也可以是在创建通知之前应用程序生成/存储的图像),则只需要使用文件URL添加一个UNNotificationAttachment,其中路径以.png结尾(.jpg可能也有效?)。类似这样:
UNMutableNotificationContent *content = [UNMutableNotificationContent new];
content.title = @"Title";
content.body = @"Body";
content.sound = [UNNotificationSound defaultSound];
NSURL *imageURL = [NSURL URLWithString:@"file:/some/path/in/app/image.png"];
NSError *error;
UNNotificationAttachment *icon = [UNNotificationAttachment attachmentWithIdentifier:@"image" URL:imageURL options:nil error:&error];
if (error)
{
NSLog(@"error while storing image attachment in notification: %@", error);
}
if (icon)
{
content.attachments = @[icon];
}
当通知出现时,图片将会像消息通知一样显示在通知横幅的右侧。而且你不需要通过设置带有categoryIdentifier的内容扩展等方式来完成。
编辑:更新以添加这只是本地通知的有效解决方案。
您需要在创建推送通知时进行一些工作,以及在处理时进行一些操作。
When you creating payload you need to add extra attribute attachment, something like below:
{
aps : {
alert: { },
mutable-content:1
}
my-attachment = "url to resource"
}
When you receive notification system will call didReceive
method of service extension, override notification extension didReceive
method like this
public func didReceive(_ request:UNNotificationRequest, withContentHandler contentHandler:(UNNotificatinContent) -> Void) {
let fileUrl = //
let attachment = UNNotificationAttachment(identifier : "image", url: fileUrl, options: nil)
let content = request.content.mutableCopy as! UNMutableNotificationContent
content.attachment = [attachment]
contentHandler(content)
}
这里是关于此主题的WWDC视频讲座。
import NetmeraNotificationServiceExtension
。target 'your_service_extension_target_name' do
pod "Netmera/NotificationServiceExtension"
end
class NotificationService : NetmeraNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (_ contentToDeliver: UNNotificationContent) -> Void) {
super.didReceive(request, withContentHandler: contentHandler)
}
override func serviceExtensionTimeWillExpire() {
super.serviceExtensionTimeWillExpire()
}
}
pod "Netmera/NotificationServiceExtension"
使用符合UNNotificationContentExtension的UIViewController来实现您的通知自定义视图。
请参阅https://developer.apple.com/reference/usernotificationsui/unnotificationcontentextension
NotificationServiceExtension
。NotificationContentExtension
不起作用,因为它只是呈现传递给它的现有内容。附件必须在NotificationServiceExtension
中本地传递或下载。有关更多信息,请参见 https://developer.apple.com/videos/play/wwdc2016/708/。 - mfaani