iOS 上的丰富通知

Posted

技术标签:

【中文标题】iOS 上的丰富通知【英文标题】:Rich notification on iOS 【发布时间】:2017-04-27 08:10:47 【问题描述】:

我需要在 ios 10 及更高版本的 iPhone(5x、6x 和 7x)机型上启用丰富通知。通知带有嵌入式图像,默认情况下应展开图像。请参阅下面的示例图片:

谁能帮忙?

提前致谢。

【问题讨论】:

【参考方案1】:

我在 iOS 10 中的 Rich Notification 文档中创建了一个示例,看看它你可能会得到一些关于 Rich Notification 的想法,该示例是关于在UNNotificationContentExtension 中显示图像

第一步

使环境适合通知。确保您启用了 Background ModesPush Notification

第 2 步:创建 UNNotificationContentExtension

点击底部的+图标创建一个目标模板并选择通知内容扩展->下一步->为内容扩展创建一个名称->完成

第三步:配置已创建扩展的 info.plist 文件

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

UNNotificationExtensionOverridesDefaultTitle:我们可以给我们的通知自定义标题默认显示应用程序的名称self.title = myTitle UNNotificationExtensionDefaultContentHidden:此布尔值确定通知的默认正文是否隐藏 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()

我们创建了两个UNNotificationAction,标识符为ID1ID2,并将这些操作添加到标识符为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 步:结果

收到并长按/单击查看通知后,通知看起来像这样

标题是“Koushik”,因为我们将self.title = "Koushik"UNNotificationExtensionOverrideDefaultTitle 设为YES。在第 3 步中,我们将UNNotificationExtensionDefaultContentHidden 设为“否”,如果为“是”,则通知将类似于图 3 和图 4。

注意:我们不能在内容扩展中使用滚动视图或任何类型的滚动,但我们可以使用self.preferredContentSize = CGSize(width: 280, height: minimumSize.height) 来增加视图的内容大小但是默认的消息应用程序使用滚动。如果我错了,请纠正我。

【讨论】:

以上是关于iOS 上的丰富通知的主要内容,如果未能解决你的问题,请参考以下文章

iOS 丰富的推送通知设计

使用 UNUserNotificationCenter 支持 iOS 10 丰富的通知,但通知永远不会出现。它只会发出警报

丰富的推送通知不适用于 IOS 中的 FCM

iOS Swift 使用 Firebase 云消息发送丰富的推送通知

使用 UNNotificationServiceExtension 进行丰富的远程通知

如何为用户提供丰富的通知服务(包括图片图标)?