iOSでのリッチ通知の受信準備の設定を完了し、配信されるメディアにも問題がない場合、以下をお試しください。
1.受信したプッシュ通知に画像が含まれているかを確認
Reproから管理画面で配信したプッシュ通知に画像が含まれるのかを確認します。
【実施方法】
- 画像左上のビルド対象をお客様のアプリに設定し、実機デバッグを行う。アプリを起動した状態で、Xcodeのデバッグコンソールを表示、アプリのログが出力される状態にセット。
- 管理画面から画像つきのリッチプッシュ通知を送信。受け取るとデバッグコンソールにログが出力される。
【結果】
- 成功例のログが出た場合:プッシュ通知も画像も受け取れています。この状態で表示されない場合は下記 「2.リッチプッシュの実装に反応しているのかを調べる」 に進んでください。
- 失敗を表すログが出た場合:画像のみ受け取れていません。Repro管理画面での画像の設定を見直してください。
- 何も表示されない場合:通知自体受け取れていません。プッシュ通知自体の実装を見直してください。
【コード】
// AppDelegate.swift
// アプリをフォアグラウンドで受け取った場合に動くメソッド
// ReproからのPush通知が受け取れていれば画像形式とURLが表示される
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let notion = "Push通知に画像が存在しません"
print("notification start")
UIApplication.shared.registerForRemoteNotifications()
print(notification.request.content.userInfo["rpr_attachment"] ?? notion)
print("notification end")
completionHandler([.alert, .badge, .sound])
}
2.リッチプッシュの実装に反応しているのかを調べる
「Notification Service Extensionの作成」の実装が正常に作動しているか調べます。
【実施方法】
- ビルド元を追加実装した通知機能に設定し、実機ビルドを行う。1.と同様、アプリをフォアグラウンド、デバックコンソールを表示させておく。
- 管理画面から画像つきのプッシュ通知を送信する。
【結果】
- ログが出力される場合:正常に受信できています。
- ログが出力されない場合:リッチ通知の受信処理が動作していないため、当項目の実装を見直してください。
【コード】
// 例 : NotificationService.swift
// Reproで指定の実装方法にデバッグ用ログを仕込む
// リッチプッシュの実装が無事に動けばログが出力される
import UserNotifications
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
// 【追加】 1. リッチプッシュの実装に反応するか調べる
print("リッチプッシュの分岐に入りました")
if let attachment = request.content.userInfo["rpr_attachment"] as? [String: String] {
if let urlString = attachment["url"], let fileURL = URL(string: urlString), let type = attachment["type"] {
URLSession.shared.downloadTask(with: fileURL) { (location, response, error) in
if let location = location {
let fileName = UUID().uuidString + "." + type
let tmpFile = "file://".appending(NSTemporaryDirectory()).appending(fileName)
let tmpUrl = URL(string: tmpFile)!
try? FileManager.default.moveItem(at: location, to: tmpUrl)
if let attachment = try? UNNotificationAttachment(identifier: "IDENTIFIER", url: tmpUrl, options: nil) {
self.bestAttemptContent?.attachments = [attachment]
// 【追加】 2. 端末の画像のダウンロードが成功するかのログ
print("画像がダウンロードされました")
}
}
contentHandler(self.bestAttemptContent!)
}.resume()
}
} else {
contentHandler(self.bestAttemptContent!)
}
}
}