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

بالنسبة إلى تطبيقات 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

حمِّل مفتاح مصادقة أسماء نقاط الوصول إلى Firebase. إذا لم يكن لديك مفتاح مصادقة APNs، احرص على إنشاء مفتاح في Apple Developer Member Center.

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

  2. في مفتاح مصادقة APNs ضمن إعدادات تطبيق 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) لنظام التشغيل 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 والرمز المميّز للتسجيل

إذا أوقفت طريقة Swizzling أو كنت تنشئ تطبيق SwiftUI، عليك ربط رمز APNs بشكل صريح بالرمز المميّز للتسجيل في FCM. نفِّذ طريقة 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;
}

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

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

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

FirebaseMessagingAutoInitEnabled = NO

لإعادة تفعيل "خدمة إرسال الرسائل إلى الأجهزة الجوّالة من Google"، يمكنك إجراء مكالمة وقت التشغيل:

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

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

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

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