الوسائط الغنية المشروطة لنظام iOS
بدءًا من إصدار Pushwoosh SDK 6.7.5، لديك القدرة على إرسال الوسائط الغنية المشروطة (Modal Rich Media).
نحن نقدم وسائط غنية مشروطة جديدة يمكن تخصيصها. لا تحجب الوسائط الغنية المشروطة الجديدة الشاشة بالكامل ويمكن وضعها في أجزاء مختلفة من الشاشة (أعلى، أسفل، وفي المنتصف).
لمزيد من المعلومات حول صفحات الوسائط الغنية، يرجى الرجوع إلى دليلنا.
الإعداد
Anchor link to//لإشعارات الدفع الصامتةfunc application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { Pushwoosh.sharedInstance().handlePushReceived(userInfo) completionHandler(.noData)}- لتمكين عرض الوسائط الغنية المشروطة، قم بتعيين المعلمة
Pushwoosh_RICH_MEDIA_STYLEفي ملف info.plist الخاص بك وقم بتعيين القيمةMODAL_RICH_MEDIAلها.
Info.plist:
<key>Pushwoosh_RICH_MEDIA_STYLE</key><string>MODAL_RICH_MEDIA</string>- بشكل افتراضي، سيتم عرض الوسائط الغنية المشروطة في منتصف الشاشة مع حركة ظهور من الأسفل إلى الأعلى.
- لتكوين عرض الوسائط الغنية المشروطة (موضع الشاشة، حركة الظهور، حركة الإغلاق)، تحتاج إلى استخدام الطريقة التالية:
// تكوين الوسائط الغنية المشروطةPWModalWindowConfiguration.shared().configureModalWindow(with: .PWModalWindowPositionCenter, present: .PWAnimationPresentFromBottom, dismiss: .PWAnimationDismissUp)تحديد موضع الوسائط الغنية المشروطة
Anchor link toيمكن وضع الوسائط الغنية المشروطة في ثلاثة مواقع: أعلى، أسفل، أو في المنتصف.
/** Enum يحدد المواضع الممكنة لعرض نافذة مشروطة.
- `PWModalWindowPositionTop`: تظهر النافذة المشروطة في الجزء العلوي من الشاشة، ضمن المنطقة الآمنة. - `PWModalWindowPositionCenter`: تظهر النافذة المشروطة في منتصف الشاشة، ضمن المنطقة الآمنة. - `PWModalWindowPositionBottom`: تظهر النافذة المشروطة في الجزء السفلي من الشاشة، ضمن المنطقة الآمنة. - `PWModalWindowPositionBottomSheet`: تظهر النافذة المشروطة في أسفل الشاشة تمامًا، متجاهلة المنطقة الآمنة. - `PWModalWindowPositionFullScreen`: ملء الشاشة، يتجاهل هوامش المنطقة الآمنة - `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تتضمن المعلمات الإضافية لعرض الوسائط الغنية المشروطة خيارات مثل إضافة ردود فعل لمسية من نوع الاهتزاز، وتمكين إيماءات السحب، وتعيين مؤقت إغلاق تلقائي بعد مدة محددة.
// نوع ردود الفعل اللمسية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};*/
// تعيين نصف قطر زاوية الوسائط الغنيةPWModalWindowConfiguration.shared().setCornerType([.PWCornerTypeTopLeft, .PWCornerTypeBottomRight], withRadius: 30.0)
// إغلاق الوسائط الغنية المشروطة بعد N ثانيةPWModalWindowConfiguration.shared().closeModalWindow(after: 3)PWRichMediaPresentingDelegate
Anchor link toلإدارة قائمة انتظار الوسائط الغنية المشروطة، تحتاج إلى تنفيذ طرق التفويض (delegate methods) الخاصة بـ PWRichMediaPresentingDelegate. عند استخدام هذه الوظيفة، يتم تقديم الوسائط الغنية المشروطة بشكل تسلسلي، ولن يتم عرض الوسيط التالي حتى يغلق المستخدم الوسيط الحالي. بمجرد أن يغلق المستخدم الوسائط الغنية المعروضة، سيتم عرض الوسيط التالي، الذي كان جزءًا من إشعار دفع مختلف.
لتنفيذ هذه الوظيفة، استخدم الكود الموضح أدناه:
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) }}