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

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

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

طريقة الدواء باللغة Firebase Cloud Messaging

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

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

إذا لم تكن قد فعلت ذلك بالفعل، إضافة Firebase إلى مشروع Apple

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

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

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

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

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

بالطريقة نفسها التي تقدم بها منصات Apple عادةً رمزًا مميزًا لأجهزة أسماء نقاط الوصول (APN) عند بدء التطبيق، توفّر خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" رمزًا مميّزًا للتسجيل عبر FIRMessagingDelegate طريقة messaging:didReceiveRegistrationToken:. تسترد حزمة تطوير البرامج لخدمة "المراسلة عبر السحابة الإلكترونية من 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: ربط الرمز المميّز لأسماء نقاط الوصول (APN) والرمز المميز للتسجيل

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

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

Swift

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

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

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

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