Les Notifications en SwiftUI

Comprendre les Notifications

Dans SwiftUI, les notifications sont cruciales pour tenir les utilisateurs informés et engagés grâce à deux types principaux : les notifications locales et les notifications distantes (push). Les premières se créent au sein de l'application sans nécessiter de serveur, tandis que les secondes s'appuient sur le service de Notifications Push d'Apple (APNS) pour leur livraison.

Notifications Locales

Définition : Les notifications locales sont générées et planifiées directement dans l'application. Idéales pour des rappels ou des événements de calendrier, elles s'activent suite à des actions de l'utilisateur ou selon un calendrier prédéfini.

Planification : Le développeur détermine le contenu et le moment où ces notifications apparaissent. Elles peuvent être programmées pour surgir à un moment spécifique ou en fonction d'événements déclencheurs dans l'application.

Autorisations Utilisateur : Bien qu'elles soient moins intrusives que les notifications distantes, les notifications locales nécessitent toujours une autorisation utilisateur. L'application doit en faire la demande pour pouvoir envoyer des notifications.

Personnalisation : Ces notifications peuvent être personnalisées, par exemple, avec des sons, des alertes ou des badges, et il est possible de les configurer pour réaliser certaines actions lorsque l'utilisateur interagit avec elles.

Implémentation sous SwiftUI : Pour mettre en place des notifications locales dans SwiftUI, il faut utiliser UNUserNotificationCenter afin de gérer le contenu des notifications, demander les autorisations nécessaires et programmer la livraison des notifications.

Exemple de Code pour Notification Locale en SwiftUI

Voici un exemple de code qui crée une notification basique avec un déclencheur temporel :

import UserNotifications

func scheduleTimeBasedNotification() {
    // 1. Demander la permission d'afficher des alertes et de jouer des sons.
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { granted, error in
        if granted {
            print("Permission accordée")
        } else if let error = error {
            print(error.localizedDescription)
        }
    }

    // 2. Créer le contenu de la notification
    let content = UNMutableNotificationContent()
    content.title = "Rappel"
    content.body = "N'oubliez pas de vérifier l'application!"
    content.sound = UNNotificationSound.default

    // 3. Créer un déclencheur pour la notification
    // Par exemple, dans 10 secondes
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 10, repeats: false)

    // 4. Créer la requête de notification
    let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)

    // 5. Ajouter la requête au centre de notifications
    UNUserNotificationCenter.current().add(request) { error in
        if let error = error {
            print(error.localizedDescription)
        } else {
            print("Notification programmée")
        }
    }
}

Notifications Distantes (Push)

Définition : Les notifications distantes, ou notifications push, sont envoyées depuis un serveur directement vers l'appareil de l'utilisateur. Elles sont particulièrement efficaces car elles peuvent atteindre l'utilisateur même lorsqu'il n'utilise pas l'application. Elles permettent également un haut degré de personnalisation pour chaque utilisateur.

Interaction avec le Serveur et APNS :

Les notifications distantes nécessitent un serveur backend pour envoyer le contenu de la notification au service APNS d'Apple, qui se charge de la distribution vers l'appareil concerné.

Autorisations et Paramètres Utilisateur : Tout comme pour les notifications locales, l'utilisateur doit donner son accord. L'application doit explicitement demander l'autorisation d'envoyer des notifications push, et les utilisateurs peuvent personnaliser leurs paramètres.

Contenu et Interaction :

Les notifications distantes peuvent inclure des éléments multimédias comme des images et des sons, offrant également des options pour interagir, par exemple, répondre directement à un message.

Implémentation dans SwiftUI :

Pour mettre en œuvre des notifications push dans une application SwiftUI, il est nécessaire de configurer l'application pour recevoir ces notifications, de gérer le processus d'enregistrement auprès de l'APNS, puis de traiter les données des notifications entrantes.

Voici un exemple de code pour gérer les notifications push dans SwiftUI :

Exemple de Code pour Notifications Push en SwiftUI

Après avoir ajouté une classe AppDelegate pour s'occuper de l'enregistrement de la notification, vous pouvez intégrer cette classe dans le cycle de vie de votre application SwiftUI.

import Foundation
import UIKit
import UserNotifications

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
            if granted {
                DispatchQueue.main.async {
                    UIApplication.shared.registerForRemoteNotifications()
                }
            }
        }
        return true
    }

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        // Convertir le token en chaîne et l’envoyer à votre serveur
        let tokenString = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
        print("Token de notification push de l'appareil : \(tokenString)")
        // Ici, vous enverriez typiquement le token à votre serveur
    }

    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
        print("Échec de l'enregistrement pour les notifications push : \(error)")
    }
}

Intégration de AppDelegate avec SwiftUI :

Utilisez @UIApplicationDelegateAdaptor pour lier votre AppDelegate à votre application SwiftUI. Voici comment procéder :

import SwiftUI

@main
struct RemotePushApp: App {
    @UIApplicationDelegateAdaptor private var appDelegate: AppDelegate
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

Utilisation des Notifications

Les notifications push offrent une multitude de fonctionnalités ; elles peuvent être utilisées pour gérer des éléments multimédias afin d'améliorer l'interactivité des notifications. De plus, il est également possible d'activer les notifications push en fonction de la localisation de l'utilisateur. Ces notifications représentent un puissant outil pour le marketing et la communication, augmentant l'engagement dans l'application et les revenus.