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

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

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

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

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

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

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

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

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

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

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

  3. انتقِل إلى الموقع الجغرافي الذي حفظت فيه المفتاح واختَره وانقر على فتح. أضِف معرّف المفتاح (المتوفّر في Apple Developer Member Center) وانقر على Upload (تحميل).

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

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

بالطريقة نفسها التي تقدّم بها منصات 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:. ويتم استدعاء هذه الطريقة عادةً مرة واحدة لكل تطبيق يبدأ بالرمز المميّز للتسجيل. عند استدعاء هذه الطريقة، فهذا هو الوقت المثالي لإجراء ما يلي:

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

يمكنك استرداد الرمز المميّز مباشرةً باستخدام token(complete:). يظهر خطأ "خالٍ" إذا فشل استرداد الرمز المميز بأي شكل من الأشكال.

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

تم إيقاف Swizzling: ربط الرمز المميّز لأسماء نقاط الوصول والرمز المميّز للتسجيل

إذا أوقفت طريقة Swizzling أو كنت تنشئ تطبيق SwiftUI، عليك ربط رمز APNs بشكل واضح بالرمز المميّز للتسجيل في خدمة "المراسلة عبر السحابة الإلكترونية من Firebase". نفِّذ طريقة application(_:didRegisterForRemoteNotificationsWithDeviceToken:) لاسترداد الرمز المميّز لأسماء نقاط الوصول (APN)، ثم اضبط سمة Messaging على apnsToken:

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، يمكنك الآن إضافة طريقة التعامل مع الرسائل وغيرها من السلوكيات الأكثر تقدمًا إلى تطبيقك. يُرجى الاطّلاع على هذه الأدلة لمزيد من المعلومات: