ข้ามไปยังเนื้อหา

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 notifications
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Pushwoosh.sharedInstance().handlePushReceived(userInfo)
completionHandler(.noData)
}
  1. หากต้องการเปิดใช้งานการแสดงผล 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>
  1. โดยค่าเริ่มต้น Modal Rich Media จะแสดงที่กึ่งกลางหน้าจอพร้อมแอนิเมชันการปรากฏจากล่างขึ้นบน
ตัวอย่าง
  1. หากต้องการกำหนดค่าการแสดงผลของ Modal Rich Media (ตำแหน่งบนหน้าจอ, แอนิเมชันการแสดง, แอนิเมชันการปิด) คุณต้องใช้วิธีการต่อไปนี้:
// Modal Rich Media Configuration
PWModalWindowConfiguration.shared().configureModalWindow(with: .PWModalWindowPositionCenter,
present: .PWAnimationPresentFromBottom,
dismiss: .PWAnimationDismissUp)

การจัดตำแหน่ง Modal Rich Media

Anchor link to

Modal 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 Media
PWModalWindowConfiguration.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 UIKit
import 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)
}
}