質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3401閲覧

NotificationServiceExtensionを利用したプッシュ通知で、プッシュ通知に動画が表示されない

carpbream

総合スコア32

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2017/11/30 07:23

編集2017/11/30 07:42

Notification Service Extensionを利用して動画つきプッシュを受信しようとしていますが、動画のついていないプッシュが受信されてしまっています。

静止画像(.jpg)やGIF画像(.gif)は想定通り画像付きプッシュの受信が行えるのですが、Payloadの内容のメディアのURLに動画(.mpg,.mpeg,.m2v,.avi)を指定すると動画が添付されず文字列のみのプッシュが受信されます。

このとき、メディアのURL以外は何も変更をしていません。
動画のサイズについては全て6MB以下、3秒ほどの動画でテストを行っています。
メディアは静止画・GIF画像・動画全てS3の同じバケットに存在するものをhttps通信で取得できるようにしています。

<環境・条件>
macOS Sierra(ver10.12.6)
Xcode9.1
DeploymentTarget: iOS10.3 ※テストアプリとExtensionは常に同じDeploymentTargetを指定
テスト端末:iPhone6(iOS11.0.3)、iPhone8(iOS11.1.2) ※両方同じ挙動

Payloadの内容

json

1{ 2 "aps":{ 3 "alert": { 4 "title": "This is title.", 5 "subtitle": "This is subtitle.", 6 "body": "This is body." 7 }, 8 "sound": "default", 9 "mutable-content": 1 10 }, 11 "media": "(メディアのURL)" 12}

Extensionの内容

swift

1class NotificationService: UNNotificationServiceExtension { 2 let imageKey = "media" 3 4 var contentHandler: ((UNNotificationContent) -> Void)? 5 var bestAttemptContent: UNMutableNotificationContent? 6 7 override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { 8 self.contentHandler = contentHandler 9 bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) 10 11 if let imageUrlString = request.content.userInfo[imageKey] as? String { 12 13 let imageUrl = URL(string: imageUrlString)! 14 let session = URLSession(configuration: URLSessionConfiguration.default) 15 let task = session.dataTask(with: imageUrl, completionHandler: {[weak self](data, response, error) in 16 do { 17 if let writePath = NSURL(fileURLWithPath:NSTemporaryDirectory()) 18 .appendingPathComponent(imageUrl.lastPathComponent) { 19 try data?.write(to: writePath) 20 21 let identifier = "push_identifier" 22 if let bestAttemptContent = self?.bestAttemptContent { 23 let attachment = try UNNotificationAttachment(identifier: identifier, url: writePath, options: nil) 24 bestAttemptContent.attachments = [attachment] 25 contentHandler(bestAttemptContent) 26 } 27 } else { 28 if let bestAttemptContent = self?.bestAttemptContent { 29 contentHandler(bestAttemptContent) 30 } 31 } 32 } catch let error as NSError { 33 print(error.localizedDescription) 34 35 if let bestAttemptContent = self?.bestAttemptContent { 36 contentHandler(bestAttemptContent) 37 } 38 } 39 }) 40 task.resume() 41 } else { 42 if let bestAttemptContent = self.bestAttemptContent { 43 contentHandler(bestAttemptContent) 44 } 45 } 46 } 47 48 override func serviceExtensionTimeWillExpire() { 49 // Called just before the extension will be terminated by the system. 50 // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used. 51 if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { 52 contentHandler(bestAttemptContent) 53 } 54 } 55}

以上よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

動画のサイズを3MB未満にしたところ、受信できました。また、画像などのファイルサイズを3MB以上にしたところ表示できなくなったので、単純にメディアのサイズの問題だったようです。
ただ、https://developer.apple.com/documentation/usernotifications/unnotificationattachment#1682051 によると
・音声:5MBまで
・画像:10MBまで
・動画:50MBまで
とあるので、なぜ3MBまでのファイルしか扱えていないのかは別途調べてみます。

投稿2017/12/14 01:16

carpbream

総合スコア32

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問