بالنسبة إلى تطبيقات Apple العميلة، يمكنك تلقّي حمولات الإشعارات والبيانات التي يصل حجمها إلى 4096 بايت عبر واجهة Firebase Cloud Messaging APNs.
لكتابة رمز العميل في Objective-C أو Swift، ننصحك باستخدام FIRMessaging API. يقدّم مثال البدء السريع رمزًا نموذجيًا لكلتا اللغتَين.
تغيير وظيفة الإجراء في Firebase Cloud Messaging
تُجري حزمة تطوير البرامج (SDK) لنظام التشغيل FCM عملية تبديل الأساليب في مجالَين رئيسيَّين:
ربط رمز APNs المميّز
برمز تسجيل FCM وتسجيل بيانات الإحصاءات أثناء
معالجة طلب استدعاء الرسائل من جهة العميل.
يمكن للمطوّرين الذين يفضّلون عدم استخدام ميزة "تبديل الرموز البرمجية"
إيقافها عن طريق إضافة العلامة FirebaseAppDelegateProxyEnabled
فيملف
Info.plist الخاص بالتطبيق وضبطها على "لا" (قيمة منطقية). تقدّم الأقسام ذات الصلة في الأدلة مثالاً على
الرمز البرمجي، سواء كان مزوّدًا بميزة تبديل الطريقة أم لا.
إضافة Firebase إلى مشروع Apple الخاص بك
أضِف Firebase إلى مشروع Apple الخاص بك، في حال لم يسبق لك إجراء ذلك.
تحميل مفتاح مصادقة APNs
حمِّل مفتاح مصادقة APNs إلى Firebase. إذا لم يكن لديك مفتاح مصادقة APNs، احرص على إنشاء مفتاح في Apple Developer Member Center.
-
داخل مشروعك في وحدة تحكّم Firebase، انقر على رمز الترس، ثم على إعدادات المشروع، ثم على علامة التبويب الرسائل عبر السحابة الإلكترونية.
-
في مفتاح مصادقة APNs ضمن إعدادات تطبيق iOS، انقر على الزر تحميل.
-
انتقِل إلى المكان الذي حفظت فيه مفتاحك، واختَره، ثم انقر على فتح. أضِف معرّف المفتاح (متاحًا في Apple Developer Member Center) وانقر على تحميل.
التسجيل لتلقّي إشعارات عن بُعد
عند بدء التشغيل أو عند النقطة المطلوبة في مسار تطبيقك، سجِّل تطبيقك للإشعارات عن بُعد. استخدِمregisterForRemoteNotifications
كما هو موضّح:
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 عند بدء تشغيل التطبيق، توفّر FIRMessagingDelegate
رمزًا مميزًا للتسجيل من خلال messaging:didReceiveRegistrationToken:
.
تسترجع حزمة تطوير البرامج (SDK) لميزة "المراسلة عبر السحابة الإلكترونية من Firebase" رمزًا مميّزًا جديدًا أو حاليًا أثناء التشغيل الأولي للتطبيق،
وكلما تم تعديل الرمز المميّز أو إبطاله.
في جميع الحالات، تستدعي حزمة تطوير البرامج (SDK) لنظام "إرسال الرسائل الفورية من Google" 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:)
ل retrieving APNs token، ثم اضبط سمة 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، يمكنك الوصول إليه والاستماع إلى أحداث إعادة التحميل باستخدام الطرق نفسها المستخدَمة عند تفعيل ميزة تبديل التطبيقات.
منع الإعداد التلقائي
عند إنشاء رمز تسجيل FCM، تحمِّل المكتبة
معرّف بيانات الضبط إلى Firebase. إذا كنت تريد الحصول على موافقة صريحة
من المستخدمين أولاً، يمكنك منع إنشاء الرمز المميّز في وقت الضبط من خلال
إيقاف ميزة "المراسلة عبر السحابة الإلكترونية من Firebase". لإجراء ذلك، أضِف قيمة بيانات وصفية إلى Info.plist
(وليس
GoogleService-Info.plist
):
FirebaseMessagingAutoInitEnabled = NO
لإعادة تفعيل "خدمة إرسال الرسائل إلى الأجهزة الجوّالة من Google"، يمكنك إجراء مكالمة وقت التشغيل:
Swift
Messaging.messaging().autoInitEnabled = true
Objective-C
[FIRMessaging messaging].autoInitEnabled = YES;
تظل هذه القيمة محفوظة عند إعادة تشغيل التطبيق بعد ضبطها.
الخطوات التالية
بعد إعداد عميل Apple، ستكون مستعدًا لإضافة معالجة الرسائل وغيرها من السلوكيات الأكثر تقدمًا إلى تطبيقك. اطّلِع على الأدلة التالية للحصول على مزيد من المعلومات: