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

تتبع تسليم رسائل iOS

توجد طريقة API في Pushwoosh تتتبع تسليم إشعارات الدفع. لا تدعم تطبيقات iOS هذه الطريقة بشكل افتراضي، لأن إشعارات الدفع على iOS يتم التعامل معها بواسطة نظام التشغيل (OS)، وليس بواسطة Pushwoosh SDK. يمكنك إضافة تتبع التسليم عن طريق إضافة ملحق خدمة الإشعارات (Notification Service Extension) إلى مشروعك. توضح هذه الصفحة كيفية تنفيذ تتبع تسليم الرسائل لتطبيقات iOS.

إضافة ملحق خدمة الإشعارات

Anchor link to
  1. في Xcode، اختر File > New > Target…

  2. اختر Notification Service Extension واضغط على Next.

محدد قوالب الهدف في Xcode مع تحديد ملحق خدمة الإشعارات
  1. أدخل اسم المنتج واضغط على Finish.
  1. اضغط على Cancel في نافذة Activate scheme.
نافذة Activate scheme مع تمييز Cancel

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

الاعتماديات لملحق خدمة الإشعارات (CocoaPods فقط)

Anchor link to

إذا كنت تستخدم Swift Package Manager لإدارة الاعتماديات، يمكنك تخطي هذه الخطوة، حيث تتم إضافة الاعتماديات تلقائيًا.

افتح ملف Podfile الخاص بك وأضف الاعتمادية للهدف:

Podfile
target 'NotificationServiceExtension' do
use_frameworks!
pod 'PushwooshXCFramework'
end

قم بتشغيل الأوامر التالية في الطرفية لتثبيت الاعتماديات:

Terminal window
rm -rf Podfile.lock
pod deintegrate
pod setup
pod repo update
pod install

إضافة كود لتتبع أحداث تسليم الرسائل

Anchor link to

اجعل ملحقك فئة فرعية من PushwooshNotificationServiceExtension. فئة فرعية فارغة كافية: يقوم Pushwoosh بإرسال حدث تسليم الرسالة، وتعيين الشارة، وتنزيل المرفقات الوسائط، والتعامل مع الحل الاحتياطي لانتهاء المهلة تلقائيًا.

استبدل المحتويات التي تم إنشاؤها لملف NotificationService الخاص بك:

import UserNotifications
import PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {}

معرّف التطبيق (App ID)

Anchor link to

منذ الإصدار 7.1.0، يرث الملحق Pushwoosh_APPID (والمفاتيح الأخرى التي تبدأ بـ Pushwoosh_*) من Info.plist الخاص بالتطبيق المضيف، لذا لم تعد بحاجة إلى تكراره في الملحق. أضف Pushwoosh_APPID إلى Info.plist الخاص بالملحق فقط عندما تريد تجاوز قيمة المضيف:

NotificationService/Info.plist
<key>Pushwoosh_APPID</key>
<string>XXXXX-XXXXX</string>

مجموعة التطبيقات (App Group) (الشارة والبروكسي العكسي)

Anchor link to

مجموعة التطبيقات (App Group) المشتركة بين التطبيق والملحق ضرورية لمزامنة عدد الشارات وقراءة إعدادات البروكسي العكسي التي يخزنها التطبيق المضيف.

  1. أضف إمكانية App Groups إلى هدف الملحق وقم بتمكين نفس المجموعة هناك كما في التطبيق المضيف. هذا مطلوب - بدون الحاوية المشتركة لا يمكن مزامنة عدد الشارات وإعدادات البروكسي العكسي.

  2. قم بتوفير اسم مجموعة التطبيقات. مثل Pushwoosh_APPID، يرث الملحق PW_APP_GROUPS_NAME من Info.plist الخاص بالتطبيق المضيف منذ الإصدار 7.1.0، لذا إذا قمت بتعيينه هناك بالفعل للشارات، فلن تحتاج إلى إضافته إلى الملحق. قم بتعيينه في Info.plist الخاص بالملحق فقط لتجاوز قيمة المضيف، أو قم بتوفيره برمجيًا عن طريق تجاوز pushwooshAppGroupsName.

App Info.plist
<key>PW_APP_GROUPS_NAME</key>
<string>group.com.example.app</string>

تخصيص الإشعار (اختياري)

Anchor link to

تكشف الفئة الأساسية عن بعض نقاط التجاوز، من الأقل إلى الأكثر تحكمًا. لا يزال Pushwoosh يقوم بتشغيل حدث التسليم، الشارة، المرفقات، والحل الاحتياطي لانتهاء المهلة في كل حالة.

قم بتعيين مجموعة التطبيقات برمجيًا بدلاً من استخدام مفتاح Info.plist:

override func pushwooshAppGroupsName() -> String? {
"group.com.example.app"
}

قم بتشغيل تحضير غير متزامن قبل أن يعالج Pushwoosh الدفع - على سبيل المثال، الجلب المسبق لوسائط Push Stories - دون تجاوز didReceive القياسي. قم باستدعاء completion مرة واحدة بالضبط، على الخيط الرئيسي:

override func pushwooshPrepare(for request: UNNotificationRequest,
completion: @escaping () -> Void) {
// async work here
completion()
}

قم بتعديل المحتوى قبل عرضه عن طريق تجاوز didReceive. قم باستدعاء super مع معالج المحتوى الخاص بك، وقم بتعديل المحتوى بداخله، ثم قم بتمريره إلى المعالج الأصلي:

override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
super.didReceive(request) { content in
let mutable = (content.mutableCopy() as? UNMutableNotificationContent) ?? content
// customize `mutable` here
contentHandler(mutable)
}
}

التكامل القديم

Anchor link to

تقوم واجهة برمجة التطبيقات منخفضة المستوى هذه بتشغيل نفس المعالجة (حدث التسليم، الشارة، المرفقات) من UNNotificationServiceExtension عادي:

import UserNotifications
import PushwooshFramework
class NotificationService: UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest,
withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
PWNotificationExtensionManager.sharedManager()
.handleNotificationRequest(request, contentHandler: contentHandler)
}
}

شاركنا ملاحظاتك

Anchor link to

تساعدنا ملاحظاتك في إنشاء تجربة أفضل، لذلك نود أن نسمع منك إذا كان لديك أي مشاكل أثناء عملية تكامل SDK. إذا واجهت أي صعوبات، فلا تتردد في مشاركة أفكارك معنا عبر هذا النموذج.