- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了获得丰富的推送通知,我一步步前进。他们在这里:
NotificationService didRecieve :
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
func failEarly() {
contentHandler(request.content)
}
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
// Get the custom data from the notification payload
if let data = request.content.userInfo as? [String: AnyObject] {
// Grab the attachment
// let notificationData = data["data"] as? [String: String]
if let urlString = data["attachment-url"], let fileUrl = URL(string: urlString as! String) {
// Download the attachment
URLSession.shared.downloadTask(with: fileUrl) { (location, response, error) in
if let location = location {
// Move temporary file to remove .tmp extension
let tmpDirectory = NSTemporaryDirectory()
let tmpFile = "file://".appending(tmpDirectory).appending(fileUrl.lastPathComponent)
let tmpUrl = URL(string: tmpFile)!
try! FileManager.default.moveItem(at: location, to: tmpUrl)
// Add the attachment to the notification content
if let attachment = try? UNNotificationAttachment(identifier: "video", url: tmpUrl, options:nil) {
self.bestAttemptContent?.attachments = [attachment]
}else if let attachment = try? UNNotificationAttachment(identifier: "image", url: tmpUrl, options:nil) {
self.bestAttemptContent?.attachments = [attachment]
}else if let attachment = try? UNNotificationAttachment(identifier: "audio", url: tmpUrl, options:nil) {
self.bestAttemptContent?.attachments = [attachment]
}else if let attachment = try? UNNotificationAttachment(identifier: "image.gif", url: tmpUrl, options: nil) {
self.bestAttemptContent?.attachments = [attachment]
}
}
// Serve the notification content
self.contentHandler!(self.bestAttemptContent!)
}.resume()
}
}
}
丰富的通知正确到达:
但这是我面临的问题:
有效载荷:
aps = {
alert = "This is what your message will look like! Type in your message in the text area and get a preview right here";
badge = 1;
"mutable-content" = 1;
sound = default;
};
"attachment-url" = "https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4";
deeplinkurl = "";
"message_id" = 1609;
}
我确实尝试浏览了以下帖子,但没有帮助:
iOS10 UNNotificationServiceExtension not called
NotificationServiceExtension not called
UNNotificationServiceExtension not working on iPhone 5 (iOS 10)
最佳答案
好消息!您的服务扩展确实被调用了——您通知中的图像就是证据。此处可能发生的情况是您无法使用您习惯于处理应用程序的工作流程来调试扩展。
调试通知扩展不像调试应用程序。扩展是应用程序外部 iOS 进程的插件。仅仅设置断点并不是调试它们的可靠方法。相反:
调试通知服务扩展
当通知被传递时,服务扩展应该在调试器中启动。服务扩展仅与远程(推送)通知相关,因此您需要一个设备来解决它们。
调试通知内容扩展至少有两种方法。上面显示的服务扩展步骤也适用于内容扩展。第二种方法更熟悉但不太可靠。
值得注意的是,使用日志记录框架添加日志记录对于调试和故障排除也非常有用。
iOS 限制了可以在通知中显示的内容的大小。 UNNotificationAttachment 的文档中对此进行了描述.对于视频,它通常是 50Mb。确保您的视频尽可能小(以字节为单位),当然还要提供适合其播放设备大小的视频。不要尝试在 400 点宽的通知中播放 1080p 视频!
在实践中,使用 HLS 而不是下载视频并在内容扩展中呈现它几乎总是更好。
您的代码中可能有问题的另一件事是您分配给附件的标识符。标识符应该唯一。通常这将是一个反向域表示法字符串,例如您的包 ID 后跟一个 UUID 字符串。您还可以使用内容的原始 URL,后跟 UUID 字符串。如果您提供一个空字符串,iOS 将为您创建一个唯一标识符。具有非唯一标识符(用于通知、附件等)的用户通知框架往往会导致难以追踪框架内的问题。例如,这可能会导致连接的 watchOS 设备崩溃。
如果您想为您的视频实现“自动播放”——从您的问题中不清楚您所描述的是什么——您将需要在内容扩展中实现您自己的播放器功能。
如果您打算这样做,HLS 是在通知中显示视频的首选方式。它通常使用更少的 RAM,提供更好的用户体验并且往往更稳定。
关于ios - UNNotificationServiceExtension didReceive 未调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51722109/
我正在尝试使用新的 UserNotifications 框架进行本地通知。单击/打开通知时,我将用户重定向到不同的 View Controller 。 UNUserNotificationCenter
我的 AppDelegate 中有这个: @available(iOS 10.0, *) func didReceive(_ request: UNNotificationRequest,
这是我的代码的一部分。我想使用 UNUserNotificationCenter 和 UNUserNotificationCenterDelegate 来处理通知事件。 当应用程序处于前台状态时,此代
为了获得丰富的推送通知,我一步步前进。他们在这里: 使用 plist 创建通知服务扩展: NotificationService didRecieve : override func didRecei
以下是我的代码。我正在尝试使用 didReceive 质询方法进行身份验证。 Apple 文档说,如果 session 任务需要身份验证,并且没有可用的有效凭据,则会调用“didReceive cha
当我发送推送通知时,应用程序在前台 willPresent 被调用。 didReceive 永远不会被调用。当应用程序在后台并收到推送通知时,会显示警报,但应用程序不会调用 didReceive 或
我正在尝试从 userNotificationCenter(_:didReceive:withCompletionHandler:) 中检索原始通知内容在 watchOS 中。从 APNS 发送推送通
我已经为 ios10 实现了推送通知。点击通知警报将触发“didReceive”委托(delegate),如果我将通知保存在核心数据中,或者如果我在前台则为静默通知。问题是如果我在后台收到一堆通知并且
我正在使用 func xmppStream(_ sender: XMPPStream, didReceive presence: XMPPPresence) 来管理在线离线状态。这个功能对于一对一用户
我正在处理本地通知,但我遇到的问题是当应用程序终止时没有调用 didReceive Response 方法,所以当我点击通知操作时它只是启动应用程序而没有做任何其他事情。但是,当该应用程序仅在后台运行
我想禁用在特殊情况下向用户发送推送通知。我在 userDefault 中保存了我的第一个推送,在第二个中我检查它是否相同。当我调试它时输入返回而不是继续,但我仍然收到推送通知。从 firebase a
我有一个 LocalNotification 类,其中实现了 UserNotifications。我在我需要展示的初始 ViewController 和 CheckViewController 之间创
将文件从 iPhone 传输到 Apple Watch 后出现错误 Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"
static let didReceiveResponseSelector : Selector = #selector((NSURLConnectionDataDelegate.connection
我的 TableView 单元格中有一个 Admob 横幅。一切似乎都正常,但是当我尝试让 func adViewDidReceiveAd(_bannerView: GADBannerView!) 正
因此,我一直在此处和其他地方阅读有关此主题的其他帖子,但我仍在挣扎。我的应用正在使用 “Fireabase FCM” 执行设备到设备的通知。我能够发送和接收消息。然而,方法“didReceive Re
我已经知道这段代码可以在 iOS 10 之前使用: func application(_ application: UIApplication, didReceive notification: UI
我有一个正常工作的应用程序,它的通知显示效果很好。现在我想处理一些通知事件,比如当用户点击横幅时。 我的 iOS 部署目标是 11.0,与我的部署目标相同。 我在 AppDelegate.swift
我想添加一个进度条以准确了解我的视频上传的百分比,但无法调用 didCompleteWithError、didReceive 响应、didSendBodyData bytesSent:Int64、to
我创建了一个背景URLSession使用以下代码的对象: let identifier = /* some background identifier */ let config = URLSessi
我是一名优秀的程序员,十分优秀!