Rich media modal pour tvOS
À partir de la version 6.11.0 du SDK Pushwoosh, vous avez la possibilité d’envoyer des Rich Media modaux aux appareils tvOS (Apple TV).
Le Rich Media modal pour tvOS offre un affichage de contenu interactif basé sur HTML, optimisé pour la navigation avec la télécommande de l’Apple TV. Le rich media peut être personnalisé avec différentes positions, animations et prend en charge la navigation par focus.
Pour plus d’informations sur les pages Rich Media, veuillez consulter notre guide.
Installation
Anchor link toLe module PushwooshTVOS est optionnel et peut être intégré à votre projet tvOS en utilisant Swift Package Manager ou CocoaPods.
Swift Package Manager
Anchor link toAjoutez le package Pushwoosh à votre projet tvOS :
- Dans Xcode, sélectionnez File → Add Package Dependencies…
- Saisissez l’URL du dépôt :
https://github.com/Pushwoosh/Pushwoosh-XCFramework - Sélectionnez la dernière version
- Ajoutez les frameworks suivants à votre cible tvOS :
- PushwooshFramework
- PushwooshCore
- PushwooshBridge
- PushwooshLiveActivities
- PushwooshTVOS
CocoaPods
Anchor link toAjoutez à votre Podfile :
target 'YourTvOSApp' do platform :tvos, '13.0'
pod 'PushwooshXCFramework' pod 'PushwooshXCFramework/PushwooshTVOS'endPuis exécutez :
pod installIntégration de base
Anchor link to1. Configurez Pushwoosh dans votre AppDelegate
Anchor link toImportez les modules requis et configurez Pushwoosh avec votre code d’application :
import UIKitimport PushwooshTVOSimport PushwooshFramework
@mainclass AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Configurez Pushwoosh avec votre code d'application Pushwoosh.TVoS.setAppCode("XXXXX-XXXXX")
// S'inscrire aux notifications push Pushwoosh.TVoS.registerForTvPushNotifications()
return true }}2. Gérez l’enregistrement du token de l’appareil
Anchor link toImplémentez le gestionnaire de token de l’appareil pour enregistrer l’appareil auprès de Pushwoosh :
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Pushwoosh.TVoS.registerForTvPushNotifications(withToken: deviceToken) { error in if let error = error { print("Échec de l'enregistrement : \(error)") } else { print("Enregistrement réussi pour les notifications push") } }}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { Pushwoosh.TVoS.handleTvPushRegistrationFailure(error)}3. Gérez les notifications push entrantes
Anchor link toTraitez les notifications push entrantes contenant du rich media :
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// Gérez la notification push et affichez le rich media s'il est présent if Pushwoosh.TVoS.handleTVOSPush(userInfo: userInfo) { completionHandler(.newData) } else { completionHandler(.noData) }}Configuration du Rich Media
Anchor link toPositionnement
Anchor link toLe Rich Media modal pour tvOS peut être positionné à cinq endroits sur l’écran :
// Position centrale (par défaut)Pushwoosh.TVoS.configureRichMediaWith(position: .center, presentAnimation: .none, dismissAnimation: .none)
// Côté gauche de l'écranPushwoosh.TVoS.configureRichMediaWith(position: .left, presentAnimation: .fromLeft, dismissAnimation: .toLeft)
// Côté droit de l'écranPushwoosh.TVoS.configureRichMediaWith(position: .right, presentAnimation: .fromRight, dismissAnimation: .toRight)
// Haut de l'écranPushwoosh.TVoS.configureRichMediaWith(position: .top, presentAnimation: .fromTop, dismissAnimation: .toTop)
// Bas de l'écranPushwoosh.TVoS.configureRichMediaWith(position: .bottom, presentAnimation: .fromBottom, dismissAnimation: .toBottom)Options de position disponibles :
enum PWTVOSRichMediaPosition { case center // Contenu positionné au centre de l'écran (par défaut) case left // Contenu positionné sur le côté gauche de l'écran case right // Contenu positionné sur le côté droit de l'écran case top // Contenu positionné en haut de l'écran case bottom // Contenu positionné en bas de l'écran}Animations d’apparition
Anchor link toContrôlez la manière dont le contenu rich media apparaît à l’écran :
enum PWTVOSRichMediaPresentAnimation { case none // Pas d'animation, le contenu apparaît immédiatement (par défaut) case fromTop // Le contenu glisse depuis le haut de l'écran case fromBottom // Le contenu glisse depuis le bas de l'écran case fromLeft // Le contenu glisse depuis le côté gauche de l'écran case fromRight // Le contenu glisse depuis le côté droit de l'écran}Animations de disparition
Anchor link toContrôlez la manière dont le contenu rich media disparaît de l’écran :
enum PWTVOSRichMediaDismissAnimation { case none // Pas d'animation, le contenu disparaît immédiatement (par défaut) case toTop // Le contenu glisse vers le haut de l'écran case toBottom // Le contenu glisse vers le bas de l'écran case toLeft // Le contenu glisse vers le côté gauche de l'écran case toRight // Le contenu glisse vers le côté droit de l'écran}Exemples de configuration
Anchor link toConfigurez le rich media pour qu’il apparaisse sur le côté gauche avec des animations :
Pushwoosh.TVoS.configureRichMediaWith( position: .left, presentAnimation: .fromBottom, dismissAnimation: .toLeft)Configurez le rich media pour qu’il apparaisse en bas avec des animations de glissement :
Pushwoosh.TVoS.configureRichMediaWith( position: .bottom, presentAnimation: .fromBottom, dismissAnimation: .toBottom)Configurez le rich media pour qu’il apparaisse centré sans animations :
Pushwoosh.TVoS.configureRichMediaWith( position: .center, presentAnimation: .none, dismissAnimation: .none)Configuration du bouton Fermer
Anchor link toPar défaut, un bouton Fermer est affiché en bas des présentations rich media. Vous pouvez masquer ce bouton si nécessaire :
// Masquer le bouton Fermer du systèmePushwoosh.TVoS.configureCloseButton(false)Navigation par focus pour l’Apple TV
Anchor link toLe SDK tvOS gère automatiquement la navigation par focus pour la télécommande de l’Apple TV. Les éléments interactifs (boutons, liens) de votre contenu HTML rich media seront focalisables à l’aide de la télécommande de l’Apple TV.
Comportement du focus
Anchor link to- Les éléments focalisables sont automatiquement détectés dans le contenu HTML
- Les utilisateurs peuvent naviguer entre les éléments à l’aide du pavé directionnel de la télécommande de l’Apple TV
- L’élément actuellement focalisé reçoit une mise en évidence visuelle
- Les utilisateurs peuvent activer les éléments focalisés en appuyant sur le bouton central de la télécommande
- Le bouton Fermer du système (lorsqu’il est visible) fait également partie de la navigation par focus
Bonnes pratiques pour le contenu HTML
Anchor link toLors de la création de contenu HTML pour le rich media tvOS :
- Utilisez des éléments HTML interactifs standard :
<button>,<a>,<input /> - Assurez-vous qu’il y a suffisamment d’espace entre les éléments interactifs pour une indication claire du focus
- Testez votre contenu avec le simulateur Apple TV pour vérifier la navigation par focus
- Envisagez d’utiliser des cibles tactiles plus grandes que pour iOS (largeur minimale de 250 pt recommandée)
Exemple d’intégration complet
Anchor link toVoici un exemple complet montrant toutes les fonctionnalités :
import UIKitimport PushwooshTVOSimport PushwooshFramework
@mainclass AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Configurez Pushwoosh Pushwoosh.TVoS.setAppCode("XXXXX-XXXXX")
// Configurez l'apparence du rich media Pushwoosh.TVoS.configureRichMediaWith( position: .center, presentAnimation: .fromBottom, dismissAnimation: .toTop )
// Affichez le bouton Fermer (par défaut) Pushwoosh.TVoS.configureCloseButton(true)
// S'inscrire aux notifications push Pushwoosh.TVoS.registerForTvPushNotifications()
return true }
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Pushwoosh.TVoS.registerForTvPushNotifications(withToken: deviceToken) { error in if let error = error { print("Échec de l'enregistrement : \(error)") } else { print("Enregistrement réussi") } } }
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { Pushwoosh.TVoS.handleTvPushRegistrationFailure(error) }
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
if Pushwoosh.TVoS.handleTVOSPush(userInfo: userInfo) { completionHandler(.newData) } else { completionHandler(.noData) } }}Dépannage
Anchor link toProblèmes de navigation par focus
Anchor link toSi la navigation par focus ne fonctionne pas correctement :
- Vérifiez que votre contenu HTML utilise des éléments interactifs standard (
<button>,<a>) - Testez dans le simulateur Apple TV pour vérifier le comportement du focus
- Assurez-vous que les éléments interactifs ont une taille et un espacement suffisants
- Vérifiez que votre HTML/CSS n’interfère pas avec les états de focus
Exemple sur un appareil réel
Anchor link toVoici à quoi ressemble le rich media sur un appareil Apple TV réel :

La capture d’écran montre le contenu rich media affiché sur Apple TV avec :
- Une mise en page HTML personnalisée avec des arrière-plans en dégradé
- Des boutons interactifs optimisés pour la télécommande de l’Apple TV
- La prise en charge de la navigation par focus pour tous les éléments interactifs