はじめに
リッチプッシュの実装がうまく動かない!できない!そんなときに確認すると良いところを紹介します。僕はかなり長い時間悩まされました。
おそらく同じ悩みを抱える人がいると思うので記事にしておきます!
証明書関係の設定や、具体的なプッシュ通知の実装方法は記載していないので別の記事を参考にしていただければと思います。
確認ポイント
①iOSのバージョン
Extensionファイルの対応iOSバージョン(以下の画像の矢印の部分)が、アプリの対応iOSバージョンと同じでないとリッチプッシュは届きません!(僕はここでめちゃくちゃハマりました。)
②ペイロード内に"mutable-content"
他の記事でもこれに関してはほぼ書かれているので大丈夫かと思いますが、リッチプッシュはペイロードの"aps"内に特定の値を追加しなくてはいけません。
- 追加する値
"mutable-content": 1
- ペイロードサンプル
aps内にmutable-content: 1
が含まれていればdata
の部分には好きな値を入れてOKです
{
"aps": {
"alert": "リッチプッシュ",
"mutable-content": 1
},
"data": {
"imageURL": "画像のURL"
}
}
リッチプッシュが届いているかの確認方法
リッチプッシュ用のファイルで以下のようにtitleやbodyに任意の文言を入れて、テストをすると、リッチプッシュが正しく実装されているかを確かめることができます!
final class NotificationService: UNNotificationServiceExtension {
private var contentHandler: ((UNNotificationContent) -> Void)?
private var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
guard let bestAttemptContent = bestAttemptContent else {
return
}
bestAttemptContent.title = "test: リッチプッシュ"
bestAttemptContent.body = "test: リッチプッシュ"
contentHandler(bestAttemptContent)
}
override func serviceExtensionTimeWillExpire() {
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}
まとめ
おそらく②はいろいろな記事に書かれているので追加しているかと思いますが、①のiOSバージョンを揃えておかなければいけないという部分で嵌まっている人は多いんではないでしょうか?
参考になっていれば嬉しいです!
ではでは!