بالنسبة إلى تطبيقات عميل Apple، يمكنك تلقّي إشعارات وحِزم بيانات يصل حجمها إلى 4096 بايت عبر واجهة Firebase Cloud Messaging APNs.
لكتابة رمز العميل بلغة Objective-C أو Swift، ننصحك باستخدام FIRMessaging API. يقدّم مثال البدء السريع رمزًا نموذجيًا لكلتا اللغتَين.
تغيير وظيفة الإجراء في Firebase Cloud Messaging
تنفِّذ حزمة تطوير البرامج (SDK) الخاصة بخدمة FCM عملية تبديل الطرق في مجالَين رئيسيَّين:
ربط رمز APNs المميز
برمز التسجيل الخاص بخدمة FCM، وتسجيل بيانات الإحصاءات أثناء
معالجة معاودة الاتصال بالرسائل الواردة.
يمكن للمطوّرين الذين يفضّلون عدم استخدام swizzling إيقافها من خلال إضافة العلامة FirebaseAppDelegateProxyEnabled
إلى ملف Info.plist الخاص بالتطبيق وضبطها على NO (قيمة منطقية). توفّر الأقسام ذات الصلة في الأدلة أمثلة على الرموز البرمجية، سواء كانت ميزة "تبديل الطرق" مفعّلة أم لا.
إضافة Firebase إلى مشروع Apple
أضِف Firebase إلى مشروع Apple إذا لم يسبق لك إجراء ذلك.
تحميل مفتاح مصادقة APNs
حمِّل مفتاح مصادقة APNs إلى Firebase. إذا لم يكن لديك مفتاح مصادقة APNs، احرص على إنشاء مفتاح في مركز أعضاء مطوّري Apple.
-
داخل مشروعك في وحدة تحكّم Firebase، انقر على رمز الترس، ثم على إعدادات المشروع، ثم على علامة التبويب Cloud Messaging.
-
في مفتاح مصادقة APNs ضمن إعداد تطبيق iOS، انقر على زر تحميل.
-
انتقِل إلى الموقع الذي حفظت فيه المفتاح، واختَره، ثم انقر على فتح. أضِف معرّف المفتاح (المتوفّر في Apple Developer Member Center) وانقر على تحميل.
التسجيل لتلقّي إشعارات عن بُعد
إما عند بدء التشغيل أو في النقطة المطلوبة في مسار تطبيقك، سجِّل تطبيقك لتلقّي الإشعارات عن بُعد. استخدِم CallregisterForRemoteNotifications
كما هو موضّح أدناه:
Swift
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
Objective-C
[UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; [application registerForRemoteNotifications];
الوصول إلى رمز التسجيل
تنشئ حزمة تطوير البرامج (SDK) FCM تلقائيًا رمز تسجيل لمثيل تطبيق العميل عند تشغيل التطبيق. ومثل رمز APNs المميز للجهاز، يتيح لك هذا الرمز المميز إرسال إشعارات مستهدَفة إلى أي مثيل معيّن من تطبيقك.
وبالطريقة نفسها التي توفّر بها منصات Apple عادةً رمزًا مميزًا للجهاز في خدمة APNs عند بدء تشغيل التطبيق، توفّر خدمة FCM رمز تسجيل من خلال طريقة FIRMessagingDelegate
messaging:didReceiveRegistrationToken:
.
تستردّ حزمة تطوير البرامج (SDK) الخاصة بميزة "المراسلة عبر السحابة الإلكترونية من Firebase" رمزًا مميزًا جديدًا أو حاليًا أثناء تشغيل التطبيق الأوّلي وكلما تم تعديل الرمز المميز أو إبطاله.
في جميع الحالات، يستدعي حزمة تطوير البرامج (SDK) لخدمة FCM الدالة messaging:didReceiveRegistrationToken:
مع رمز مميّز صالح.
قد يتغيّر رمز التسجيل في الحالات التالية:
- تمت استعادة التطبيق على جهاز جديد
- يلغي المستخدم تثبيت التطبيق أو يعيد تثبيته
- يمحو المستخدم بيانات التطبيق.
ضبط حساب المفوّض للمراسلة
لتلقّي رموز التسجيل، عليك تنفيذ بروتوكول تفويض المراسلة وضبط السمة delegate
الخاصة بـ FIRMessaging
بعد استدعاء [FIRApp configure]
.
على سبيل المثال، إذا كان وكيل تطبيقك يتوافق مع بروتوكول وكيل المراسلة، يمكنك ضبط الوكيل على application:didFinishLaunchingWithOptions:
ليكون هو نفسه.
Swift
Messaging.messaging().delegate = self
Objective-C
[FIRMessaging messaging].delegate = self;
جلب رمز التسجيل الحالي
يتم تسليم رموز التسجيل المميَّزة من خلال الطريقة
messaging:didReceiveRegistrationToken:
. يتم استدعاء هذه الطريقة بشكل عام مرة واحدة لكل عملية بدء تشغيل التطبيق باستخدام رمز التسجيل المميز. عند استدعاء هذه الطريقة، يكون الوقت مثاليًا لإجراء ما يلي:
- إذا كان رمز التسجيل جديدًا، أرسِله إلى خادم تطبيقك.
- الاشتراك في المواضيع باستخدام رمز التسجيل المميز هذه السمة مطلوبة فقط للاشتراكات الجديدة أو في الحالات التي أعاد فيها المستخدم تثبيت التطبيق.
يمكنك استرداد الرمز المميّز مباشرةً باستخدام token(completion:). يتم تقديم خطأ غير فارغ إذا تعذّر استرداد الرمز المميّز بأي شكل من الأشكال.
Swift
Messaging.messaging().token { token, error in if let error = error { print("Error fetching FCM registration token: \(error)") } else if let token = token { print("FCM registration token: \(token)") self.fcmRegTokenMessage.text = "Remote FCM registration token: \(token)" } }
Objective-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) { if (error != nil) { NSLog(@"Error getting FCM registration token: %@", error); } else { NSLog(@"FCM registration token: %@", token); self.fcmRegTokenMessage.text = token; } }];
يمكنك استخدام هذه الطريقة في أي وقت للوصول إلى الرمز المميّز بدلاً من تخزينه.
مراقبة إعادة تحميل الرمز المميز
لتلقّي إشعار كلما تم تعديل الرمز المميّز، عليك تقديم عنصر نائب يتوافق مع بروتوكول عنصر نائب المراسلة. يسجّل المثال التالي المفوّض ويضيف طريقة المفوّض المناسبة:
Swift
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { print("Firebase registration token: \(String(describing: fcmToken))") let dataDict: [String: String] = ["token": fcmToken ?? ""] NotificationCenter.default.post( name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict ) // TODO: If necessary send token to application server. // Note: This callback is fired at each app startup and whenever a new token is generated. }
Objective-C
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken { NSLog(@"FCM registration token: %@", fcmToken); // Notify about received token. NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"]; [[NSNotificationCenter defaultCenter] postNotificationName: @"FCMToken" object:nil userInfo:dataDict]; // TODO: If necessary send token to application server. // Note: This callback is fired at each app startup and whenever a new token is generated. }
بدلاً من ذلك، يمكنك الاستماع إلى حدث NSNotification
باسم
kFIRMessagingRegistrationTokenRefreshNotification
بدلاً من توفير طريقة تفويض. تحتوي سمة الرمز المميّز دائمًا على قيمة الرمز المميّز الحالية.
تم إيقاف عملية استبدال الرمز: ربط الرمز المميز لخدمة APNs بالرمز المميز للتسجيل
إذا كنت قد أوقفت ميزة "تبديل الطرق" أو كنت بصدد إنشاء تطبيق SwiftUI، عليك ربط رمز APNs المميز بشكل صريح برمز التسجيل FCM. نفِّذ طريقة
application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
لاسترداد رمز APNs المميّز، ثم اضبط السمة apnsToken
الخاصة بـ Messaging
على النحو التالي:
Swift
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
Objective-C
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
بعد إنشاء رمز التسجيل FCM، يمكنك الوصول إليه والاستماع إلى أحداث إعادة التحميل باستخدام الطرق نفسها كما هو الحال عند تفعيل swizzling.
منع بدء التشغيل التلقائي
عند إنشاء رمز تسجيل FCM، تحمّل المكتبة المعرّف وبيانات الإعداد إلى Firebase. إذا كنت تريد الحصول على موافقة صريحة من المستخدمين أولاً، يمكنك منع إنشاء الرموز المميزة في وقت الإعداد عن طريق إيقاف ميزة "المراسلة عبر السحابة الإلكترونية من Firebase". لإجراء ذلك، أضِف قيمة بيانات وصفية إلى Info.plist
(وليس إلى GoogleService-Info.plist
):
FirebaseMessagingAutoInitEnabled = NO
لإعادة تفعيل FCM، يمكنك إجراء عملية استدعاء وقت التشغيل:
Swift
Messaging.messaging().autoInitEnabled = true
Objective-C
[FIRMessaging messaging].autoInitEnabled = YES;
تظل هذه القيمة محفوظة عند إعادة تشغيل التطبيق بعد ضبطها.
الخطوات التالية
بعد إعداد تطبيق Apple، يمكنك إضافة معالجة الرسائل وغيرها من السلوكيات الأكثر تقدّمًا إلى تطبيقك. راجِع الأدلة التالية للحصول على مزيد من المعلومات: