انتقل إلى المحتوى

إرسال بيانات مخصصة

سيساعدك هذا الدليل على فهم أفضل لكيفية تمرير البيانات المخصصة إلى تطبيقاتك في حمولة الإشعار الفوري حتى يتمكن تطبيقك من التفاعل مع هذه الإشعارات وتنفيذ إجراءات مختلفة وفقًا لذلك.

يمكن أن تختلف طرق تعاملك مع البيانات المخصصة وفقًا لأهداف عملك. في هذا المقال، سنعرض بعض الأمثلة الأساسية لتحليل البيانات المخصصة وتنفيذ إجراءات بسيطة:

  • تغيير لون خلفية التطبيق؛
  • فتح صفحة مخصصة في تطبيقك.

المتطلبات الأساسية

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 notification
func 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. في نموذج محتوى الإشعار الذي يفتح، أدخل أي نص للإشعار الفوري.

نموذج إنشاء إشعار فوري في لوحة تحكم Pushwoosh مع حقل نصي ومفتاح تبديل للبيانات المخصصة

ثم قم بتفعيل Send custom data. أدخل JSON في حقل البيانات المخصصة.

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

حقل البيانات المخصصة في نموذج الإشعار الفوري يعرض كائن JSON بقيم ألوان RGB ومعامل الخصم

عند النقر على الإشعار الفوري، يفتح 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
وحدة التحكم A تعرض قيمة الخصم لشريحة اختبار A/B

وحدة التحكم “B”

Anchor link to
وحدة التحكم B تعرض قيمة خصم مختلفة لشريحة اختبار A/B

تغيير أيقونة التطبيق عبر الإشعار الفوري

Anchor link to

مثال آخر على كيفية استخدام الإشعارات الفورية في iOS هو تغيير أيقونة التطبيق.

أولاً، دعنا نضيف ثلاث أيقونات مختلفة إلى الأصول (assets). ستُستخدم واحدة كأيقونة التطبيق الافتراضية، بينما ستتغير الأيقونتان الأخريان بناءً على البيانات المخصصة في الإشعار الفوري.

كتالوج الأصول في Xcode يعرض ثلاث أيقونات تطبيقات مختلفة للتبديل الديناميكي للأيقونات

لتمكين أيقونات التطبيق البديلة في تطبيق 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"
}
حقل البيانات المخصصة في نموذج الإشعار الفوري مع كائن JSON يحدد اسم أيقونة التطبيق البديلة

عند النقر على الإشعار الفوري، سيطالبك النظام بتغيير أيقونة التطبيق على الجهاز.

مربع حوار مطالبة نظام iOS يطلب إذن المستخدم لتغيير أيقونة التطبيق على الجهاز

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