Lorsque l'application iOS Messages officielle d'Apple est ouverte et au premier plan, les nouveaux messages d'autres contacts déclenchent une bannière d'alerte de notification iOS native. Voir l'image ci-dessous.
Est-ce possible dans les applications tierces de l'App Store? Notifications locales et / ou push pour votre application lorsque votre application est ouverte et au premier plan ?
Lors du test de mon application , des notifications sont reçues mais aucune interface utilisateur d'alerte iOS n'est affichée .
Mais ce comportement est visible dans l'application Messages officiels d'Apple:
Le guide de programmation des notifications locales et distantes dit:
Lorsque le système d'exploitation délivre une notification locale ou à distance et que l'application cible est ne s'exécute pas au premier plan , il peut présenter la notification à l'utilisateur via une alerte , un numéro de badge d'icône ou un son.
Si l'application s'exécute dans le premier plan lorsque la notification est envoyée, le délégué d'application reçoit une notification locale ou distante.
Alors oui, nous pouvons recevoir les données de notification au premier plan. Mais je ne vois aucun moyen de présenter l'interface utilisateur d'alerte de notification iOS native .
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// I know we still receive the notification `userInfo` payload in the foreground.
// This question is about displaying the stock iOS notification alert UI.
// Yes, one *could* use a 3rd party toast alert framework.
[self use3rdPartyToastAlertFrameworkFromGithub]
}
Messages utilise-t-il alors une API privée pour afficher l'alerte au premier plan?
Pour les besoins de cette question, veuillez ne pas suggérer d'alertes pop-up tierces "toast" sur github ou etc. Je ne suis intéressé que si cela peut être fait en utilisant l' interface utilisateur des alertes stock, iOS Local ou Push Notification pendant votre l'application est ouverte et au premier plan .
UNUserNotificationCenter.current().delegate = self
la méthodeapplication(_:willFinishLaunchingWithOptions:)
ouapplication(_:didFinishLaunchingWithOptions:)
Pour afficher le message de la bannière lorsque l'application est au premier plan, utilisez la méthode suivante.
iOS 10+, Swift 3+ :
la source
AppDelegate
. Il doit être mis pour n'importe quel objet conformeUNUserNotificationCenterDelegate
. Cela dit, la plupart des développeurs les mettent enAppDelegate
conformitéUNUserNotificationCenterDelegate
. @YoavR.ÉDITER:
Les alertes au premier plan sont désormais possibles dans iOS 10! Veuillez voir cette réponse .
Pour iOS 9 et inférieur:
Il ne semble pas possible d'afficher l'alerte de notification de stock iOS lorsque votre application est ouverte et au premier plan. Messages.app doit utiliser une API privée.
Les
UIApplicationDelegate
méthodes seront toujours appelées, permettant à votre application de répondre à la notification locale ou distante:Cependant, l'interface utilisateur de la bannière d'alerte de notification iOS native stock ne sera pas affichée telle qu'elle est dans Messages.app d'Apple, qui doit utiliser une API privée.
Le mieux que vous puissiez faire est de lancer votre propre bannière d'alerte ou d'utiliser un framework existant:
J'ai ouvert un radar pour ce comportement ici:
rdar://22313177
la source
toastAlertFromGithub
si vous suggérez d'utiliser cette bibliothèque tierce!Pour afficher les notifications lorsque l'application est ouverte, nous devons la gérer manuellement. Donc, ce que je fais ci-dessous est de gérer la notification une fois reçue.
Ajoutez tout ci-dessous dans AppDelegate.m
Faites-moi savoir si c'est une bonne solution. Cela a bien fonctionné pour moi mais je ne sais pas si c'est la bonne façon.
la source
Voici le code pour recevoir une notification push lorsque l'application est au premier plan ou en phase ouverte, iOS 10 et Swift 2.3
Si vous devez accéder à userInfo de notification, utilisez le code:
notification.request.content.userInfo
La méthode
userNotificationCenter(_:willPresent:withCompletionHandler:)
n'est appelée que si vous ajoutez à la charge utile l'attributcontent-available:1
. La charge utile finale devrait être quelque chose comme:la source
userNotificationCenter(_:willPresent:withCompletionHandler:)
sera appelée lorsque votre application s'exécute au premier plan. Cela n'a donc PAS d'importance avec " content-available ", qui est lié à " background fetch ".Je peux afficher une notification push lorsque l'application est active pour iOS 10.
La notification push du serveur doit être silencieuse .
Lorsque vous recevez une notification à distance du serveur, vous envoyez une notification locale et définissez la valeur de keyPath: shouldAlwaysAlertWhileAppIsForeground = True
la source
content.setValue("YES", forKeyPath: "shouldAlwaysAlertWhileAppIsForeground")
, non? (avec "Oui" et pas vrai)Vous pouvez gérer vous-même la notification et afficher une alerte personnalisée. Des applications telles que Viber, Whatsapp et BisPhone utilisent cette approche.
Un exemple d'alerte personnalisée tierce est CRToast .
Essayez de planifier une notification locale pendant que votre application est au premier plan, et vous verrez qu'aucune alerte de stock iOS n'est affichée:
la source
Version Swift 3
Cela affiche une alerte lorsque l'application est au premier plan.
Mise en œuvre par ApplicationDelegate de
UNUserNotificationCenterDelegate
la source
Pour afficher la notification locale, c'est la meilleure option. besoin de moins de code pour écrire "BRYXBanner" https://cocoapods.org/pods/BRYXBanner
la source
BRYXBanner
cadre ne semble pas utiliser le stock bannière de notification iOS.Si votre cible de déploiement> = iOS10, utilisez UNUserNotification comme ci-dessous-
la source