如何在ios推送通知中显示图像?

时间:2016-06-15 15:04:50

标签: ios push-notification apple-push-notifications ios10

iOS 10引入了推送通知框架更新,

  

UserNotificationsUI.framework

正如在Apple docs上所写,它可以让我们在用户设备上显示本地和远程通知时自定义它们的外观。

因此,如果有人知道如何在锁定屏幕上显示推送通知中的图像。和andorid推送通知一样。

谢谢,

4 个答案:

答案 0 :(得分:76)

如果要自定义本地和远程通知的外观,请执行以下步骤:

  1. 创建UNNotificationCategory并添加到UNUserNotificationCenter类别:

    let newCategory = UNNotificationCategory(identifier: "newCategory",
                                             actions: [ action ],
                                             minimalActions: [ action ],
                                             intentIdentifiers: [],
                                             options: [])
    
    let center = UNUserNotificationCenter.current()
    
    center.setNotificationCategories([newCategory])
    
  2. 创建一个UNNotificationContentExtension:

  3. enter image description here

    然后使用代码或故事板来自定义UIViewController

    1. 将类别添加到UNNotificationContentExtension的plist:
    2. enter image description here

      4.Push Notification

      本地通知

      创建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"与您之前添加到UNUserNotificationCenterUNNotificationContentExtension的plist中的内容相匹配。

      示例:

       {
          "aps" : {
              "alert" : {
              "title" : "title",
              "body" : "Your message Here"
              },
              "mutable-content" : "1",
              "category" : "newCategory"
          },
          "otherCustomURL" : "http://www.xxx.jpg"
       }
      
      1. 注意:您需要支持3DTouch的设备或模拟器,否则您无法显示自定义UNNotificationContentExtension视图控制器。(在iOS10 Beta1中,它不起作用。但现在这项工作没有3D触摸)
      2. 并且......如果您只想在锁定屏幕上显示的推送通知上显示图像,则需要添加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)
        

        enter image description here

        有关详细信息,Demo

答案 1 :(得分:9)

实际上,如果您正在设置本地通知,并且您只想在通知本身中显示图像,则根本不需要使用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等设置内容扩展的所有环节。

编辑:已更新,以补充说这只是本地通知的有效解决方案。

答案 2 :(得分:3)

您必须在创建推送通知以及处理时做一些工作。

  1. 创建有效负载时,您需要添加额外的属性附件,如下所示:

    {        
        aps : {
            alert: { },
            mutable-content:1
        }
        my-attachment = "url to resource"
    }
    
  2. 当您收到通知系统时会调用didReceive服务扩展程序方法,覆盖此类通知扩展程序didReceive

    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)
    }
    
  3. Here是关于此主题的WWDC视频讲座。

答案 3 :(得分:-2)

使用符合UNNotificationContentExtension的UIViewController实现通知的自定义视图。

请参阅https://developer.apple.com/reference/usernotificationsui/unnotificationcontentextension