Rich media modal para iOS
A partir da versão 6.7.5 do SDK da Pushwoosh, você tem a capacidade de enviar Rich Media Modal.
Estamos introduzindo o novo Rich Media Modal, que pode ser personalizado. O novo Rich Media Modal não bloqueia completamente a tela e pode ser posicionado em diferentes partes da tela (topo, inferior e centro).
Para mais informações sobre páginas de Rich Media, por favor, consulte nosso guia.
Configuração
Anchor link to//para notificações push silenciosasfunc application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { Pushwoosh.sharedInstance().handlePushReceived(userInfo) completionHandler(.noData)}- Para habilitar a exibição de Rich Media Modal, defina o parâmetro
Pushwoosh_RICH_MEDIA_STYLEem seu info.plist e atribua a ele o valorMODAL_RICH_MEDIA.
Info.plist:
<key>Pushwoosh_RICH_MEDIA_STYLE</key><string>MODAL_RICH_MEDIA</string>- Por padrão, o Rich Media Modal será exibido no centro da tela com uma animação de aparecimento de baixo para cima.
- Para configurar a exibição do Rich Media Modal (posição na tela, animação de exibição, animação de fechamento), você precisa usar o seguinte método:
// Configuração do Rich Media ModalPWModalWindowConfiguration.shared().configureModalWindow(with: .PWModalWindowPositionCenter, present: .PWAnimationPresentFromBottom, dismiss: .PWAnimationDismissUp)Posicionamento do Rich Media Modal
Anchor link toO Rich Media Modal pode ser posicionado em três locais: topo, inferior ou centro.
/** Enum que define as posições possíveis para exibir uma janela modal.
- `PWModalWindowPositionTop`: A janela modal aparece no topo da tela, dentro da área segura. - `PWModalWindowPositionCenter`: A janela modal aparece no centro da tela, dentro da área segura. - `PWModalWindowPositionBottom`: A janela modal aparece na parte inferior da tela, dentro da área segura. - `PWModalWindowPositionBottomSheet`: A janela modal aparece na parte inferior da tela, ignorando a área segura. - `PWModalWindowPositionDefault`: A posição padrão é o centro da tela, dentro da área segura. */typedef NS_ENUM(NSInteger, ModalWindowPosition) { PWModalWindowPositionTop, // Aparece no topo da tela (dentro da área segura) PWModalWindowPositionCenter, // Aparece no centro da tela (dentro da área segura) PWModalWindowPositionBottom, // Aparece na parte inferior da tela (dentro da área segura) PWModalWindowPositionBottomSheet, // Aparece na parte inferior da tela (ignora a área segura) PWModalWindowPositionFullScreen, // Tela cheia, ignora as margens da área segura PWModalWindowPositionDefault // Posição padrão (centro da tela, dentro da área segura)};O exemplo abaixo mostra um Rich Media Modal exibido no topo da tela.
As animações de exibição do Rich Media Modal incluem:
typedef NS_ENUM(NSInteger, PresentModalWindowAnimation) { PWAnimationPresentFromBottom, PWAnimationPresentFromTop, PWAnimationPresentFromRight, PWAnimationPresentFromLeft, PWAnimationPresentNone};As animações de fechamento do Rich Media Modal incluem:
typedef NS_ENUM(NSInteger, DismissModalWindowAnimation) { PWAnimationDismissDown, PWAnimationDismissUp, PWAnimationDismissLeft, PWAnimationDismissRight, PWAnimationCurveEaseInOut, PWAnimationDismissNone,
/** * A animação de fechamento padrão é `PWAnimationCurveEaseInOut` */ PWAnimationDismissDefault};O exemplo abaixo demonstra a exibição de um Rich Media Modal na parte inferior da tela com uma animação de exibição da esquerda para a direita e uma animação de fechamento para a direita:
Parâmetros adicionais para Rich Media Modal
Anchor link toParâmetros adicionais para a exibição do Rich Media Modal incluem opções como adicionar feedback tátil do tipo vibração, habilitar gestos de deslizar e definir um temporizador de fechamento automático após uma duração especificada.
// Tipo de Feedback TátilPWModalWindowConfiguration.shared().setPresent(.PWHapticFeedbackLight)
/**enum HapticFeedbackType
typedef NS_ENUM(NSInteger, HapticFeedbackType) { PWHapticFeedbackLight, // Feedback de vibração leve PWHapticFeedbackMedium, // Feedback de vibração médio PWHapticFeedbackHard, // Feedback de vibração forte
/** * A vibração está desativada por padrão. */ PWHapticFeedbackNone};*/
// Direções de deslizelet 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};*/
// Definir o raio do canto do Rich MediaPWModalWindowConfiguration.shared().setCornerType([.PWCornerTypeTopLeft, .PWCornerTypeBottomRight], withRadius: 30.0)
// Fechar Rich Media Modal após N segundosPWModalWindowConfiguration.shared().closeModalWindow(after: 3)PWRichMediaPresentingDelegate
Anchor link toPara gerenciar a fila de rich media modais, você precisa implementar os métodos de delegate do PWRichMediaPresentingDelegate. Ao usar esta funcionalidade, os rich media modais são apresentados sequencialmente, e o próximo não será exibido até que o usuário feche o atual. Assim que o usuário fechar o rich media apresentado, o próximo, que fazia parte de uma notificação push diferente, será mostrado.
Para implementar esta funcionalidade, use o código fornecido abaixo:
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() // pode ser omitido neste exemplo, pois acontecerá automaticamente. }
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) }}