新しい通知サービス拡張機能を実装しようとしましたが、問題があります。
私のNotificationService.Swiftファイルには、次のコードがあります。
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)
if let bestAttemptContent = bestAttemptContent {
// Modify the notification content here...
bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"
print(bestAttemptContent.body)
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original Push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}
プッシュ通知を受け取ったとき、didReceive(_ request:UNNotificationRequest、withContentHandler contentHandler:@escaping(UNNotificationContent)-> Void)メソッドが呼び出されませんでした。
この拡張機能の動作を誤解しているのではないでしょうか?
サービス拡張の展開ターゲットを確認してください。
10.1を搭載したデバイスでテストを行うと、デプロイメントターゲットを10.2に設定しましたが、変更するまで拡張機能は呼び出されませんでした。
別の問題がデバッグである可能性があります。それを機能させるには、サービス拡張プロセスをアタッチする必要があります。 Xcodeメニューのデバッグ>プロセスにアタッチ>拡張機能の名前
むしろ、アプリを実行します。ターゲットとしてサービス拡張を実行する必要があります。次に、サービス拡張を実行したアプリを尋ね、アプリを選択すると通知が送信されます。
展開ターゲットがサービス拡張のデバイスOSよりも小さいであることを確認します。
ペイロードに"mutable-content":1が含まれていることを確認してください。
{"aps" : { "alert" : { "title" : "Introduction To Notification", "subtitle" : "Session 707", "body" : "New Notification Look Amazing" }, "sound" : "default", "category" : "message", "badge" : 1, "mutable-content": 1 }, "attachment-url": "https://api.buienradar.nl/Image/1.0/RadarMapNL" }
追加する必要がある場合は、apsに「Content-available」フラグを追加しないでください。「Content-available」:0、
プッシュ通知ペイロード "mutable-content":1つのキーと値のペアを含める必要があります 。
リモート通知のaps辞書には、値が1に設定された可変コンテンツキーが含まれています。
プッシュ通知ペイロードJSONの例:
{
"aps":{
"alert": {
"body": "My Push Notification",
"title" : "Notification title"},
"mutable-content" : 1,
"badge":0},
}
また、次のことに注意してください。
サイレント通知や、音を鳴らしたり、アプリのアイコンにバッジを付けたりするだけの通知は変更できません。
頭がおかしくなってきた。最後に、deployment target
のNotification Service Extension
が10.3
であることがわかりました(私の電話も)。私は10.2
に変更しましたが、完全に機能します
同じ問題がありますが、通知拡張機能が「アプリ」であることが問題でした。 appexである必要があります
追加する必要があります"mutable-content": 1
をペイロードに