콘텐츠로 건너뛰기

iOS 모달 리치 미디어

Pushwoosh SDK 버전 6.7.5부터 모달 리치 미디어를 전송할 수 있습니다.

사용자 정의할 수 있는 새로운 모달 리치 미디어를 소개합니다. 새로운 모달 리치 미디어는 화면을 완전히 가리지 않으며 화면의 다른 부분(상단, 하단, 중앙)에 배치할 수 있습니다.

리치 미디어 페이지에 대한 자세한 내용은 가이드를 참조하십시오.

// 자동 푸시 알림용
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Pushwoosh.configure.handlePushReceived(userInfo)
completionHandler(.noData)
}

옵션 1: Info.plist 구성

Anchor link to

모달 리치 미디어 표시를 활성화하려면 info.plist에서 Pushwoosh_RICH_MEDIA_STYLE 매개변수를 설정하고 MODAL_RICH_MEDIA 값을 할당하십시오.

Info.plist:

<key>Pushwoosh_RICH_MEDIA_STYLE</key>
<string>MODAL_RICH_MEDIA</string>

옵션 2: 프로그래밍 방식 구성 (SDK 7.0.14 이상)

Anchor link to

AppDelegate에서 프로그래밍 방식으로 리치 미디어 표시 스타일을 구성할 수도 있습니다:

func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 모달 표시 스타일 설정
Pushwoosh.media.setRichMediaPresentationStyle(.modal)
// 모달 창 모양 구성
Pushwoosh.media.modalRichMedia.configure(
position: .PWModalWindowPositionBottom,
presentAnimation: .PWAnimationPresentFromBottom,
dismissAnimation: .PWAnimationDismissDown
)
Pushwoosh.configure.registerForPushNotifications()
return true
}

기본적으로 모달 리치 미디어는 화면 중앙에 아래에서 위로 나타나는 애니메이션과 함께 표시됩니다.

모달 리치 미디어 위치 지정

Anchor link to

모달 리치 미디어는 화면의 다른 위치에 배치할 수 있습니다.

/**
모달 창을 표시할 수 있는 위치를 정의하는 열거형입니다.
- `PWModalWindowPositionTop`: 모달 창이 화면 상단, 안전 영역 내에 나타납니다.
- `PWModalWindowPositionCenter`: 모달 창이 화면 중앙, 안전 영역 내에 나타납니다.
- `PWModalWindowPositionBottom`: 모달 창이 화면 하단, 안전 영역 내에 나타납니다.
- `PWModalWindowPositionBottomSheet`: 모달 창이 화면 맨 아래, 안전 영역을 무시하고 나타납니다.
- `PWModalWindowPositionDefault`: 기본 위치는 화면 중앙, 안전 영역 내입니다.
*/
typedef NS_ENUM(NSInteger, ModalWindowPosition) {
PWModalWindowPositionTop, // 화면 상단에 표시 (안전 영역 내)
PWModalWindowPositionCenter, // 화면 중앙에 표시 (안전 영역 내)
PWModalWindowPositionBottom, // 화면 하단에 표시 (안전 영역 내)
PWModalWindowPositionBottomSheet, // 화면 맨 아래에 표시 (안전 영역 무시)
PWModalWindowPositionFullScreen, // 전체 화면, 안전 영역 인셋 무시
PWModalWindowPositionDefault // 기본 위치 (화면 중앙, 안전 영역 내)
};

아래 예시는 화면 상단에 표시된 모달 리치 미디어를 보여줍니다.

모달 리치 미디어 표시 애니메이션은 다음과 같습니다:

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

모달 리치 미디어 닫기 애니메이션은 다음과 같습니다:

typedef NS_ENUM(NSInteger, DismissModalWindowAnimation) {
PWAnimationDismissDown,
PWAnimationDismissUp,
PWAnimationDismissLeft,
PWAnimationDismissRight,
PWAnimationCurveEaseInOut,
PWAnimationDismissNone,
/**
* 기본 닫기 애니메이션은 `PWAnimationCurveEaseInOut`입니다.
*/
PWAnimationDismissDefault
};

아래 예시는 왼쪽에서 오른쪽으로 나타나는 표시 애니메이션과 오른쪽으로 닫히는 애니메이션으로 화면 하단에 모달 리치 미디어를 표시하는 것을 보여줍니다:

모달 리치 미디어의 추가 매개변수

Anchor link to

모달 리치 미디어를 표시하기 위한 추가 매개변수에는 진동 유형의 햅틱 피드백 추가, 스와이프 제스처 활성화, 지정된 시간 후 자동 닫기 타이머 설정과 같은 옵션이 포함됩니다.

// 햅틱 피드백 유형
Pushwoosh.media.modalRichMedia.setHapticFeedbackType(.PWHapticFeedbackLight)
// 닫기 위한 스와이프 방향
Pushwoosh.media.modalRichMedia.setDismissSwipeDirections([
NSNumber(value: DismissSwipeDirection.PWSwipeDismissDown.rawValue),
NSNumber(value: DismissSwipeDirection.PWSwipeDismissUp.rawValue)
])
// 리치 미디어 모서리 반경 설정
let topCorners = PWCornerTypeTopLeft.rawValue | PWCornerTypeTopRight.rawValue
Pushwoosh.media.modalRichMedia.setCornerType(CornerType(rawValue: topCorners), withRadius: 16)
// N초 후 모달 리치 미디어 닫기
Pushwoosh.media.modalRichMedia.closeAfter(3)

햅틱 피드백 유형:

typedef NS_ENUM(NSInteger, HapticFeedbackType) {
PWHapticFeedbackLight, // 가벼운 진동 피드백
PWHapticFeedbackMedium, // 중간 진동 피드백
PWHapticFeedbackHard, // 강한 진동 피드백
PWHapticFeedbackNone // 진동 꺼짐 (기본값)
};

스와이프 방향:

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

PWRichMediaPresentingDelegate

Anchor link to

모달 리치 미디어의 큐를 관리하려면 PWRichMediaPresentingDelegate의 델리게이트 메서드를 구현해야 합니다. 이 기능을 사용하면 모달 리치 미디어가 순차적으로 표시되며, 사용자가 현재 미디어를 닫을 때까지 다음 미디어가 표시되지 않습니다. 사용자가 표시된 리치 미디어를 닫으면 다른 푸시 알림의 일부였던 다음 리치 미디어가 표시됩니다.

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 {
// 모달 리치 미디어 구성
Pushwoosh.media.setRichMediaPresentationStyle(.modal)
Pushwoosh.media.modalRichMedia.configure(
position: .PWModalWindowPositionBottom,
presentAnimation: .PWAnimationPresentFromBottom,
dismissAnimation: .PWAnimationDismissDown
)
// 델리게이트 설정
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)
}
// 큐의 다음 리치 미디어 표시
if let nextRichMedia = richMediaQueue.first {
Pushwoosh.media.modalRichMedia.present(nextRichMedia)
}
}
func richMediaManager(_ richMediaManager: PWRichMediaManager, presentingDidFailFor richMedia: PWRichMedia, withError error: Error) {
richMediaManager(richMediaManager, didClose: richMedia)
}
}