Rich media modaux iOS
À partir de la version 6.7.5 du SDK Pushwoosh, vous avez la possibilité d’envoyer des rich media modaux.
Nous introduisons de nouveaux rich media modaux, qui peuvent être personnalisés. Les nouveaux rich media modaux ne bloquent pas complètement l’écran et peuvent être positionnés à différents endroits de l’écran (en haut, en bas et au centre).
Pour plus d’informations sur les pages de rich media, veuillez vous référer à notre guide.
Configuration
Anchor link to//for silent push notificationsfunc application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { Pushwoosh.sharedInstance().handlePushReceived(userInfo) completionHandler(.noData)}
- Pour activer l’affichage des rich media modaux, définissez le paramètre
Pushwoosh_RICH_MEDIA_STYLE
dans votre fichier info.plist et attribuez-lui la valeurMODAL_RICH_MEDIA
.
Info.plist :
<key>Pushwoosh_RICH_MEDIA_STYLE</key><string>MODAL_RICH_MEDIA</string>
- Par défaut, les rich media modaux s’afficheront au centre de l’écran avec une animation d’apparition de bas en haut.

- Pour configurer l’affichage des rich media modaux (position à l’écran, animation d’affichage, animation de fermeture), vous devez utiliser la méthode suivante :
// Modal Rich Media ConfigurationPWModalWindowConfiguration.shared().configureModalWindow(with: .PWModalWindowPositionCenter, present: .PWAnimationPresentFromBottom, dismiss: .PWAnimationDismissUp)
Positionnement des rich media modaux
Anchor link toLes rich media modaux peuvent être positionnés à trois endroits : en haut, en bas ou au centre.
/** Énumération définissant les positions possibles pour l'affichage d'une fenêtre modale.
- `PWModalWindowPositionTop` : La fenêtre modale apparaît en haut de l'écran, à l'intérieur de la zone de sécurité (safe area). - `PWModalWindowPositionCenter` : La fenêtre modale apparaît au centre de l'écran, à l'intérieur de la zone de sécurité (safe area). - `PWModalWindowPositionBottom` : La fenêtre modale apparaît en bas de l'écran, à l'intérieur de la zone de sécurité (safe area). - `PWModalWindowPositionBottomSheet` : La fenêtre modale apparaît tout en bas de l'écran, en ignorant la zone de sécurité (safe area). - `PWModalWindowPositionFullScreen` : Plein écran, ignore les insets de la zone de sécurité (safe area). - `PWModalWindowPositionDefault` : La position par défaut est le centre de l'écran, à l'intérieur de la zone de sécurité (safe area). */typedef NS_ENUM(NSInteger, ModalWindowPosition) { PWModalWindowPositionTop, // Apparaît en haut de l'écran (à l'intérieur de la zone de sécurité) PWModalWindowPositionCenter, // Apparaît au centre de l'écran (à l'intérieur de la zone de sécurité) PWModalWindowPositionBottom, // Apparaît en bas de l'écran (à l'intérieur de la zone de sécurité) PWModalWindowPositionBottomSheet, // Apparaît tout en bas de l'écran (ignore la zone de sécurité) PWModalWindowPositionFullScreen, // Plein écran, ignore les insets de la zone de sécurité PWModalWindowPositionDefault // Position par défaut (au centre de l'écran, à l'intérieur de la zone de sécurité)};
L’exemple ci-dessous montre un rich media modal affiché en haut de l’écran.

Les animations d’affichage des rich media modaux incluent :
typedef NS_ENUM(NSInteger, PresentModalWindowAnimation) { PWAnimationPresentFromBottom, PWAnimationPresentFromTop, PWAnimationPresentFromRight, PWAnimationPresentFromLeft, PWAnimationPresentNone};
Les animations de fermeture des rich media modaux incluent :
typedef NS_ENUM(NSInteger, DismissModalWindowAnimation) { PWAnimationDismissDown, PWAnimationDismissUp, PWAnimationDismissLeft, PWAnimationDismissRight, PWAnimationCurveEaseInOut, PWAnimationDismissNone,
/** * L'animation de fermeture par défaut est `PWAnimationCurveEaseInOut` */ PWAnimationDismissDefault};
L’exemple ci-dessous illustre l’affichage d’un rich media modal en bas de l’écran avec une animation d’affichage de gauche à droite et une animation de fermeture vers la droite :

Paramètres supplémentaires pour les rich media modaux
Anchor link toLes paramètres supplémentaires pour l’affichage des rich media modaux incluent des options comme l’ajout d’un retour haptique de type vibration, l’activation des gestes de balayage et la configuration d’une minuterie de fermeture automatique après une durée spécifiée.
// Type de retour haptiquePWModalWindowConfiguration.shared().setPresent(.PWHapticFeedbackLight)
/**enum HapticFeedbackType
typedef NS_ENUM(NSInteger, HapticFeedbackType) { PWHapticFeedbackLight, // Retour par vibration légère PWHapticFeedbackMedium, // Retour par vibration moyenne PWHapticFeedbackHard, // Retour par vibration forte
/** * La vibration est désactivée par défaut. */ PWHapticFeedbackNone};*/
// Directions de balayagelet directions: [NSNumber] = [ NSNumber(value: DismissSwipeDirection.PWSwipeDismissDown.rawValue), NSNumber(value: DismissSwipeDirection.PWSwipeDismissUp.rawValue)]PWModalWindowConfiguration.shared().setDismissSwipeDirections(directions)
/**typedef NS_ENUM(NSInteger, DismissSwipeDirection) { PWSwipeDismissDown, PWSwipeDismissUp, PWSwipeDismissLeft, PWSwipeDismissRight, PWSwipeDismissNone};*/
// Définir le rayon des coins du rich mediaPWModalWindowConfiguration.shared().setCornerType([.PWCornerTypeTopLeft, .PWCornerTypeBottomRight], withRadius: 30.0)
// Fermer le rich media modal après N secondesPWModalWindowConfiguration.shared().closeModalWindow(after: 3)
PWRichMediaPresentingDelegate
Anchor link toPour gérer la file d’attente des rich media modaux, vous devez implémenter les méthodes de délégué de PWRichMediaPresentingDelegate. Lorsque vous utilisez cette fonctionnalité, les rich media modaux sont présentés séquentiellement, et le suivant ne s’affichera pas tant que l’utilisateur n’aura pas fermé l’actuel. Une fois que l’utilisateur ferme le rich media présenté, le suivant, qui faisait partie d’une autre notification push, sera affiché.
Pour implémenter cette fonctionnalité, utilisez le code fourni ci-dessous :
import UIKitimport PushwooshFramework
class ViewController: UIViewController {
override func viewDidLoad() { super.viewDidLoad()
PWRichMediaManager.shared().delegate = ChainedRichMediaPresentingDelegate.init(queue: [], inApp: false) }}
class ChainedRichMediaPresentingDelegate: NSObject, PWRichMediaPresentingDelegate {
var queue: [PWRichMedia] var inAppIsPresenting: Bool
init(queue: [PWRichMedia], inApp: Bool) { self.queue = queue self.inAppIsPresenting = inApp super.init() // peut en fait être omis dans cet exemple car cela se produira automatiquement. }
convenience override init() { self.init(queue: [], inApp: false) }
func richMediaManager(_ richMediaManager: PWRichMediaManager!, shouldPresent richMedia: PWRichMedia!) -> Bool { if !queue.contains(where: { $0 === richMedia }) { queue.append(richMedia) } return !inAppIsPresenting }
func richMediaManager(_ richMediaManager: PWRichMediaManager!, didPresent richMedia: PWRichMedia!) { inAppIsPresenting = true }
func richMediaManager(_ richMediaManager: PWRichMediaManager!, didClose richMedia: PWRichMedia!) { inAppIsPresenting = false
if let idx = queue.firstIndex(where: { $0 === richMedia }) { queue.remove(at: idx) }
if ((queue.count) != 0) { PWModalWindowConfiguration.shared().presentModalWindow(queue.first!) } }
func richMediaManager(_ richMediaManager: PWRichMediaManager!, presentingDidFailFor richMedia: PWRichMedia!, withError error: Error!) { self.richMediaManager(richMediaManager, didClose: richMedia) }}