הודעות סטנדרטיות—רק כותרת וטקסט. לקוחות מתלוננים שהן מתעלמות מהן. אנו מיישמים Rich Push: תמונות, כפתורי פעולה, לפעמים וידאו. ב-iOS, זה דורש Notification Service Extension; באנדרואיד, BigPictureStyle. הניסיון שלנו מראה שהודעות כאלה מעלות את שיעור ההקלקות (CTR) ב-40% ואת המעורבות בעד 70%. להלן אנו מכסים את שתי הגישות עם דוגמאות אמיתיות.
כיצד להגדיר Rich Push ב-iOS?
ללא NSE, תמונות בהודעות push ב-iOS לא יעבדו. NSE הוא יעד נפרד ב-Xcode שמיירט את ההודעה לפני הצגתה. הוא מוריד מדיה ומצרף אותה כ-UNNotificationAttachment. אנו מבטיחים תאימות לגרסאות ה-iOS העדכניות ביותר.
// NotificationService.swift
class NotificationService: UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
let content = request.content.mutableCopy() as! UNMutableNotificationContent
guard let urlString = content.userInfo["image_url"] as? String, let url = URL(string: urlString) else {
contentHandler(content)
return
}
downloadImage(from: url) { localURL in
if let localURL, let attachment = try? UNNotificationAttachment(identifier: "image", url: localURL) {
content.attachments = [attachment]
}
contentHandler(content)
}
}
private func downloadImage(from url: URL, completion: @escaping (URL?) -> Void) {
URLSession.shared.downloadTask(with: url) { tempURL, _, _ in
completion(tempURL)
}.resume()
}
}ל-NSE יש מגבלת זמן ריצה של כ-30 שניות. אם המדיה לא מורדת, iOS מציג את ההודעה ללא תמונה. אנו מייעלים מדיה: גודל עד 1 MB, פורמט JPEG או PNG. לפי תיעוד Apple, חריגה מהמגבלה מסתירה את התמונה.
כפתורי פעולה ב-iOS. רשום קטגוריות בעת השקת האפליקציה:
let likeAction = UNNotificationAction(identifier: "LIKE", title: "Лайк", options: [])
let replyAction = UNNotificationAction(identifier: "REPLY", title: "Ответить", options: [.foreground])
let category = UNNotificationCategory(identifier: "POST_CATEGORY", actions: [likeAction, replyAction], intentIdentifiers: [])
UNUserNotificationCenter.current().setNotificationCategories([category])במטען ההודעה, כלול // NotificationService.swift class NotificationService: UNNotificationServiceExtension { override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { let content = request.content.mutableCopy() as! UNMutableNotificationContent guard let urlString = content.userInfo["image_url"] as? String, let url = URL(string: urlString) else { contentHandler(content) return } downloadImage(from: url) { localURL in if let localURL, let attachment = try? UNNotificationAttachment(identifier: "image", url: localURL) { content.attachments = [attachment] } contentHandler(content) } } private func downloadImage(from url: URL, completion: @escaping (URL?) -> Void) { URLSession.shared.downloadTask(with: url) { tempURL, _, _ in completion(tempURL) }.resume() } } — iOS יציג את הכפתורים. טפל בהקלקות:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
switch response.actionIdentifier {
case "LIKE":
likePost(id: response.notification.request.content.userInfo["post_id"] as? String)
case "REPLY":
openReplyScreen(for: response.notification.request.content.userInfo)
default:
break
}
completionHandler()
} מדוע Data Message עדיפה על Notification Message באנדרואיד?
באנדרואיד, ממשק משתמש מותאם אישית באופן טבעי:
val bitmap = BitmapFactory.decodeStream(
URL(imageUrl).openConnection().getInputStream()
)
val notification = NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle(title)
.setContentText(body)
.setStyle(
NotificationCompat.BigPictureStyle()
.bigPicture(bitmap)
.setSummaryText(body)
)
.addAction(
R.drawable.ic_like,
"Лайк",
getLikePendingIntent(postId)
)
.addAction(
R.drawable.ic_reply,
"Ответить",
getReplyPendingIntent(postId)
)
.build()טעינת bitmap לא צריכה להיות על ה-main thread. השתמש ב-Glide או WorkManager. FCM Data Message היא הגישה הנכונה, כי Notification Message מטופלת על ידי המערכת ללא קריאה לקוד שלך. Data Message תמיד מגיעה ל-onMessageReceived. בפרויקטים אמיתיים, Data Message אמינה יותר: כשהאפליקציה נסגרת, Notification Message לא מבטיחה הצגת תמונה, אבל Data Message כן.
פורמטי מדיה
| פלטפורמה | תמונה | וידאו | GIF |
|---|---|---|---|
| iOS NSE | JPEG, PNG, GIF (תצוגה מקדימה), HEIC | MP4 (עד 50 MB) | לא נתמך באופן טבעי |
| אנדרואיד | JPEG, PNG | לא נתמך | לא נתמך באופן טבעי |
מדריך אינטגרציה שלב אחר שלב
- הערכת ארכיטקטורת push — קבע אם נעשה שימוש ב-FCM או בשירות צד שלישי.
- עיצוב קטגוריות ומטען — הגדר סוגי הודעות, כפתורי פעולה, שדות מדיה.
- יישם NSE ב-iOS — צור יעד, הוסף קוד הורדה וקובץ מצורף.
- יישם BigPictureStyle באנדרואיד — הגדר Data Message, השתמש ב-NotificationCompat.
- בדוק על מכשירים אמיתיים — ודא את כל התרחישים (אפליקציה פעילה/ברקע/סגורה).
- פריסה וניטור — פרסם לחנויות, עקוב אחר הקלקות.
ציר זמן ומה כלול
| שלב | תיאור | משך |
|---|---|---|
| אנליטיקה | הערכת ארכיטקטורת push הנוכחית, בחירת גישה | יום אחד |
| עיצוב | יצירת סכמת קטגוריות, מטען, עיצוב מדיה | 1–2 ימים |
| יישום | כתיבת NSE, BigPictureStyle, כפתורי פעולה, מטפלים | 2–3 ימים |
| בדיקות | בדיקה על מכשירים אמיתיים, תרחישי שגיאה | יום אחד |
| פריסה | פרסום ל-App Store/Google Play, ניטור | 0.5 יום |
כלול: הגדרת NSE, רישום קטגוריות וטיפול בהקלקות ב-iOS; אינטגרציה של FCM Data Message ו-BigPictureStyle באנדרואיד; בדיקות בשתי הפלטפורמות; תיעוד. לא כלול: Notification Content Extension מותאם אישית ואנליטיקה—נדון בנפרד. התמחור נקבע לאחר ניתוח הפרויקט שלך.
טעויות נפוצות
- OneSignal ו-NSE. אם אתה משתמש ב-OneSignal, הוסף את היעד OneSignalNotificationServiceExtension ל-App Groups. אחרת תמונות לא יופיעו ללא יומני שגיאה.
- מטען כפול באנדרואיד. שימוש בשדות notification ו-data גם יחד ב-FCM כשהאפליקציה סגורה גורם לכך ש-onMessageReceived לא ייקרא. השתמש רק במטען data.
- גודל מדיה. ב-iOS, מדיה מעל 1 MB עלולה לא להוריד תוך 30 שניות. באנדרואיד, תמונות גדולות גורמות ל-OutOfMemoryError. בצע אופטימיזציה ל-500 KB.
למה לבטוח בנו
יש לנו שנים רבות של ניסיון בפיתוח מובייל והעברנו למעלה מ-30 פרויקטים עם הודעות push. אנו מבטיחים תאימות לגרסאות ה-iOS והאנדרואיד העדכניות ביותר, ועמידה בהנחיות הבדיקה של App Store. אנו מתמודדים עם עד 1000 הודעות בדקה ללא פגיעה בביצועים. בקש אינטגרציית rich push לאפליקציה שלך—נכין הצעה תוך יום אחד. קבל ייעוץ לפרויקט שלך כדי להעריך חיסכון.
מקורות: UNNotificationServiceExtension — תיעוד מפתחי Apple, BigPictureStyle — מפתחי Android







