Passer au contenu

Média riche modal iOS

À partir de la version 6.7.5 du SDK Pushwoosh, vous avez la possibilité d’envoyer des médias riches modaux.

Nous introduisons de nouveaux médias riches modaux, qui peuvent être personnalisés. Les nouveaux médias riches 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 médias riches, veuillez consulter notre guide.

Configuration

Anchor link to
//for silent push notifications
func 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 to

Pour activer l’affichage des médias riches modaux, définissez le paramètre Pushwoosh_RICH_MEDIA_STYLE dans votre fichier 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 to

Vous pouvez également configurer le style de présentation des médias riches par programmation dans votre AppDelegate :

func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Set modal presentation style
Pushwoosh.media.setRichMediaPresentationStyle(.modal)
// Configure modal window appearance
Pushwoosh.media.modalRichMedia.configure(
position: .PWModalWindowPositionBottom,
presentAnimation: .PWAnimationPresentFromBottom,
dismissAnimation: .PWAnimationDismissDown
)
Pushwoosh.configure.registerForPushNotifications()
return true
}

Par défaut, les médias riches modaux seront affichés au centre de l’écran avec une animation d’apparition de bas en haut.

Positionnement des médias riches modaux

Anchor link to

Les médias riches modaux peuvent être positionnés à différents endroits de l’écran.

/**
Enum defining the possible positions for displaying a modal window.
- `PWModalWindowPositionTop`: The modal window appears at the top of the screen, within the safe area.
- `PWModalWindowPositionCenter`: The modal window appears at the center of the screen, within the safe area.
- `PWModalWindowPositionBottom`: The modal window appears at the bottom of the screen, within the safe area.
- `PWModalWindowPositionBottomSheet`: The modal window appears at the very bottom of the screen, ignoring the safe area.
- `PWModalWindowPositionDefault`: The default position is the center of the screen, within the safe area.
*/
typedef NS_ENUM(NSInteger, ModalWindowPosition) {
PWModalWindowPositionTop, // Appears at the top of the screen (within safe area)
PWModalWindowPositionCenter, // Appears at the center of the screen (within safe area)
PWModalWindowPositionBottom, // Appears at the bottom of the screen (within safe area)
PWModalWindowPositionBottomSheet, // Appears at the very bottom of the screen (ignores safe area)
PWModalWindowPositionFullScreen, // Fullscreen, ignores safe area insets
PWModalWindowPositionDefault // Default position (center of the screen, within safe area)
};

L’exemple ci-dessous montre un média riche modal affiché en haut de l’écran.

Les animations d’affichage des médias riches modaux incluent :

typedef NS_ENUM(NSInteger, PresentModalWindowAnimation) {
PWAnimationPresentFromBottom,
PWAnimationPresentFromTop,
PWAnimationPresentFromRight,
PWAnimationPresentFromLeft,
PWAnimationPresentNone
};

Les animations de fermeture des médias riches modaux incluent :

typedef NS_ENUM(NSInteger, DismissModalWindowAnimation) {
PWAnimationDismissDown,
PWAnimationDismissUp,
PWAnimationDismissLeft,
PWAnimationDismissRight,
PWAnimationCurveEaseInOut,
PWAnimationDismissNone,
/**
* Default dismiss animation is `PWAnimationCurveEaseInOut`
*/
PWAnimationDismissDefault
};

L’exemple ci-dessous montre l’affichage d’un média riche 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 médias riches modaux

Anchor link to

Les paramètres supplémentaires pour l’affichage des médias riches 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.

// Haptic Feedback Type
Pushwoosh.media.modalRichMedia.setHapticFeedbackType(.PWHapticFeedbackLight)
// Swipe directions to dismiss
Pushwoosh.media.modalRichMedia.setDismissSwipeDirections([
NSNumber(value: DismissSwipeDirection.PWSwipeDismissDown.rawValue),
NSNumber(value: DismissSwipeDirection.PWSwipeDismissUp.rawValue)
])
// Set Rich Media corner radius
let topCorners = PWCornerTypeTopLeft.rawValue | PWCornerTypeTopRight.rawValue
Pushwoosh.media.modalRichMedia.setCornerType(CornerType(rawValue: topCorners), withRadius: 16)
// Close Modal Rich Media after N seconds
Pushwoosh.media.modalRichMedia.closeAfter(3)

Types de retour haptique :

typedef NS_ENUM(NSInteger, HapticFeedbackType) {
PWHapticFeedbackLight, // Light vibration feedback
PWHapticFeedbackMedium, // Medium vibration feedback
PWHapticFeedbackHard, // Strong vibration feedback
PWHapticFeedbackNone // Vibration is off (default)
};

Directions de balayage :

typedef NS_ENUM(NSInteger, DismissSwipeDirection) {
PWSwipeDismissDown,
PWSwipeDismissUp,
PWSwipeDismissLeft,
PWSwipeDismissRight,
PWSwipeDismissNone
};

PWRichMediaPresentingDelegate

Anchor link to

Pour gérer la file d’attente des médias riches modaux, vous devez implémenter les méthodes de délégué de PWRichMediaPresentingDelegate. En utilisant cette fonctionnalité, les médias riches modaux sont présentés séquentiellement, et le suivant ne sera pas affiché tant que l’utilisateur n’aura pas fermé l’actuel. Une fois que l’utilisateur ferme le média riche présenté, le suivant, qui faisait partie d’une autre notification push, sera affiché.

import UIKit
import PushwooshFramework
@main
class AppDelegate: UIResponder, UIApplicationDelegate, PWRichMediaPresentingDelegate {
var richMediaQueue: [PWRichMedia] = []
var isPresenting = false
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Configure modal rich media
Pushwoosh.media.setRichMediaPresentationStyle(.modal)
Pushwoosh.media.modalRichMedia.configure(
position: .PWModalWindowPositionBottom,
presentAnimation: .PWAnimationPresentFromBottom,
dismissAnimation: .PWAnimationDismissDown
)
// Set delegate
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)
}
// Present next rich media in queue
if let nextRichMedia = richMediaQueue.first {
Pushwoosh.media.modalRichMedia.present(nextRichMedia)
}
}
func richMediaManager(_ richMediaManager: PWRichMediaManager, presentingDidFailFor richMedia: PWRichMedia, withError error: Error) {
richMediaManager(richMediaManager, didClose: richMedia)
}
}