iOS Modal Rich Media
ตั้งแต่ Pushwoosh SDK เวอร์ชัน 6.7.5 เป็นต้นไป คุณจะสามารถส่ง Modal Rich Media ได้
เรากำลังเปิดตัว Modal Rich Media ใหม่ซึ่งสามารถปรับแต่งได้ Modal Rich Media แบบใหม่นี้จะไม่บดบังหน้าจอทั้งหมดและสามารถจัดตำแหน่งไว้ในส่วนต่างๆ ของหน้าจอได้ (ด้านบน ด้านล่าง และตรงกลาง)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับหน้า Rich Media โปรดดูที่ คำแนะนำของเรา
การกำหนดค่า
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)}
- หากต้องการเปิดใช้งานการแสดงผล Modal Rich Media ให้ตั้งค่าพารามิเตอร์
Pushwoosh_RICH_MEDIA_STYLE
ใน info.plist ของคุณและกำหนดค่าเป็นMODAL_RICH_MEDIA
Info.plist:
<key>Pushwoosh_RICH_MEDIA_STYLE</key><string>MODAL_RICH_MEDIA</string>
- โดยค่าเริ่มต้น Modal Rich Media จะแสดงที่กึ่งกลางหน้าจอพร้อมแอนิเมชันการปรากฏจากล่างขึ้นบน

- หากต้องการกำหนดค่าการแสดงผลของ Modal Rich Media (ตำแหน่งบนหน้าจอ, แอนิเมชันการแสดง, แอนิเมชันการปิด) คุณต้องใช้วิธีการต่อไปนี้:
// Modal Rich Media ConfigurationPWModalWindowConfiguration.shared().configureModalWindow(with: .PWModalWindowPositionCenter, present: .PWAnimationPresentFromBottom, dismiss: .PWAnimationDismissUp)
การจัดตำแหน่ง Modal Rich Media
Anchor link toModal Rich Media สามารถจัดตำแหน่งได้สามตำแหน่ง: ด้านบน ด้านล่าง หรือกึ่งกลาง
/** Enum ที่กำหนดตำแหน่งที่เป็นไปได้สำหรับการแสดงหน้าต่างโมดอล
- `PWModalWindowPositionTop`: หน้าต่างโมดอลจะปรากฏที่ด้านบนของหน้าจอ ภายในพื้นที่ปลอดภัย (safe area) - `PWModalWindowPositionCenter`: หน้าต่างโมดอลจะปรากฏที่กึ่งกลางของหน้าจอ ภายในพื้นที่ปลอดภัย (safe area) - `PWModalWindowPositionBottom`: หน้าต่างโมดอลจะปรากฏที่ด้านล่างของหน้าจอ ภายในพื้นที่ปลอดภัย (safe area) - `PWModalWindowPositionBottomSheet`: หน้าต่างโมดอลจะปรากฏที่ด้านล่างสุดของหน้าจอ โดยไม่สนใจพื้นที่ปลอดภัย (safe area) - `PWModalWindowPositionFullScreen`: เต็มหน้าจอ ไม่สนใจขอบของ safe area - `PWModalWindowPositionDefault`: ตำแหน่งเริ่มต้นคือตรงกลางหน้าจอ ภายในพื้นที่ปลอดภัย (safe area) */typedef NS_ENUM(NSInteger, ModalWindowPosition) { PWModalWindowPositionTop, // ปรากฏที่ด้านบนของหน้าจอ (ภายใน safe area) PWModalWindowPositionCenter, // ปรากฏที่กึ่งกลางของหน้าจอ (ภายใน safe area) PWModalWindowPositionBottom, // ปรากฏที่ด้านล่างของหน้าจอ (ภายใน safe area) PWModalWindowPositionBottomSheet, // ปรากฏที่ด้านล่างสุดของหน้าจอ (ไม่สนใจ safe area) PWModalWindowPositionFullScreen, // เต็มหน้าจอ ไม่สนใจขอบของ safe area PWModalWindowPositionDefault // ตำแหน่งเริ่มต้น (กึ่งกลางหน้าจอ ภายใน safe area)};
ตัวอย่างด้านล่างแสดง Modal Rich Media ที่แสดงผลที่ด้านบนของหน้าจอ

แอนิเมชันการแสดง Modal Rich Media ประกอบด้วย:
typedef NS_ENUM(NSInteger, PresentModalWindowAnimation) { PWAnimationPresentFromBottom, PWAnimationPresentFromTop, PWAnimationPresentFromRight, PWAnimationPresentFromLeft, PWAnimationPresentNone};
แอนิเมชันการปิด Modal Rich Media ประกอบด้วย:
typedef NS_ENUM(NSInteger, DismissModalWindowAnimation) { PWAnimationDismissDown, PWAnimationDismissUp, PWAnimationDismissLeft, PWAnimationDismissRight, PWAnimationCurveEaseInOut, PWAnimationDismissNone,
/** * แอนิเมชันการปิดเริ่มต้นคือ `PWAnimationCurveEaseInOut` */ PWAnimationDismissDefault};
ตัวอย่างด้านล่างสาธิตการแสดง Modal Rich Media ที่ด้านล่างของหน้าจอพร้อมแอนิเมชันการแสดงจากซ้ายไปขวาและแอนิเมชันการปิดไปทางขวา:

พารามิเตอร์เพิ่มเติมสำหรับ Modal Rich Media
Anchor link toพารามิเตอร์เพิ่มเติมสำหรับการแสดง Modal Rich Media รวมถึงตัวเลือกต่างๆ เช่น การเพิ่มการตอบสนองแบบสัมผัส (haptic feedback) ประเภทการสั่น, การเปิดใช้งานท่าทางการปัด (swipe gestures) และการตั้งเวลาปิดอัตโนมัติหลังจากระยะเวลาที่กำหนด
// ประเภทการตอบสนองแบบสัมผัส (Haptic Feedback)PWModalWindowConfiguration.shared().setPresent(.PWHapticFeedbackLight)
/**enum HapticFeedbackType
typedef NS_ENUM(NSInteger, HapticFeedbackType) { PWHapticFeedbackLight, // การสั่นตอบสนองแบบเบา PWHapticFeedbackMedium, // การสั่นตอบสนองแบบปานกลาง PWHapticFeedbackHard, // การสั่นตอบสนองแบบแรง
/** * โดยค่าเริ่มต้น การสั่นจะถูกปิดไว้ */ PWHapticFeedbackNone};*/
// ทิศทางการปัดlet 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};*/
// ตั้งค่ารัศมีความโค้งของมุม Rich MediaPWModalWindowConfiguration.shared().setCornerType([.PWCornerTypeTopLeft, .PWCornerTypeBottomRight], withRadius: 30.0)
// ปิด Modal Rich Media หลังจาก N วินาทีPWModalWindowConfiguration.shared().closeModalWindow(after: 3)
PWRichMediaPresentingDelegate
Anchor link toในการจัดการคิวของ Modal Rich Media คุณต้องติดตั้งเมธอดเดลิเกตของ PWRichMediaPresentingDelegate เมื่อใช้ฟังก์ชันนี้ Modal Rich Media จะถูกนำเสนอตามลำดับ และรายการถัดไปจะไม่แสดงจนกว่าผู้ใช้จะปิดรายการปัจจุบัน เมื่อผู้ใช้ปิด Rich Media ที่นำเสนอแล้ว รายการถัดไปซึ่งเป็นส่วนหนึ่งของการแจ้งเตือนแบบพุชอื่นจะปรากฏขึ้น
หากต้องการใช้ฟังก์ชันนี้ ให้ใช้โค้ดที่ให้ไว้ด้านล่าง:
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() // จริงๆ แล้วสามารถละเว้นในตัวอย่างนี้ได้เพราะจะเกิดขึ้นโดยอัตโนมัติ }
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) }}