مقاطع التطبيق لـ iOS
تتيح مقاطع التطبيق (App Clips) للمستخدمين إكمال مهمة بسرعة دون تنزيل تطبيقك الكامل. مع Pushwoosh، يمكنك إرسال إشعارات لحظية لمستخدمي مقاطع التطبيق — يمنح iOS تلقائيًا وصولاً للإشعارات لمدة 8 ساعات عند فتح مقطع التطبيق.
ما الذي تحتاجه
Anchor link to- Pushwoosh iOS SDK 7.0.33+
- Xcode 15+
- تطبيق Pushwoosh منفصل لمقطع التطبيق الخاص بك (معرف حزمة مختلف = تطبيق منفصل)
- جهاز حقيقي للاختبار (رموز الإشعارات اللحظية لا تعمل على المحاكي)
1. إنشاء تطبيق Pushwoosh
Anchor link toمقطع التطبيق الخاص بك له معرف حزمة (bundle ID) مختلف (على سبيل المثال com.yourapp.Clip)، لذا فهو يحتاج إلى تطبيق Pushwoosh منفصل بمفتاح APNs الخاص به.
- اذهب إلى لوحة تحكم Pushwoosh
- أنشئ تطبيقًا جديدًا باستخدام معرف حزمة مقطع التطبيق
- حمّل مفتاح مصادقة APNs الخاص بك
- انسخ رمز التطبيق (Application Code) و رمز API (API Token)
2. إنشاء هدف (target) لمقطع التطبيق
Anchor link to- في Xcode: File → New → Target → App Clip
- أضف قدرة Push Notifications إلى هدف مقطع التطبيق
للحصول على لقطات شاشة مفصلة لإضافة القدرات، راجع دليل التكامل الأساسي.
3. إضافة أطر عمل Pushwoosh
Anchor link toفي هدف مقطع التطبيق، ضمن Build Phases → Link Binary With Libraries، أضف:
PushwooshFramework.frameworkPushwooshCore.frameworkPushwooshBridge.framework
4. تكوين Info.plist
Anchor link to<!-- Pushwoosh --><key>Pushwoosh_APPID</key><string>XXXXX-XXXXX</string><key>Pushwoosh_API_TOKEN</key><string>YOUR_API_TOKEN</string>
<!-- Ephemeral push (8-hour auto-grant, no dialog) --><key>NSAppClip</key><dict> <key>NSAppClipRequestEphemeralUserNotification</key> <true/> <key>NSAppClipRequestLocationConfirmation</key> <false/></dict>
<key>UIBackgroundModes</key><array> <string>remote-notification</string></array>5. تهيئة SDK
Anchor link toimport SwiftUIimport PushwooshFramework
class AppClipDelegate: NSObject, UIApplicationDelegate, PWMessagingDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool { Pushwoosh.configure.delegate = self Pushwoosh.configure.registerForPushNotifications() return true }
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Pushwoosh.configure.handlePushRegistration(deviceToken) }
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { Pushwoosh.configure.handlePushRegistrationFailure(error as NSError) }
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { Pushwoosh.configure.handlePushReceived(userInfo) completionHandler(.noData) }
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { print("Push opened: \(message.payload ?? [:])") }}
@mainstruct YourAppClip: App { @UIApplicationDelegateAdaptor(AppClipDelegate.self) var appDelegate
var body: some Scene { WindowGroup { ContentView() } }}import UIKitimport PushwooshFramework
@mainclass AppDelegate: UIResponder, UIApplicationDelegate, PWMessagingDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { Pushwoosh.configure.delegate = self Pushwoosh.configure.registerForPushNotifications() return true }
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Pushwoosh.configure.handlePushRegistration(deviceToken) }
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { Pushwoosh.configure.handlePushRegistrationFailure(error as NSError) }
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { Pushwoosh.configure.handlePushReceived(userInfo) completionHandler(.noData) }
func pushwoosh(_ pushwoosh: Pushwoosh, onMessageOpened message: PWMessage) { print("Push opened: \(message.payload ?? [:])") }}مع الأذونات المؤقتة، يمنح iOS الوصول إلى الإشعارات اللحظية لمدة 8 ساعات تلقائيًا. إذا كنت ترغب في استخدام الوضع المؤقت دون إظهار مربع حوار طلب الإذن، فاستدعِ UIApplication.shared.registerForRemoteNotifications() مباشرةً بدلاً من Pushwoosh.configure.registerForPushNotifications().
لطلب إذن دائم للإشعارات اللحظية (مربع الحوار القياسي)، استخدم Pushwoosh.configure.registerForPushNotifications() كما هو موضح أعلاه.
أذونات الإشعارات اللحظية المؤقتة
Anchor link toعندما يفتح المستخدم مقطع التطبيق الخاص بك، يمنح iOS الوصول إلى الإشعارات اللحظية لمدة 8 ساعات دون طلب. بعد 8 ساعات، تنتهي صلاحية الإذن. يجب على المستخدم إعادة فتح مقطع التطبيق للحصول على 8 ساعات أخرى.
للحصول على رمز إشعار لحظي لمدة 8 ساعات دون إظهار مربع حوار طلب الإذن:
UIApplication.shared.registerForRemoteNotifications()للحصول على رمز إشعار لحظي دائم (يعرض مربع حوار طلب الإذن القياسي):
Pushwoosh.configure.registerForPushNotifications()القيود
Anchor link to| القيد | التفاصيل |
|---|---|
| لا توجد إشعارات غنية | لا يمكن لمقاطع التطبيق تضمين ملحق خدمة الإشعارات (Notification Service Extension) — لا صور، لا إشعارات تواصل (Communication Notifications) |
| حد الحجم | 15 ميجابايت (iOS 16) / 50 ميجابايت (iOS 17+) |
| نافذة إشعارات لمدة 8 ساعات | تنتهي صلاحية الإذن المؤقت بعد 8 ساعات |
| لا توجد معالجة في الخلفية | الإشعارات الصامتة (Silent push) لها وظائف محدودة |
| معرف الجهاز (Device ID) | identifierForVendor يُرجع أصفارًا — يتعامل SDK مع هذا تلقائيًا (7.0.33+) |
كيف يبدو ذلك
Anchor link to
إشعار لحظي تم استلامه في مقطع تطبيق بأذونات مؤقتة