Rich media modaux pour 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 Rich Media, veuillez consulter notre guide.
Configuration
Anchor link to//pour les notifications push silencieusesfunc application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { Pushwoosh.configure.handlePushReceived(userInfo) completionHandler(.noData)}Option 1 : Configuration via Info.plist
Anchor link toPour activer l’affichage des Rich Media modaux, définissez le paramètre Pushwoosh_RICH_MEDIA_STYLE dans votre info.plist et attribuez-lui la valeur MODAL_RICH_MEDIA.
Info.plist :
<key>Pushwoosh_RICH_MEDIA_STYLE</key><string>MODAL_RICH_MEDIA</string>Option 2 : Configuration par programmation (SDK 7.0.14+)
Anchor link toVous pouvez également configurer le style de présentation des Rich Media par programmation dans votre AppDelegate :
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Définir le style de présentation modal Pushwoosh.media.setRichMediaPresentationStyle(.modal)
// Configurer l'apparence de la fenêtre modale Pushwoosh.media.modalRichMedia.configure( position: .PWModalWindowPositionBottom, presentAnimation: .PWAnimationPresentFromBottom, dismissAnimation: .PWAnimationDismissDown )
Pushwoosh.configure.registerForPushNotifications() return true}- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Définir le style de présentation modal [[Pushwoosh media] setRichMediaPresentationStyle:PWRichMediaPresentationStyleModal];
// Configurer l'apparence de la fenêtre modale [[[Pushwoosh media] modalRichMedia] configureWithPosition:PWModalWindowPositionBottom presentAnimation:PWAnimationPresentFromBottom dismissAnimation:PWAnimationDismissDown];
[[Pushwoosh configure] registerForPushNotifications]; return YES;}Par défaut, les Rich Media modaux seront affichés au centre de l’écran avec une animation d’apparition de bas en haut.
Positionnement des Rich Media modaux
Anchor link toLes Rich Media modaux peuvent être positionnés à différents endroits de l’écran.
/** Énumération définissant les positions possibles pour afficher une fenêtre modale.
- `PWModalWindowPositionTop` : La fenêtre modale apparaît en haut de l'écran, dans la zone de sécurité. - `PWModalWindowPositionCenter` : La fenêtre modale apparaît au centre de l'écran, dans la zone de sécurité. - `PWModalWindowPositionBottom` : La fenêtre modale apparaît en bas de l'écran, dans la zone de sécurité. - `PWModalWindowPositionBottomSheet` : La fenêtre modale apparaît tout en bas de l'écran, en ignorant la zone de sécurité. - `PWModalWindowPositionDefault` : La position par défaut est le centre de l'écran, dans la zone de sécurité. */typedef NS_ENUM(NSInteger, ModalWindowPosition) { PWModalWindowPositionTop, // Apparaît en haut de l'écran (dans la zone de sécurité) PWModalWindowPositionCenter, // Apparaît au centre de l'écran (dans la zone de sécurité) PWModalWindowPositionBottom, // Apparaît en bas de l'écran (dans 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 marges de la zone de sécurité PWModalWindowPositionDefault // Position par défaut (centre de l'écran, dans 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 montre 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 définition d’un minuteur de fermeture automatique après une durée spécifiée.
// Type de retour haptiquePushwoosh.media.modalRichMedia.setHapticFeedbackType(.PWHapticFeedbackLight)
// Directions de balayage pour fermerPushwoosh.media.modalRichMedia.setDismissSwipeDirections([ NSNumber(value: DismissSwipeDirection.PWSwipeDismissDown.rawValue), NSNumber(value: DismissSwipeDirection.PWSwipeDismissUp.rawValue)])
// Définir le rayon des coins du Rich Medialet topCorners = PWCornerTypeTopLeft.rawValue | PWCornerTypeTopRight.rawValuePushwoosh.media.modalRichMedia.setCornerType(CornerType(rawValue: topCorners), withRadius: 16)
// Fermer le Rich Media modal après N secondesPushwoosh.media.modalRichMedia.closeAfter(3)// Type de retour haptique[[[Pushwoosh media] modalRichMedia] setHapticFeedbackType:PWHapticFeedbackLight];
// Directions de balayage pour fermer[[[Pushwoosh media] modalRichMedia] setDismissSwipeDirections:@[ @(PWSwipeDismissDown), @(PWSwipeDismissUp)]];
// Définir le rayon des coins du Rich MediaCornerType topCorners = PWCornerTypeTopLeft | PWCornerTypeTopRight;[[[Pushwoosh media] modalRichMedia] setCornerType:topCorners withRadius:16.0];
// Fermer le Rich Media modal après N secondes[[[Pushwoosh media] modalRichMedia] closeAfter:3.0];Types de retour haptique :
typedef NS_ENUM(NSInteger, HapticFeedbackType) { PWHapticFeedbackLight, // Retour par vibration légère PWHapticFeedbackMedium, // Retour par vibration moyenne PWHapticFeedbackHard, // Retour par vibration forte PWHapticFeedbackNone // La vibration est désactivée (par défaut)};Directions de balayage :
typedef NS_ENUM(NSInteger, DismissSwipeDirection) { PWSwipeDismissDown, PWSwipeDismissUp, PWSwipeDismissLeft, PWSwipeDismissRight, PWSwipeDismissNone};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.
En utilisant 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é.
import UIKitimport PushwooshFramework
@mainclass AppDelegate: UIResponder, UIApplicationDelegate, PWRichMediaPresentingDelegate {
var richMediaQueue: [PWRichMedia] = [] var isPresenting = false
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Configurer les rich media modaux Pushwoosh.media.setRichMediaPresentationStyle(.modal) Pushwoosh.media.modalRichMedia.configure( position: .PWModalWindowPositionBottom, presentAnimation: .PWAnimationPresentFromBottom, dismissAnimation: .PWAnimationDismissDown )
// Définir le délégué Pushwoosh.media.modalRichMedia.delegate = self
Pushwoosh.configure.registerForPushNotifications() return true }
// MARK: - PWRichMediaPresentingDelegate
func richMediaManager(_ richMediaManager: PWRichMediaManager, shouldPresent richMedia: PWRichMedia) -> Bool { if !richMediaQueue.contains(where: { $0 === richMedia }) { richMediaQueue.append(richMedia) } return !isPresenting }
func richMediaManager(_ richMediaManager: PWRichMediaManager, didPresent richMedia: PWRichMedia) { isPresenting = true }
func richMediaManager(_ richMediaManager: PWRichMediaManager, didClose richMedia: PWRichMedia) { isPresenting = false
if let idx = richMediaQueue.firstIndex(where: { $0 === richMedia }) { richMediaQueue.remove(at: idx) }
// Présenter le prochain rich media dans la file d'attente if let nextRichMedia = richMediaQueue.first { Pushwoosh.media.modalRichMedia.present(nextRichMedia) } }
func richMediaManager(_ richMediaManager: PWRichMediaManager, presentingDidFailFor richMedia: PWRichMedia, withError error: Error) { richMediaManager(richMediaManager, didClose: richMedia) }}#import "AppDelegate.h"#import <PushwooshFramework/PushwooshFramework.h>
@interface AppDelegate () <PWRichMediaPresentingDelegate>
@property (nonatomic, strong) NSMutableArray<PWRichMedia *> *richMediaQueue;@property (nonatomic, assign) BOOL isPresenting;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.richMediaQueue = [NSMutableArray array]; self.isPresenting = NO;
// Configurer les rich media modaux [[Pushwoosh media] setRichMediaPresentationStyle:PWRichMediaPresentationStyleModal]; [[[Pushwoosh media] modalRichMedia] configureWithPosition:PWModalWindowPositionBottom presentAnimation:PWAnimationPresentFromBottom dismissAnimation:PWAnimationDismissDown];
// Définir le délégué [[[Pushwoosh media] modalRichMedia] setDelegate:self];
[[Pushwoosh configure] registerForPushNotifications]; return YES;}
#pragma mark - PWRichMediaPresentingDelegate
- (BOOL)richMediaManager:(PWRichMediaManager *)richMediaManager shouldPresentRichMedia:(PWRichMedia *)richMedia { if (![self.richMediaQueue containsObject:richMedia]) { [self.richMediaQueue addObject:richMedia]; } return !self.isPresenting;}
- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didPresentRichMedia:(PWRichMedia *)richMedia { self.isPresenting = YES;}
- (void)richMediaManager:(PWRichMediaManager *)richMediaManager didCloseRichMedia:(PWRichMedia *)richMedia { self.isPresenting = NO;
[self.richMediaQueue removeObject:richMedia];
// Présenter le prochain rich media dans la file d'attente if (self.richMediaQueue.count > 0) { [[[Pushwoosh media] modalRichMedia] presentRichMedia:self.richMediaQueue.firstObject]; }}
- (void)richMediaManager:(PWRichMediaManager *)richMediaManager presentingDidFailForRichMedia:(PWRichMedia *)richMedia withError:(NSError *)error { [self richMediaManager:richMediaManager didCloseRichMedia:richMedia];}
@end