ظل الناس يستبدلون المحتوى بالأحدث منذ عام 1938. تصوير Central Press لـ Getty Images.

كيفية استبدال محتوى إشعار iOS

الاستفادة القصوى من ميزات الإشعارات الجديدة لنظام iOS 10.

عادةً ما كانت إعلامات نظام التشغيل iOS غير قابلة للمس. بمجرد إرسال واحد ، سيعيش على هاتف المستخدم حتى ينتقده بعيدًا. ولكن منذ إصدار نظام التشغيل iOS 10 ، منحتنا واجهات برمجة التطبيقات الجديدة مزيدًا من التحكم في الإشعارات بعد نشرها ، بما في ذلك القدرة على استبدال محتوى الإشعار الحالي. استخدمناها للحفاظ على إعلامات التنصيب المباشر للفيديو لدينا محدثة ، مع نفس المبدأ الذي استخدمناه مع إشعارات الويب لتقديم نتائج الانتخابات. لسوء الحظ ، فإن تطبيق نظام التشغيل iOS ليس بالأمر السهل ، لذا إليك نظرة عامة سريعة على كيفية القيام بذلك:

الطريق السهل

إذا كنت محظوظًا بما يكفي لتشغيل خدمة الدفع الخاصة بك ، أو كنت تستخدم خدمة تنفذ واجهة برمجة تطبيقات HTTP2 الجديدة نسبياً لإرسال الإشعارات ، فأنت محظوظ. هناك سمة جديدة يمكنك إرسالها كجزء من حمولة الدفع التي تسمى "apns-طي-id". عندما يتلقى جهاز iOS هذا الإشعار ، فإنه يستبدل أي إشعار موجود بمعرف الانهيار الذي يظهر حاليًا في درج إعلام المستخدم (بالنسبة لأولئك منكم الذين انخرطوا في واجهة برمجة تطبيقات الإشعارات على الويب ، فهذا يعادل إلى حد ما سمة العلامات المستخدمة هناك). لذلك ، كل ما عليك القيام به هو إنشاء معرف فريد لكل تنبيه ترسله ، ثم ، إذا كنت تريد استبداله ، أرسل إشعارًا آخر باستخدام نفس المعرف ، والذي سيحل محله.

هناك مشكلة كبيرة واحدة هنا ، على الرغم من ذلك: لم يطبق العديد من مزودي الإشعارات بالدفع هذه الوظيفة الجديدة. عندما راجعت آخر مرة ، لا تدعم خدمة SNS من Amazon أو Google Firebase Cloud Messaging ذلك. لذلك إذا لم تتمكن من تنفيذ معرفات سلاسل الرسائل ، فأنت بحاجة إلى إضافة بعض الرموز الإضافية إلى تطبيقك.

تحديث: Firebase Cloud Messaging الآن يدعم apns-طي-id. بفضل دان ترينز لتوضيح ذلك.

الطريقة الصعبة: ملحقات خدمة الإشعارات

طرحت شركة Apple فئة جديدة من امتداد التطبيق في نظام التشغيل iOS 10 تسمى ملحق خدمة الإشعارات. إنه جزء صغير من الشفرة يتم تشغيله قبل أن يعرض الهاتف إشعارًا قمت بإرساله مباشرة ، وهو يتيح لك تخصيص محتوى هذا الإشعار قبل أن يراه المستخدم. يُقصد به في المقام الأول استخدامه في إرفاق صور أو مقاطع فيديو بإشعار ، لكنه يتيح لك أيضًا تغيير معظم سمات الإشعار قبل عرضه. لسوء الحظ ، لا تسمح لك * بتخصيص معرف سلسلة الرسائل ، ولكن يمكننا محاكاة هذا السلوك.

عندما نرسل إشعارًا ، يمكننا إرفاق معرفنا المخصص بحمولة البيانات (شيء تدعمه جميع خدمات الدفع *). ثم ، عند بدء تشغيل خدمة الإشعارات لدينا ، احصل على هذا المعرف:

فئة خدمات الإعلام: UNNotificationServiceExtension {
    
    تجاوز func didReceive (
        _طلب: UNNotificationRequest ،
        withContentHandler contentHandler:
            escaping (UNNotificationContent) -> الفراغ)
    {
        
        اسمح لـ userInfo = request.content.userInfo
        دع customID = userInfo ["معرف هوية الحمولة"]؟ خيط
        
    }
}

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

دع customID = userInfo ["معرف هوية الحمولة"]؟ خيط
UNUserNotificationCenter.current ()
.getDeliveredNotifications {notifications in
    اسمح للتطابق = notifications.first (حيث: {يخطر في
        اسمح لـ userUserInfo = notify.request.content.userInfo
        واسمحوا id = OllieUserInfo ["id-payload-id"]؟ خيط
        معرف الإرجاع == customID
    })
    
}

وإذا كان موجودًا ، قم بإزالته:

إذا سمحت matchExists = مطابقة {
    UNUserNotificationCenter.current (). removeDeliveredNotifications (
        withIdentifiers: [matchExists.request.identifier]
    )
}

يستبدل الحل المستند إلى معرف الانهيار فورًا ، بينما يظهر الاختراق المحلي لدينا بوضوح في اختفاء الإشعار ثم إعادة الظهور:

ولكن كل الأشياء في الاعتبار ، وأنها تعمل بشكل جيد.

الخطوات التالية

من الناحية المثالية ، لن يتعين علينا القيام بأي من هذا. أظن أن مزودي خدمة الدفع لم يقوموا بتطبيق حقل معرف apns-وانهيار لأنه يتطلب منك استخدام HTTP2 API ، مما يعني أنه سيتعين عليهم إعادة هندسة مكدسات رسائل الدفع بالكامل ، وسيستغرق ذلك بعض الوقت . لذا ، يمكن لشركة Apple أن تتيح معرف الانهيار عبر واجهة برمجة التطبيقات القديمة الخاصة بهم ، أو قد تسمح لنا بتخصيص معرف الانهيار كجزء من امتداد خدمة الإشعارات. ما زلنا بحاجة إلى رمز محلي إضافي ، لكننا على الأقل سنقوم بعمل الأشياء بالطريقة التي من المفترض القيام بها.

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

يعمل مختبر Guardian Mobile Innovation Lab بدعم سخي من مؤسسة John S. و James L. Knight Foundation.