web-dev-qa-db-ja.com

iOS 10は通知サービス拡張機能を呼び出さない

新しい通知サービス拡張機能を実装しようとしましたが、問題があります。

私の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)メソッドが呼び出されませんでした。

この拡張機能の動作を誤解しているのではないでしょうか?

15
just

サービス拡張の展開ターゲットを確認してください。

10.1を搭載したデバイスでテストを行うと、デプロイメントターゲットを10.2に設定しましたが、変更するまで拡張機能は呼び出されませんでした。

別の問題がデバッグである可能性があります。それを機能させるには、サービス拡張プロセスをアタッチする必要があります。 Xcodeメニューのデバッグ>プロセスにアタッチ>拡張機能の名前

26
Kamilton
  1. むしろ、アプリを実行します。ターゲットとしてサービス拡張を実行する必要があります。次に、サービス拡張を実行したアプリを尋ね、アプリを選択すると通知が送信されます。

  2. 展開ターゲットがサービス拡張のデバイスOSよりも小さいであることを確認します。

  3. ペイロードに"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"
    }
    
  4. 追加する必要がある場合は、apsに「Content-available」フラグを追加しないでください。「Content-available」:0、

15
Sudhanshu Gupta

プッシュ通知ペイロード "mutable-content":1つのキーと値のペアを含める必要があります

リモート通知のaps辞書には、値が1に設定された可変コンテンツキーが含まれています。

プッシュ通知ペイロードJSONの例:

{
  "aps":{
          "alert": {
                    "body": "My Push Notification", 
                    "title" : "Notification title"},
          "mutable-content" : 1,
          "badge":0},
}

これは完璧に機能し、次のようにプッシュ通知を受け取ります。 Push Notification

また、次のことに注意してください。

サイレント通知や、音を鳴らしたり、アプリのアイコンにバッジを付けたりするだけの通知は変更できません。

プッシュ通知のテストには、 Pusher または Houston を試すことができます。

4
Raja Vikram

頭がおかしくなってきた。最後に、deployment targetNotification Service Extension10.3であることがわかりました(私の電話も)。私は10.2に変更しましたが、完全に機能します

3
croigsalvador

同じ問題がありますが、通知拡張機能が「アプリ」であることが問題でした。 appexである必要があります

2
V V

追加する必要があります"mutable-content": 1をペイロードに

0
Ryan110