iOS - Implémenter les notifications à distance
Dans cette page, vous découvrirez comment les notifications sont gérées dans votre application et quelles sont toutes les options à votre disposition pour créer une excellente expérience de messagerie pour vos utilisateurs.
Notificare prend en charge plusieurs types de notifications interactives et exploitables qui seront traitées pour vous sans aucun développement supplémentaire. Si vous souhaitez empêcher ce comportement par défaut, veuillez noter que vous devrez soit gérer toutes les fonctionnalités vous-même (enregistrement des métriques, présentation de l'interface utilisateur ou collecte des réponses), ou si vous ne le faites pas, vous comprenez que certaines fonctionnalités ne fonctionneront pas comme annoncé. .
Activation des notifications
Pour permettre à l'appareil de recevoir des notifications, il vous suffit d'invoquer une seule méthode.
Notificare.shared.push().enableRemoteNotifications { result in
}
En règle générale, l'étape ci-dessus est effectuée lors d'une certaine forme d'intégration des utilisateurs. Lorsque l'utilisateur a déjà suivi ce flux, nous activons automatiquement les notifications au lancement de Notificare.
Vous pouvez également vérifier si l'utilisateur s'est inscrit aux notifications à distance.
Notificare.shared.push().hasRemoteNotificationsEnabled
De plus, vous pouvez vérifier si l'utilisateur a désactivé les notifications dans les paramètres système.
Notificare.shared.push().allowedUI
Désactiver les notifications à distance
La désactivation des notifications à distance peut être réalisée de la même manière que leur activation.
Notificare.shared.push().disableRemoteNotifications { result in
}
Lorsque cette méthode est appelée, nous enregistrerons automatiquement votre appareil pour ne jamais recevoir de notifications à distance, même si vous conserverez toujours le même profil utilisateur, les mêmes messages de boîte de réception et profiterez de tous les autres services pris en charge par votre forfait. Vous pouvez à tout moment demander une réinscription aux notifications push si vous le souhaitez.
Recevoir des notifications
Avant de pouvoir commencer à recevoir des notifications push, vous devrez définir les fonctionnalités de votre projet. Accédez à la cible de votre application (dans le Portail des développeurs Apple), cliquez sur l'onglet Capacités et ajoutez à la fois les notifications push et les modes d'arrière-plan/notifications à distance comme indiqué ci-dessous.
Options d'autorisation
Notre SDK vous permet de définir les options d'autorisation de notification que vous souhaitez demander à votre utilisateur. Il s'agit d'une étape facultative, si elle n'est pas définie, nous enregistrerons UNAuthorizationOptions.alert
, UNAuthorizationOptions.badge
et UNAuthorizationOptions.sound
par défaut. Pour définir les options d'autorisation, veuillez ajouter ce qui suit à votre AppDelegate
et personnaliser si nécessaire :
if #available(iOS 13.0, *) {
Notificare.shared.push().authorizationOptions = [.alert, .badge, .sound, .providesAppNotificationSettings, .provisional, .announcement]
} else if #available(iOS 12.0, *) {
Notificare.shared.push().authorizationOptions = [.alert, .badge, .sound, .providesAppNotificationSettings, .provisional]
} else {
Notificare.shared.push().authorizationOptions = [.alert, .badge, .sound]
}
Veuillez noter que les options d'autorisation suivantes sont disponibles : UNAuthorizationOptions.announcement
introduite pour la première fois dans iOS 13. Les options UNAuthorizationOptions.providesAppNotificationSettings
et UNAuthorizationOptions.provisional
sont disponibles depuis iOS 12. L'option UNAuthorizationOptions .announcement
permettra à Siri de lire automatiquement les messages sur les AirPods, le L'option UNAuthorizationOptions.provisional
enregistrera les notifications avec une autorisation provisoire, cela signifie que les utilisateurs ne seront pas invités à accepter les notifications dans la boîte de dialogue d'autorisation. Bien que cela puisse être un excellent moyen d'autoriser les utilisateurs à recevoir des notifications à distance, tout message que vous enverrez par la suite sera transmis silencieusement. Les messages transmis silencieusement ne seront pas affichés sur l’écran de verrouillage ni émis de son.
Notez également que si vous implémentez l'option UNAuthorizationOptions.providesAppNotificationSettings
, les notifications de votre application afficheront un bouton à la fois dans le menu de réglage instantané et dans les paramètres de notification. Le but de ce bouton est de fournir aux utilisateurs un raccourci vers les paramètres de votre application où ils peuvent affiner le type de notifications qu'ils souhaitent recevoir. La mise en œuvre de telles vues de paramètres est fortement recommandée, car cela pourrait être la raison pour laquelle vous autorisez votre application à conserver les notifications d'affichage ou à être complètement muette. Si vous implémentez cette option, il est obligatoire d'implémenter la méthode NotificarePushDelegate
suivante :
func notificare(_ notificare: NotificarePush, shouldOpenSettings notification: NotificareNotification?) {
// Deep link to your settings view.
}
Cela vous donnera la possibilité de présenter à vos utilisateurs la vue des paramètres de l'application où vous devrez leur permettre de personnaliser le type de notifications qu'ils doivent recevoir. Si l'utilisateur a cliqué sur le bouton d'une notification spécifique, vous recevrez également cet objet. Lorsqu'il provient des paramètres de notification, cet objet sera nul.
Options de présentation
Vous pouvez éventuellement activer les options de présentation lorsque votre application est au premier plan. Cela vous permettra d'afficher une petite bannière en haut de votre application, d'émettre un son ou de badger votre application, chaque fois qu'une notification arrive et que votre application est utilisée. Par défaut, notre bibliothèque définira cela sur UNNotificationPresentationOptions = [], mais vous pouvez modifier ce comportement en fonction de vos besoins :
if #available(iOS 14.0, *) {
Notificare.shared.push().presentationOptions = [.banner, .sound, .badge]
} else {
Notificare.shared.push().presentationOptions = [.alert, .sound, .badge]
}
Écouter les notifications reçues
Une fois que vous recevez des notifications dans votre application, nous pouvons approfondir et comprendre pleinement comment elles sont traitées. Si vous souhaitez être averti des notifications entrantes dans votre instance NotificarePushDelegate
, par exemple pour ajouter un badge dans votre application, vous pouvez implémenter la méthode suivante.
extension AppDelegate: NotificarePushDelegate {
func notificare(_ notificare: NotificarePush, didReceiveNotification notification: NotificareNotification, deliveryMechanism: NotificareNotificationDeliveryMechanism) {
}
}
Présenter les notifications
Une notification peut être ouverte en appuyant soit sur la notification elle-même, soit en appuyant sur une action dans la notification. Nous émettrons un événement dans chaque cas au NotificarePushDelegate
.
extension AppDelegate: NotificarePushDelegate {
func notificare(_ notificare: NotificarePush, didOpenNotification notification: NotificareNotification) {
}
func notificare(_ notificare: NotificarePush, didOpenAction action: NotificareNotification.Action, for notification: NotificareNotification) {
}
}
Pour gérer les événements ci-dessus, vous pouvez adopter l'approche gérée et utiliser notre module NotificarePushUI
qui prend en charge tous les événements et types d'interface utilisateur ainsi que les actions, ou vous pouvez les prendre entièrement en charge et les présenter comme vous le souhaitez. Cependant, soyez conscient si vous adoptez une approche non gérée, car vous devrez gérer tous les aspects et types de présentation des notifications, y compris les événements nécessaires pour montrer l'engagement de l'utilisateur dans notre tableau de bord.
La première chose dont vous avez besoin, pour gérer tous les types de notifications, est de vous assurer que votre application déclare les autorisations suivantes dans le fichier « Info.plist » de votre application :Info.plist
de votre application :
Cela garantira que votre application peut demander l'accès à l'appareil photo ou à la photothèque de l'appareil chaque fois que cela est nécessaire.
Le code ci-dessous illustre comment cela fonctionne lors de l'utilisation de l'approche gérée.
extension AppDelegate: NotificarePushDelegate {
func notificare(_ notificare: NotificarePush, didOpenNotification notification: NotificareNotification) {
let controller: UIViewController = /* find your desired controller to present the UI in */
Notificare.shared.pushUI().presentNotification(notification, in: controller)
}
func notificare(_ notificare: NotificarePush, didOpenAction action: NotificareNotification.Action, for notification: NotificareNotification) {
let controller: UIViewController = /* find your desired controller to present the UI in */
Notificare.shared.pushUI().presentAction(action, for: notification, in: controller)
}
}
De plus, lorsque vous utilisez l’approche gérée, vous pouvez écouter les événements du cycle de vie des notifications et effectuer toutes les étapes supplémentaires dont vous pourriez avoir besoin. Laissez votre AppDelegate
implémenter NotificarePushUIDelegate
et ajoutez les méthodes suivantes si nécessaire.
extension AppDelegate: NotificarePushUIDelegate {
// MARK: - Notifications
func notificare(_ notificare: NotificarePushUI, willPresentNotification notification: NotificareNotification) {
}
func notificare(_ notificare: NotificarePushUI, didPresentNotification notification: NotificareNotification) {
}
func notificare(_ notificare: NotificarePushUI, didFinishPresentingNotification notification: NotificareNotification) {
}
func notificare(_ notificare: NotificarePushUI, didFailToPresentNotification notification: NotificareNotification) {
}
func notificare(_ notificare: NotificarePushUI, didClickURL url: URL, in notification: NotificareNotification) {
}
// MARK: - Actions
func notificare(_ notificare: NotificarePushUI, willExecuteAction action: NotificareNotification.Action, for notification: NotificareNotification) {
}
func notificare(_ notificare: NotificarePushUI, didExecuteAction action: NotificareNotification.Action, for notification: NotificareNotification) {
}
func notificare(_ notificare: NotificarePushUI, didNotExecuteAction action: NotificareNotification.Action, for notification: NotificareNotification) {
}
func notificare(_ notificare: NotificarePushUI, didFailToExecuteAction action: NotificareNotification.Action, for notification: NotificareNotification, error: Error?) {
}
func notificare(_ notificare: NotificarePushUI, shouldPerformSelectorWithURL url: URL, in action: NotificareNotification.Action, for notification: NotificareNotification) {
}
}
Si vous envisagez de prendre en charge les pages non HTTPS lorsque vous utilisez le type de notification Page Web, vous devrez également déclarer une politique ATS plus permissive comme suit :
Liens Profonds (Deep Links)
Dans les applications modernes, les liens profonds sont un excellent moyen de créer des interactions entre les notifications et le contenu de votre application, permettant ainsi d'envoyer des messages qui incitent l'utilisateur à ouvrir du contenu plus profond dans votre application.
Préparer votre application pour gérer les liens profonds n'est pas compliqué et vous permettra de gérer non seulement les types de notifications liées aux liens profonds, mais aussi tout lien provenant d'une page web. Pour indiquer à votre application que vous allez gérer un schéma d'URL personnalisé, il vous suffit de déclarer ce qui suit dans votre Info.plist
et de vous assurer de mettre à jour les propriétés pour correspondre aux vôtres :
Vous voudrez probablement afficher quelque chose à l'utilisateur en fonction de cette URL. Cela se fait également facilement en implémentant ce qui suit dans le AppDelegate
:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
guard let url = userActivity.webpageURL else {
return false
}
return Notificare.shared.handleDynamicLinkUrl(url)
}
En plus des liens dynamiques, vous pouvez ajouter la prise en charge des liens différés. Ce type de lien dynamique survit au processus d'installation depuis l'App Store et peut être traité la première fois que l'application est ouverte. Étant donné qu'il s'agit d'une fonctionnalité optionnelle, vous devez apporter des modifications à votre application comme décrit ci-dessous. Une fois que le lien différé est évalué, Notificare ouvrira le lien profond résolu.
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// more code ...
if Notificare.shared.canEvaluateDeferredLink {
Notificare.shared.evaluateDeferredLink { result in
switch result {
case let .success(evaluated):
// The deferred link was successfully handled.
case let .failure(error):
// Something went wrong.
}
}
}
return true
}
}
Un autre exemple courant où vous utiliserez des liens profonds serait de prendre les mesures appropriées chaque fois que les utilisateurs cliquent sur des liens hypertextes dans une notification de type HTML ou Page Web de Notificare. Cela se fait d'abord en déclarant tous les schémas d'URL que vous souhaitez gérer dans votre NotificareOptions.plist
:
<plist version="1.0">
<dict>
<key>URL_SCHEMES</key>
<array>
<string>com.example</string>
<string>com.example2</string>
<string>com.example3</string>
</array>
</dict>
</plist>
Toute interaction avec un lien dans une notification de type HTML ou Page Web sera interceptée par notre bibliothèque et déclenchera la méthode didClickURL
de NotificarePushUIDelegate
.
Extension de service de notification
Avec iOS 10, Apple a introduit une nouvelle extension qui permet à vos applications de traiter les notifications avant qu'elles ne soient affichées aux utilisateurs. Cela peut être utilisé pour fournir aux utilisateurs du contenu riche sur l'écran de verrouillage ou simplement modifier le contenu de vos messages côté client.
Pour utiliser cette nouvelle fonctionnalité, vous devez ajouter une nouvelle cible à votre application :
Cela vous amènera à la fenêtre des extensions où vous devez choisir Notification Service Extension :
Pour terminer l'ajout de la nouvelle cible, vous devez fournir un nom de produit et cliquer sur terminer :
Cela ajoutera un nouveau dossier à votre projet avec les fichiers d'extension.
Avec le gestionnaire de packages de votre choix, ajoutez la dépendance NotificareNotificationServiceExtensionKit
à votre application et procédez à son implémentation.
Veuillez noter que cette extension est une cible différente et possède son propre fichier Info.plist
. Cela signifie qu'après iOS 9, Apple ne chargera pas par défaut le contenu non sécurisé. Pour permettre aux applications de charger du contenu servi via HTTP, vous devrez ajouter une nouvelle entrée dans le Info.plist
de l'extension.
Si vous utilisez notre API pour envoyer des images médias sur l'écran de verrouillage qui sont hébergées dans un autre emplacement et servies via un protocole non sécurisé (http://
), vous devez déclarer ce qui suit dans le Info.plist
de votre extension :
Dans votre fichier d'implémentation nouvellement créé, dans la méthode didReceive
, vous devez ajouter ce qui suit pour afficher ce que vous envoyez en tant que média pour l'écran de verrouillage de vos messages :
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
NotificareNotificationServiceExtension.handleNotificationRequest(request) { result in
switch result {
case let .success(content):
contentHandler(content)
case let .failure(error):
print("Failed to handle the notification request.\n\(error)")
contentHandler(request.content)
}
}
}
Une fois que l'implémentation de votre application est terminée, vous pouvez envoyer des images en téléchargeant une image dans le compositeur de messages.
Un point à prendre en compte est qu'iOS limitera le temps pendant lequel il autorise votre application à télécharger une image pour l'écran de verrouillage. Si la vitesse de réseau de l'utilisateur est lente, les grandes images n'auront probablement pas assez de temps pour se télécharger pendant la période d'exécution autorisée et seront rejetées, ce qui entraînera la présentation d'un message sans le média de l'écran de verrouillage. Pour optimiser cela, assurez-vous de ne pas télécharger des images de plus de 300 Ko afin de tenir compte des conditions réseau que les utilisateurs peuvent avoir.
Notifications provenant de sources inconnues
Dans certaines applications, vous pouvez également utiliser d'autres fournisseurs pour envoyer des notifications à distance. Lorsque cela se produit, Notificare reconnaît une notification inconnue et déclenche une méthode de délégué que vous pouvez utiliser pour gérer davantage cette notification. Pour être informé lorsque cela se produit, implémentez les méthodes suivantes de NotificarePushDelegate
dans votre AppDelegate
.
extension AppDelegate: NotificarePushDelegate {
// MARK: - Unknown Notifications
func notificare(_ notificare: NotificarePush, didReceiveUnknownNotification userInfo: [AnyHashable: Any]) {
}
func notificare(_ notificare: NotificarePush, didOpenUnknownNotification notification: [AnyHashable: Any]) {
}
// MARK: - Unknown Actions
func notificare(_ notificare: NotificarePush, didOpenUnknownAction action: String, for notification: [AnyHashable: Any], responseText: String?) {
}
}