Я шаг за шагом продвигался к обогащению push-уведомлений. Они здесь :
- Создано расширение службы уведомлений с plist:
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()
}
}
}
- Настроен AppId и профиль подготовки для расширения.
Богатые уведомления приходят правильно:
Но вот проблемы, с которыми я столкнулся:
- didRecieve не вызывается. Для этого я прикрепил процесс serviceExtension к цели приложения и запустил приложение.
Примечание: расширение вызывается, как только приходит уведомление, но didRecieve не вызывается:
- При открытии push-уведомления (к которому прикреплено видео) ничего не происходит. В идеале оно должно воспроизводиться.
- Если мне нужно открыть видео и воспроизвести его, нужно ли мне что-то делать явно, или расширение позаботится об этом?
Полезная нагрузка:
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 не вызывается
NotificationServiceExtension не вызывается
UNNotificationServiceExtension не работает на iPhone 5 (iOS 10)