إرسال بيانات مخصصة
سيساعدك هذا الدليل على فهم أفضل لكيفية تمرير البيانات المخصصة إلى تطبيقاتك في حمولة الإشعار الفوري حتى يتمكن تطبيقك من التفاعل مع هذه الإشعارات وتنفيذ إجراءات مختلفة وفقًا لذلك.
يمكن أن تختلف طرق تعاملك مع البيانات المخصصة وفقًا لأهداف عملك. في هذا المقال، سنعرض بعض الأمثلة الأساسية لتحليل البيانات المخصصة وتنفيذ إجراءات بسيطة:
- تغيير لون خلفية التطبيق؛
- فتح صفحة مخصصة في تطبيقك.
المتطلبات الأساسية
Anchor link toيغطي هذا الدليل تطوير iOS الأصلي (Native). يُفترض أن لديك تطبيق iOS نموذجي تم تكوينه ويستقبل الإشعارات الفورية وفقًا لـ دليل البدء السريع لـ iOS.
في AppDelegate في دالة didFinishLaunchingWithOptions، سنستخدم self.viewController كمفوض لمعالجة الإشعارات الفورية:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { Pushwoosh.sharedInstance().delegate = self.viewController Pushwoosh.sharedInstance().registerForPushNotifications()
if let launchOptions = launchOptions { Pushwoosh.sharedInstance().handlePushReceived(launchOptions) } return true}يطبق ViewController الخاص بنا بروتوكول PWMessagingDelegate:
extension ViewController: PWMessagingDelegateوبالتالي يحتوي على دالة onMessageOpened التي تتعامل مع الإشعارات الفورية المستلمة:
// User pressed on the push notificationfunc pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) {}فتح ViewController آخر وتغيير لون الخلفية
Anchor link toالآن نحن نحصل على customData من حمولة الإشعار. على سبيل المثال، دعنا نغير لون خلفية العرض ونسبة الخصم. نفترض أن البيانات المخصصة ستحتوي على العناصر “r”، “g”، “b”، و "d" بتنسيق كائن JSON كما يلي:
guard let customDataJson = message.customData, let redString = customDataJson["r"] as? String, let greenString = customDataJson["g"] as? String, let blueString = customDataJson["b"] as? String, let discount = customDataJson["d"] as? String else { return}setViewBackgroundColor(red: redString, green: greenString, blue: blueString, discount: discount)سنستخدم الدالة التالية لفتح ViewController جديد وتعيين لون الخلفية ونسبة الخصم:
func setViewBackgroundColor(red: String, green: String, blue: String, discount: String) { let red = CGFloat((red as NSString).floatValue) let green = CGFloat((green as NSString).floatValue) let blue = CGFloat((blue as NSString).floatValue)
let color = UIColor(red: red / 255.0, green: green / 255.0, blue: blue / 255.0, alpha: 1)
if let topController = UIApplication.shared.topMostController() { let storyboard = UIStoryboard(name: "Main", bundle: nil) if let customViewController = storyboard.instantiateViewController(withIdentifier: "custom_page") as? CustomPageViewController { customViewController.discount = discount customViewController.bgColor = color topController.present(customViewController, animated: true, completion: nil) } }}دعنا نختبر مثالنا. انتقل إلى Pushwoosh Journey وأضف عنصر Push إلى اللوحة. بعد ذلك، انقر على Create new content. في نموذج محتوى الإشعار الذي يفتح، أدخل أي نص للإشعار الفوري.

ثم قم بتفعيل Send custom data. أدخل JSON في حقل البيانات المخصصة.
بما أننا قررنا أن يكون تنسيق بياناتنا المخصصة كائن JSON يحتوي على قيم “r”، “g”، “b”، نحتاج إلى استخدام حقل “custom data” في لوحة التحكم وتعبئته بكائن JSON {"r":"30", "g":"144", "b":"255", "d":"25"}:

عند النقر على الإشعار الفوري، يفتح CustomPageViewController، ويتم تعيين لون الخلفية، ويتم تطبيق الخصم:

كود CustomPageViewController:
class CustomPageViewController: UIViewController {
var bgColor: UIColor? var discount: String?
@IBOutlet weak var titleLabel: UILabel!
override func viewDidLoad() { super.viewDidLoad()
self.view.backgroundColor = self.bgColor
if self.discount != nil { self.titleLabel?.text = "ONLY TODAY GET \(self.discount!)% DISCOUNT!" } }
func showPromoPage(discount: String) { let vc = CustomPageViewController() vc.bgColor = self.view.backgroundColor vc.discount = discount vc.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
if self.presentedViewController != nil { self.dismiss(animated: true, completion: { self.present(vc, animated: true, completion: nil) }) } else { self.present(vc, animated: true, completion: nil) } }
@IBAction func closeButtonAction(_ sender: Any) { self.dismiss(animated: true) }}نفترض أن قيمة الخصم ستأتي كمعامل "d" في JSON لحمولة الإشعار الفوري. بما أن حمولات الإشعارات الفورية محدودة الحجم، فمن الأفضل استخدام أسماء قصيرة للمعاملات.
guard let customDataJson = message.customData, let redString = customDataJson["r"] as? String, let greenString = customDataJson["g"] as? String, let blueString = customDataJson["b"] as? String, let discount = customDataJson["d"] as? String else { return}يمكنك كتابة كود لتهيئة وفتح وحدات تحكم عرض (View Controllers) مختلفة اعتمادًا على المعاملات التي تمررها في حمولة الإشعار الفوري.
فتح وحدة تحكم اختبار A/B
Anchor link toدعنا ننظر في حالة استخدام أخرى للبيانات المخصصة في إشعار فوري. على سبيل المثال، نحتاج إلى فتح وحدة تحكم عرض واحدة لشريحة مستخدمين ووحدة تحكم عرض أخرى لشريحة مستخدمين مختلفة. ببساطة، يمكننا استخدام البيانات المخصصة لاختبار A/B في تطبيقك.
دعنا ننشئ وحدتي تحكم عرض. ستفتح وحدة التحكم الأولى (A) بقيمة خصم، وستفتح وحدة التحكم الثانية (B) بمعامل خصم مختلف.
الآن دعنا نكتب الكود الذي سيفتح وحدة تحكم العرض المناسبة بناءً على حمولة الإشعار الفوري:
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { // MARK: - A/B Testing via Custom Data guard let customDataJson = message.customData, let viewController = customDataJson["vc"] as? String else { return }
if viewController == "A" { setControllerA() } else if viewController == "B" { setControllerB() }}
func setControllerA() { if let topController = UIApplication.shared.topMostController() { let storyboard = UIStoryboard(name: "Main", bundle: nil) if let customViewController = storyboard.instantiateViewController(withIdentifier: "a_vc") as? AViewController { customViewController.discountA = "50" topController.present(customViewController, animated: true, completion: nil) } }}
func setControllerB() { if let topController = UIApplication.shared.topMostController() { let storyboard = UIStoryboard(name: "Main", bundle: nil) if let customViewController = storyboard.instantiateViewController(withIdentifier: "b_vc") as? BViewController { customViewController.discountB = "100" topController.present(customViewController, animated: true, completion: nil) } }}أضف JSON الخاص بك إلى حقل البيانات المخصصة.
{ "vc": "A"}
// Choose your Custom Data (A or B)
{ "vc": "B"}اعتمادًا على البيانات المخصصة التي أرسلتها في حمولة الإشعار، إما 'vc': 'A' أو 'vc': 'B'، ستفتح شريحة من المستخدمين وحدة تحكم واحدة، بينما ستفتح شريحة أخرى من المستخدمين وحدة تحكم مختلفة.
وحدة التحكم “A”
Anchor link to
وحدة التحكم “B”
Anchor link to
تغيير أيقونة التطبيق عبر الإشعار الفوري
Anchor link toمثال آخر على كيفية استخدام الإشعارات الفورية في iOS هو تغيير أيقونة التطبيق.
أولاً، دعنا نضيف ثلاث أيقونات مختلفة إلى الأصول (assets). ستُستخدم واحدة كأيقونة التطبيق الافتراضية، بينما ستتغير الأيقونتان الأخريان بناءً على البيانات المخصصة في الإشعار الفوري.

لتمكين أيقونات التطبيق البديلة في تطبيق iOS الخاص بك، تحتاج إلى إضافة التكوين اللازم في ملف Info.plist. إليك الخطوات للقيام بذلك:
<key>CFBundleIcons</key><dict> <key>CFBundleAlternateIcons</key> <dict> <key>AppIcon-2</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Icon-2</string> </array> <key>UIPrerenderedIcon</key> <true/> </dict> <key>AppIcon-3</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Icon-3</string> </array> <key>UIPrerenderedIcon</key> <true/> </dict> </dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>Icon-1</string> </array> <key>UIPrerenderedIcon</key> <true/> </dict></dict>في رد النداء pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage)، يمكنك إضافة الكود لتغيير أيقونة التطبيق بناءً على البيانات المخصصة المستلمة في الإشعار الفوري. إليك كيفية تنفيذ ذلك:
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { // MARK: - Change the app icon dynamically guard let customDataJson = message.customData, let appIcon = customDataJson["i"] as? String else { return }
UIApplication.shared.setAlternateIconName(appIcon) { error in if let error = error { print(error.localizedDescription) } else { print("Success!") } }}أضف كود JSON:
{ "i": "AppIcon-2"}
عند النقر على الإشعار الفوري، سيطالبك النظام بتغيير أيقونة التطبيق على الجهاز.

يمكنك العثور على المشروع الذي يستخدم البيانات المخصصة على GitHub.