إعداد تطبيق عميل "المراسلة عبر السحابة الإلكترونية من Firebase" على أنظمة Apple الأساسية

بالنسبة إلى تطبيقات عملاء Apple، يمكنك تلقّي الإشعارات وحمولات البيانات التي يصل حجمها إلى 4096 بايت من خلال واجهة أسماء نقاط الوصول (APN) لخدمة "المراسلة عبر السحابة الإلكترونية من Firebase".

لكتابة رمز العميل بلغة Objective-C أو Swift، ننصحك باستخدام FIRMessaging API. يوفر مثال البدء السريع نموذجًا للتعليمات البرمجية لكلتا اللغتين.

تبديل الطريقة في "المراسلة عبر السحابة الإلكترونية من Firebase"

إذًا، تعمل حزمة تطوير البرامج (SDK) للمراسلة عبر السحابة الإلكترونية من Firebase على تنفيذ الإجراءات المطلوبة في مجالَين أساسيَّين: ربط رمز أسماء نقطة الوصول المميز (APN) بالرمز المميّز للتسجيل في خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" والتقاط بيانات الإحصاءات أثناء معالجة معاودة الاتصال للرسائل. يمكن للمطوّرين الذين يفضّلون عدم استخدام تأثير التحوّل إيقاف هذه الميزة عن طريق إضافة العلامة FirebaseAppDelegateProxyEnabled في ملف Info.plist الخاص بالتطبيق وضبطها على "لا" (قيمة منطقية). توفر المناطق ذات الصلة في الأدلة أمثلة على التعليمات البرمجية، مع تفعيل أو عدم تفعيل تبديل الطريقة.

إضافة Firebase إلى مشروعك على Apple

أضِف Firebase إلى مشروع Apple، إذا لم يسبق لك إجراء ذلك.

تحميل مفتاح مصادقة أسماء نقاط الوصول (APN)

حمِّل مفتاح مصادقة أسماء نقاط الوصول إلى Firebase. إذا لم يكن لديك مفتاح مصادقة باستخدام أسماء نقاط الوصول (APN) مسبقًا، احرص على إنشاء مفتاح في مركز أعضاء مطوّري برامج Apple.

  1. داخل مشروعك في وحدة تحكُّم Firebase، انقر على رمز الترس واختَر إعدادات المشروع ثم اختَر علامة التبويب المراسلة عبر السحابة الإلكترونية.

  2. في مفتاح مصادقة أسماء نقاط الوصول (APN) ضمن إعدادات تطبيق iOS، انقر على الزر تحميل.

  3. انتقِل إلى المكان الذي حفظت فيه مفتاحك، واختَره وانقر على فتح. أضِف رقم تعريف المفتاح الخاص بالمفتاح (المتوفّر في مركز أعضاء مطوّري برامج Apple) وانقر على تحميل.

التسجيل لتلقّي الإشعارات عن بُعد

عند بدء التشغيل أو عند المرحلة المطلوبة ضمن مسار تطبيقك، سجِّل تطبيقك لتلقّي الإشعارات عن بُعد. طلب 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) للمراسلة عبر السحابة الإلكترونية من Firebase رمزًا مميزًا للتسجيل لمثيل تطبيق العميل عند تشغيل التطبيق. وشأنها شأن الرموز المميزة للأجهزة التي تستخدم أسماء نقاط الوصول (APN)، يسمح لك هذا الرمز المميّز بإرسال إشعارات مستهدَفة إلى أيّ مثيل معيّن من تطبيقك.

بالطريقة نفسها التي ترسل بها منصات Apple عادةً الرمز المميز للجهاز الذي يستخدم أسماء نقاط الوصول (APN) عند بدء تشغيل التطبيق، توفِّر خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" رمزًا مميزًا للتسجيل من خلال طريقة messaging:didReceiveRegistrationToken: في FIRMessagingDelegate. تسترد حزمة تطوير البرامج (SDK) في خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" رمزًا مميّزًا جديدًا أو حاليًا أثناء التشغيل الأولي للتطبيق، وعند تعديل الرمز المميّز أو إبطاله. في جميع الحالات، تستدعي حزمة تطوير البرامج (SDK) للمراسلة عبر السحابة الإلكترونية من Firebase messaging:didReceiveRegistrationToken: باستخدام رمز مميّز صالح.

قد يتغير الرمز المميّز للتسجيل في الحالتَين التاليتَين:

  • تتم استعادة التطبيق على جهاز جديد.
  • إلغاء تثبيت المستخدم للتطبيق أو إعادة تثبيته
  • يمحو المستخدم بيانات التطبيق.

ضبط تفويض المراسلة

لتلقّي الرموز المميّزة للتسجيل، عليك تنفيذ بروتوكول تفويض المراسلة وضبط السمة delegate في FIRMessaging بعد طلب [FIRApp configure]. على سبيل المثال، إذا كان التفويض المفوَّض بتطبيقك متوافقًا مع بروتوكول تفويض المراسلة، يمكنك ضبط التفويض على application:didFinishLaunchingWithOptions: لنفسه.

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

جارٍ استرجاع الرمز المميّز للتسجيل الحالي

ويتم تسليم رموز التسجيل المميَّزة باستخدام الطريقة messaging:didReceiveRegistrationToken:. وتُسمى هذه الطريقة بشكل عام مرة واحدة لكل تطبيق يتم فيه بدء استخدام الرمز المميّز للتسجيل. عند استدعاء هذه الطريقة، يكون الوقت مثاليًا للقيام بما يلي:

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

يمكنك استرداد الرمز المميّز مباشرةً باستخدام الرمز المميّز(إكمال:). يتم تقديم خطأ غير فارغ في حالة فشل استرداد الرمز المميز بأي شكل من الأشكال.

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 بدلاً من توفير طريقة التفويض. تحتوي سمة الرمز المميّز دائمًا على القيمة الحالية للرمز المميّز.

التحويل غير مفعّل: تعيين الرمز المميز لأسماء APN والرمز المميز للتسجيل

في حال إيقاف تبديل الطريقة أو في حال إنشاء تطبيق SwiftUI، عليك ربط رمز أسماء نقطة الوصول (APN) بوضوح بالرمز المميّز للتسجيل في خدمة "المراسلة عبر السحابة الإلكترونية من Firebase". يمكنك تنفيذ طريقة application(_:didRegisterForRemoteNotificationsWithDeviceToken:) لاسترداد الرموز المميزة لنقاط الوصول (APN)، ثم ضبط سمة 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;
}

بعد إنشاء الرمز المميّز للتسجيل في "المراسلة عبر السحابة الإلكترونية من Firebase"، يمكنك الوصول إليه والاستماع إلى أحداث إعادة التحميل باستخدام الطرق نفسها التي تم بها تفعيل التحويل السريع.

منع الإعداد التلقائي

عند إنشاء رمز مميّز لتسجيل خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"، تحمِّل المكتبة بيانات المعرّف والإعدادات إلى Firebase. إذا كنت ترغب في الحصول على موافقة صريحة من المستخدمين أولاً، يمكنك منع إنشاء الرمز المميز في وقت التهيئة عن طريق تعطيل خدمة "المراسلة عبر السحابة الإلكترونية من Firebase". لإجراء ذلك، أضِف قيمة بيانات وصفية إلى Info.plist (وليس إلى GoogleService-Info.plist):

FirebaseMessagingAutoInitEnabled = NO

لإعادة تفعيل ميزة "المراسلة عبر السحابة الإلكترونية من Firebase"، يمكنك إجراء مكالمة في وقت التشغيل:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

وتستمر هذه القيمة في جميع عمليات إعادة تشغيل التطبيق بعد ضبطها.

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

بعد إعداد برنامج Apple، تصبح جاهزًا لإضافة طريقة معالجة الرسائل وغيرها من السلوكيات الأكثر تقدمًا إلى تطبيقك. يمكنك الاطّلاع على هذه الأدلة للحصول على مزيد من المعلومات: