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).
5 Réponses :
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
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.
Si vous ne voulez pas de son, n'envoyez pas le paramètre sound
dans la charge utile.
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { completionHandler([.badge]) //remove .sound, .alert }
vous pouvez également supprimer .alert code > et
.sound
de willPresent ..
méthode de poussée dans le fichier appdelegate.swift
{ "aps" : { "alert" : "You got your emails.", "badge" : 1 }, "acme1" : "test" }
Je n'ai pas encore essayé cela, mais je pensais que alert
afficherait un effet contextuel. Je ne veux pas de ça non plus. Si je le supprime et le son, je ne vois pas la notification dans le centre de notifications. Seul le badge est mis à jour.
alors vous pouvez supprimer .alert
et .sound
de la méthode push de willPresentNotification
.
Il semble que willPresentNotification
ne soit appelé que lorsque l'application est au premier plan. Est-ce vrai? J'ai implémenté un UNUserNotificationCenterDelegate
personnalisé. La méthode n'est appelée que lorsqu'un push est délivré au premier plan.
Lisez la section de discussion ici: developer.apple.com/documentation/ usernotifications /… On dirait que ce n'est que pour le premier plan.
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. fort>
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.
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 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 :)
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/… a>
@ user246392 sélectivement, ce n'est pas possible pour autant que je sache.