1
votes

iOS: est-il possible d'envoyer un push au centre de notifications sans son?

Sur Android, je peux envoyer un push silencieux qui est livré dans la barre d'état système. Sur iOS, je ne suis pas sûr que cela soit possible. J'ai supprimé la propriété alert de aps et j'envoie une chaîne vide pour son . Ce que je vois, c'est que le nombre de badges est mis à jour silencieusement (ce qui est bien), mais il n'y a rien dans le centre de notifications. Existe-t-il donc un moyen d'envoyer un push à NC sans un son?

Notez que je ne veux pas que le push apparaisse à l'écran (c'est-à-dire que l'utilisateur ne doit pas le voir à moins qu'il ne glisse vers le bas sur l'écran pour révéler ce qui a été livré. En d'autres termes, j'essaie de faire correspondre le comportement sur Android).


7 commentaires

Cela devrait fonctionner {"aps": {"alert": "Hello", "badge": 1, "category": "your_category_‌ key"}}. Fondamentalement, vous ne devriez pas avoir de clé sonore dans la charge utile.


Si j'enlève complètement la clé de son, il n'y a pas de son. C'est bien, mais le problème est que la notification apparaît toujours à l'écran. Je veux que la notification soit envoyée directement à NC. Comment y parvenir?


Vous pouvez utiliser ce code lors de l'inscription à la notification dans AppDelegate, let notificationCenter = UNUserNotificationCenter.current () notificationCenter.requestAuthorization (options: [. Badge, .sound, .alert, .provisional]) {}


.provisional s'assurera que les notifications sont envoyées silencieusement à l'utilisateur et seront placées dans le centre de notification. Cette fonctionnalité est appelée autorisation provisoire et est introduite dans iOS 12.


@lloydTheCoder Pouvez-vous confirmer qu'il n'est pas possible de rendre certaines notifications provisoires tout en rendant d'autres non provisoires? Sur Android, je pourrais utiliser différents canaux. Je suis surpris qu'iOS ne propose pas cette fonctionnalité.


Reportez-vous à ce lien stackoverflow.com/questions/28167185/…


@ user246392 sélectivement, ce n'est pas possible pour autant que je sache.


5 Réponses :


0
votes

oui, Apple le prend en charge, le format des données push est

{
    "aps":{
        "aa":"123",
        "content-available":1
    }
}

la clé importante est ce
"content-available":1


1 commentaires

J'ai défini content-available sur 1. J'ai également défini mutable-content sur 1. Cela ne fonctionne pas pour moi. Je peux intercepter le push dans didReceiveRemoteNotification mais cela ne s'affiche pas dans NC.




0
votes

Le seul moyen d'atteindre ce que vous voulez faire sera de spécifier «provisoire» lors de la demande d'autorisation de notification sur l'appareil, ce qui est pris en charge sur iOS> = 12. Cela rend les notifications reçues complètement silencieuses et n'apparaissent que sur le centre de notification sans interrompre l'utilisateur. Cependant, l'utilisateur peut personnaliser cela et choisir d'être "interrompu" par les notifications, et cette autorisation empêchera également toutes les autres notifications "d'interrompre" l'utilisateur.

Si vous souhaitez spécifier de manière sélective certaines notifications pour accéder uniquement au centre de notifications, tandis que d'autres émettent des sons et s'affichent sous forme d'alertes de notification à l'utilisateur, la réponse à votre question est non, ce n'est pas possible.


2 commentaires

Merci. Le dernier paragraphe est tout ce que j'avais besoin de savoir.


De rien. Si cela ne vous dérange pas, marquez-la comme la bonne réponse.



0
votes

Je ne suis pas sûr d'avoir bien compris votre question. Mais si vous souhaitez simplement envoyer une notification silencieuse à iOS, réactiver l'application en arrière-plan et la laisser gérer la notification, cela peut être fait, voir les documents .
Essentiellement, vous avez

  • pour activer le mode d'arrière-plan des notifications à distance dans Signing & Onglet Capacités de votre cible, et
  • pour créer une notification à distance avec un dictionnaire aps qui inclut uniquement la clé content-available :

    { "aps": { "contenu disponible": 1 }, "key1": "xxx", "key2": 123 }

Pour recevoir la notification silencieuse, le système réveillera ensuite votre application en arrière-plan. Il appelle ensuite l'application de votre délégué d'application (_: didReceiveRemoteNotification: fetchCompletionHandler :)


0 commentaires

0
votes
Oui

0 commentaires