تتبع تسليم رسائل iOS
توجد طريقة API في Pushwoosh تتتبع تسليم إشعارات الدفع. لا تدعم تطبيقات iOS هذه الطريقة بشكل افتراضي، لأن إشعارات الدفع على iOS يتم التعامل معها بواسطة نظام التشغيل (OS)، وليس بواسطة Pushwoosh SDK. يمكنك إضافة تتبع التسليم عن طريق إضافة ملحق خدمة الإشعارات (Notification Service Extension) إلى مشروعك. توضح هذه الصفحة كيفية تنفيذ تتبع تسليم الرسائل لتطبيقات iOS.
إضافة ملحق خدمة الإشعارات
Anchor link to-
في Xcode، اختر File > New > Target…
-
اختر Notification Service Extension واضغط على Next.
- أدخل اسم المنتج واضغط على Finish.
- اضغط على Cancel في نافذة Activate scheme.
بالإلغاء، فإنك تبقي Xcode يقوم بتصحيح أخطاء تطبيقك بدلاً من الملحق الذي أنشأته للتو. إذا قمت بتنشيطه عن طريق الخطأ، يمكنك العودة إلى تصحيح أخطاء تطبيقك داخل Xcode.
الاعتماديات لملحق خدمة الإشعارات (CocoaPods فقط)
Anchor link toإذا كنت تستخدم Swift Package Manager لإدارة الاعتماديات، يمكنك تخطي هذه الخطوة، حيث تتم إضافة الاعتماديات تلقائيًا.
افتح ملف Podfile الخاص بك وأضف الاعتمادية للهدف:
target 'NotificationServiceExtension' do use_frameworks! pod 'PushwooshXCFramework'endقم بتشغيل الأوامر التالية في الطرفية لتثبيت الاعتماديات:
rm -rf Podfile.lockpod deintegratepod setuppod repo updatepod installإضافة كود لتتبع أحداث تسليم الرسائل
Anchor link toاجعل ملحقك فئة فرعية من PushwooshNotificationServiceExtension. فئة فرعية فارغة كافية: يقوم Pushwoosh بإرسال حدث تسليم الرسالة، وتعيين الشارة، وتنزيل المرفقات الوسائط، والتعامل مع الحل الاحتياطي لانتهاء المهلة تلقائيًا.
استبدل المحتويات التي تم إنشاؤها لملف NotificationService الخاص بك:
import UserNotificationsimport PushwooshFramework
class NotificationService: PushwooshNotificationServiceExtension {}#import <PushwooshFramework/PushwooshNotificationServiceExtension.h>
@interface NotificationService : PushwooshNotificationServiceExtension
@end
@implementation NotificationService
@endمعرّف التطبيق (App ID)
Anchor link toمنذ الإصدار 7.1.0، يرث الملحق Pushwoosh_APPID (والمفاتيح الأخرى التي تبدأ بـ Pushwoosh_*) من Info.plist الخاص بالتطبيق المضيف، لذا لم تعد بحاجة إلى تكراره في الملحق. أضف Pushwoosh_APPID إلى Info.plist الخاص بالملحق فقط عندما تريد تجاوز قيمة المضيف:
<key>Pushwoosh_APPID</key><string>XXXXX-XXXXX</string>مجموعة التطبيقات (App Group) (الشارة والبروكسي العكسي)
Anchor link toمجموعة التطبيقات (App Group) المشتركة بين التطبيق والملحق ضرورية لمزامنة عدد الشارات وقراءة إعدادات البروكسي العكسي التي يخزنها التطبيق المضيف.
-
أضف إمكانية App Groups إلى هدف الملحق وقم بتمكين نفس المجموعة هناك كما في التطبيق المضيف. هذا مطلوب - بدون الحاوية المشتركة لا يمكن مزامنة عدد الشارات وإعدادات البروكسي العكسي.
-
قم بتوفير اسم مجموعة التطبيقات. مثل
Pushwoosh_APPID، يرث الملحقPW_APP_GROUPS_NAMEمن Info.plist الخاص بالتطبيق المضيف منذ الإصدار 7.1.0، لذا إذا قمت بتعيينه هناك بالفعل للشارات، فلن تحتاج إلى إضافته إلى الملحق. قم بتعيينه في Info.plist الخاص بالملحق فقط لتجاوز قيمة المضيف، أو قم بتوفيره برمجيًا عن طريق تجاوزpushwooshAppGroupsName.
<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 UserNotificationsimport PushwooshFramework
class NotificationService: UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { PWNotificationExtensionManager.sharedManager() .handleNotificationRequest(request, contentHandler: contentHandler) }}#import "PWNotificationExtensionManager.h"
@interface NotificationService : UNNotificationServiceExtension
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *))contentHandler { [[PWNotificationExtensionManager sharedManager] handleNotificationRequest:request contentHandler:contentHandler];}
@endشاركنا ملاحظاتك
Anchor link toتساعدنا ملاحظاتك في إنشاء تجربة أفضل، لذلك نود أن نسمع منك إذا كان لديك أي مشاكل أثناء عملية تكامل SDK. إذا واجهت أي صعوبات، فلا تتردد في مشاركة أفكارك معنا عبر هذا النموذج.