了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

قم بإعداد تطبيق Firebase Cloud Messaging على أنظمة Apple الأساسية

بالنسبة لتطبيقات عميل Apple ، يمكنك تلقي حمولات إخطارات وبيانات تصل إلى 4000 بايت عبر واجهة Firebase Cloud Messaging APNs.

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

طريقة swizzling في Firebase Cloud Messaging

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

أضف Firebase إلى مشروع Apple الخاص بك

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

قم بتحميل مفتاح مصادقة APNs الخاص بك

قم بتحميل مفتاح مصادقة APNs الخاص بك إلى Firebase. إذا لم يكن لديك بالفعل مفتاح مصادقة APNs ، فتأكد من إنشاء واحد في مركز أعضاء مطوري Apple .

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

  2. في مفتاح مصادقة APN ضمن تكوين تطبيق iOS ، انقر فوق الزر تحميل .

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

التسجيل للحصول على الإخطارات عن بعد

سواء عند بدء التشغيل ، أو في النقطة المطلوبة في تدفق التطبيق الخاص بك ، قم بتسجيل التطبيق الخاص بك للإشعارات عن بعد. سجل المكالمات registerForRemoteNotifications كما هو موضح:

سويفت


UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
  options: authOptions,
  completionHandler: { _, _ in }
)

application.registerForRemoteNotifications()

ج موضوعية


[UNUserNotificationCenter currentNotificationCenter].delegate = self;
UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
    UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
[[UNUserNotificationCenter currentNotificationCenter]
    requestAuthorizationWithOptions:authOptions
    completionHandler:^(BOOL granted, NSError * _Nullable error) {
      // ...
    }];

[application registerForRemoteNotifications];

الوصول إلى رمز التسجيل

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

بنفس الطريقة التي تقدم بها منصات Apple عادةً رمزًا مميزًا لجهاز APNs عند بدء التطبيق ، توفر FCM رمزًا مميزًا للتسجيل عبر رسائل FIRMessagingDelegate messaging:didReceiveRegistrationToken: method. يسترد FCM SDK رمزًا جديدًا أو موجودًا أثناء التشغيل الأولي للتطبيق وعندما يتم تحديث الرمز المميز أو إبطاله. في جميع الحالات ، تستدعي FCM SDK messaging:didReceiveRegistrationToken: برمز مميز صالح.

قد يتغير رمز التسجيل عندما:

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

قم بتعيين مفوض المراسلة

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

سويفت

Messaging.messaging().delegate = self

ج موضوعية

[FIRMessaging messaging].delegate = self;

إحضار رمز التسجيل الحالي

يتم تسليم الرموز المميزة للتسجيل عبر طريقة messaging:didReceiveRegistrationToken: يتم استدعاء هذه الطريقة بشكل عام مرة واحدة لكل تطبيق يبدأ برمز التسجيل. عندما يتم استدعاء هذه الطريقة ، فهذا هو الوقت المثالي لـ:

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

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

سويفت

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)"
  }
}

ج موضوعية

[[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;
  }
}];

يمكنك استخدام هذه الطريقة في أي وقت للوصول إلى الرمز المميز بدلاً من تخزينه.

تحديث رمز المراقبة

ليتم إعلامك عند تحديث الرمز المميز ، قم بتوفير مفوض يتوافق مع بروتوكول مفوض المراسلة. يسجل المثال التالي المفوض ويضيف طريقة التفويض المناسبة:

سويفت

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.
}

ج موضوعية

- (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: تعيين رمز APNs الخاص بك ورمز التسجيل المميز

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

سويفت

func application(application: UIApplication,
                 didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  Messaging.messaging().apnsToken = deviceToken
}

ج موضوعية

// With "FirebaseAppDelegateProxyEnabled": NO
- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [FIRMessaging messaging].APNSToken = deviceToken;
}

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

منع التهيئة التلقائية

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

FirebaseMessagingAutoInitEnabled = NO

لإعادة تمكين FCM ، يمكنك إجراء مكالمة وقت التشغيل:

سويفت

Messaging.messaging().autoInitEnabled = true

ج موضوعية

[FIRMessaging messaging].autoInitEnabled = YES;

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

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

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