web-dev-qa-db-fra.com

iOS 10 n'appelle pas l'extension de service de notification

J'ai essayé d'implémenter la nouvelle extension du service de notification, mais j'ai un problème.

Dans mon fichier NotificationService.Swift, j'ai ce code:

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)
    }
}
}

Lorsque j'ai reçu une notification Push, la méthode didReceive (_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) n'a jamais été appelée.

Peut-être que j'ai mal compris comment cette extension fonctionne?

15
just

Vérifiez votre cible de déploiement sur l'extension de service.

J'ai eu la cible de déploiement définie sur 10.2 lors des tests sur un appareil avec 10.1 et l'extension n'a pas été appelée jusqu'à ce que je la change.

Un autre problème pourrait être le débogage. Pour le faire fonctionner, vous devez attacher le processus d'extension de service. Dans le menu Xcode Debug> Attach To Process> Nom de votre extension

26
Kamilton
  1. Plutôt que d'exécuter l'application. Vous devez exécuter l'extension de service comme cible. Ensuite, il vous demandera quelle application vous avez exécuté l'extension de service, puis sélectionnez votre application et il enverra une notification.

  2. Assurez-vous que la cible de déploiement est inférieure à l'OS du périphérique dans l'extension de service.

  3. Veuillez vous assurer que la charge utile doit contenir "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. N'ajoutez pas l'indicateur "Content-available" dans aps, si nécessaire, faites-le 0. "Content-available": 0,

15
Sudhanshu Gupta

Votre charge utile de notification Push doit contenir le "contenu mutable": 1 paire de valeurs clés .

Le dictionnaire aps de la notification à distance comprend la clé de contenu mutable avec la valeur définie sur 1.

Ex charge utile de notification Push JSON:

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

Cela fonctionne parfaitement et j'obtiens la notification Push comme suit: Push Notification

Notez également que:

Vous ne pouvez pas modifier les notifications silencieuses ou celles qui ne diffusent qu'un son ou un badge l'icône de l'application.

Vous pouvez essayer Pusher ou Houston pour tester les notifications push.

4
Raja Vikram

Je devenais fou. Finalement, j'ai réalisé que j'avais le deployment target de Notification Service Extension était 10.3 (mon téléphone aussi). J'ai changé pour 10.2 et ça marche parfaitement

3
croigsalvador

J'ai le même problème, mais mon problème était l'extension de notification est "app". Cela devrait être appex

2
V V

vous devez ajouter "mutable-content": 1 à votre charge utile

0
Ryan110