创建一个简单的 UNNotificationContentExtension

步骤 1

使环境适合通知。确保启用了“ 后台模式” 和“ 推送通知” StackOverflow 文档

StackOverflow 文档

第 2 步:创建 UNNotificationContentExtension

单击底部的 + 图标创建目标模板,然后选择通知内容扩展 - >下一步 - >为内容扩展创建名称 - >完成 StackOverflow 文档

步骤 3:配置创建的扩展的 info.plist 文件

StackOverflow 文档

NSExtension 中的字典表示通知内容的显示方式,这些是在长按收到的通知时执行的

  • UNNotificationExtensionOverridesDefaultTitle:默认情况下,我们可以为通知提供自定义标题,显示应用程序的名称 self.title = myTitle
  • UNNotificationDefaultContentHidden:此布尔值确定是否隐藏通知的默认主体
  • UNNotificationCategory:类别在应用程序的 UNUserNotificationCenter 中创建。这里它可以是字符串或字符串数​​组,因此每个类别都可以提供不同类型的数据,我们可以从中创建不同的 UI。我们发送的有效负载必须包含类别名称才能显示此特定扩展名
  • UNNotificationExtensionInitialContentSizeRatio:初始内容的大小,即第一次显示 ContentExtension 时初始大小相对于设备宽度的大小。这里 1 表示高度等于宽度

第 4 步:在我们的应用程序中创建 UNNotificationActionUNNotificationCategory

在你的应用程序的 AppDelegate.swift didFinishLaunchingWithOptions 功能添加

    let userNotificationAction:UNNotificationAction = UNNotificationAction.init(identifier: "ID1", title: "வணக்கம்", options: .destructive)
    let userNotificationAction2:UNNotificationAction = UNNotificationAction.init(identifier: "ID2", title: "Success", options: .destructive)
    
    let notifCategory:UNNotificationCategory = UNNotificationCategory.init(identifier: "CATID1", actions: [userNotificationAction,userNotificationAction2], intentIdentifiers: ["ID1","ID2"] , options:.customDismissAction)
    
    UNUserNotificationCenter.current().delegate = self
    UNUserNotificationCenter.current().setNotificationCategories([notifCategory])
    UIApplication.shared.registerForRemoteNotifications()

我们用标识符 ID1ID2 创建了两个 UNNotificationAction,并将这些动作添加到标识为 CATID1UNNotificationCategory(ContentExtension 的 info.plist 文件中的 categoryID 相同,我们在这里创建的应该用在有效负载和 plist 文件中)。我们将类别设置为我们的应用程序的 UNUserNotificationCenter,在下一行中我们正在注册调用 didRegisterForRemoteNotificationsWithDeviceToken 函数的通知,我们获取设备令牌

注意:不要忘记在 AppDelegate.swift 中使用 import UserNotifications 并添加 UNUserNotificationCenterDelegate

步骤 5:NotificationContent 的示例有效负载

 'aps': {
    'badge': 0,
    'alert': {
        'title': "Rich Notification",
        'body': "Body of RICH NOTIFICATION",
        },
    'sound' : "default",
    'category': "CATID1",
    'mutable-content':"1",
    },
'attachment': "2"

第 6 步:配置 ContentExtension

执行通知操作时,将自动显示该类别的相应操作。让我们看看代码是如何执行的

import UIKit
import UserNotifications
import UserNotificationsUI

class NotificationViewController: UIViewController, UNNotificationContentExtension {

@IBOutlet var imageView: UIImageView?
override func viewDidLoad() {
    super.viewDidLoad()
}

func didReceive(_ notification: UNNotification) {
     self.title = "Koushik"
    imageView?.backgroundColor = UIColor.clear
    imageView?.image = #imageLiteral(resourceName: "welcome.jpeg")
}

func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) {
    
    self.title = "Koushik"
    imageView?.image = UIImage.init(named: "Success.jpeg")
    
    if(response.actionIdentifier == "ID1")
    {
       imageView?.image = UIImage.init(named: "Success.jpeg")
    }
    else
    {
        imageView?.image = UIImage.init(named: "welcome.jpeg")
    }
    
    }
}

第 7 步:结果

收到并长按/单击查看通知后,通知如下所示 https://i.stack.imgur.com/BOkQC.jpg

标题是 Koushik,因为我们将 self.title = "Koushik"UNNotificationExtensionOverrideDefaultTitle 作为 YES。在步骤 3 中,如果是,则将 UNNotificationExtensionDefaultContentHidden 作为 NO,然后通知将看起来像图像 3 和 4。