یک برنامه مشتری Firebase Cloud Messaging در پلتفرم های اپل راه اندازی کنید

برای برنامه‌های مشتری اپل، می‌توانید اعلان‌ها و بارهای داده تا 4096 بایت را از طریق رابط APN Firebase Cloud Messaging دریافت کنید.

برای نوشتن کد مشتری خود در Objective-C یا Swift، توصیه می کنیم از API FIRMessaging استفاده کنید. مثال شروع سریع کد نمونه ای را برای هر دو زبان ارائه می دهد.

تغییر روش در Firebase Cloud Messaging

FCM SDK جابجایی روش را در دو حوزه کلیدی انجام می‌دهد: نگاشت توکن APN شما به نشانه ثبت FCM و گرفتن داده‌های تجزیه و تحلیل در طول رسیدگی به تماس برگشتی پیام پایین‌دست . برنامه‌نویسانی که ترجیح می‌دهند از Swizzling استفاده نکنند، می‌توانند با افزودن پرچم FirebaseAppDelegateProxyEnabled در فایل Info.plist برنامه و تنظیم آن روی NO (مقدار بولی) آن را غیرفعال کنند. بخش‌های مرتبط راهنماها، نمونه‌های کدی را ارائه می‌دهند، هم با فعال کردن روش و هم بدون آن.

Firebase را به پروژه اپل خود اضافه کنید

اگر قبلاً این کار را نکرده‌اید، Firebase را به پروژه اپل خود اضافه کنید .

کلید احراز هویت APN خود را آپلود کنید

کلید احراز هویت APN خود را در Firebase آپلود کنید. اگر از قبل یک کلید تأیید اعتبار APN ندارید، مطمئن شوید که در مرکز اعضای برنامه‌نویس Apple ایجاد کرده‌اید.

  1. در داخل پروژه خود در کنسول Firebase ، نماد چرخ دنده را انتخاب کنید، تنظیمات پروژه را انتخاب کنید و سپس برگه Cloud Messaging را انتخاب کنید.

  2. در کلید احراز هویت APN در پیکربندی برنامه iOS ، روی دکمه آپلود کلیک کنید.

  3. به مکانی که کلید خود را در آن ذخیره کرده اید بروید، آن را انتخاب کنید و روی Open کلیک کنید. شناسه کلید را برای کلید اضافه کنید (در مرکز اعضای برنامه نویس اپل موجود است) و روی آپلود کلیک کنید.

برای اطلاعیه از راه دور ثبت نام کنید

در هنگام راه اندازی یا در نقطه مورد نظر در جریان برنامه خود، برنامه خود را برای اعلان های راه دور ثبت کنید. مطابق شکل با registerForRemoteNotifications تماس بگیرید:

سویفت

UNUserNotificationCenter.current().delegate = self

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

application.registerForRemoteNotifications()

هدف-C

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

[application registerForRemoteNotifications];

به رمز ثبت نام دسترسی پیدا کنید

به طور پیش فرض، FCM SDK یک نشانه ثبت نام برای نمونه برنامه مشتری در راه اندازی برنامه ایجاد می کند. مشابه توکن دستگاه APN، این توکن به شما امکان می دهد اعلان های هدفمند را به هر نمونه خاصی از برنامه خود ارسال کنید.

همانطور که پلتفرم‌های اپل معمولاً یک توکن دستگاه APN را در شروع برنامه ارائه می‌کنند، FCM یک نشانه ثبت نام را از طریق روش messaging:didReceiveRegistrationToken: FIRMessagingDelegate ارائه می‌کند. FCM SDK یک توکن جدید یا موجود را در طول راه‌اندازی اولیه برنامه و هر زمان که توکن به‌روزرسانی یا باطل شود، بازیابی می‌کند. در همه موارد، FCM SDK messaging:didReceiveRegistrationToken: با یک توکن معتبر فراخوانی می‌کند.

نشانه ثبت نام ممکن است زمانی تغییر کند که:

  • برنامه در یک دستگاه جدید بازیابی می شود
  • کاربر برنامه را حذف/نصب مجدد می کند
  • کاربر داده های برنامه را پاک می کند.

نماینده پیام رسانی را تنظیم کنید

برای دریافت نشانه‌های ثبت‌نام، پروتکل ارسال پیام را پیاده‌سازی کنید و پس از فراخوانی [FIRApp configure] ویژگی delegate FIRMessaging را تنظیم کنید. برای مثال، اگر نماینده برنامه شما با پروتکل نماینده پیام‌رسانی مطابقت دارد، می‌توانید نماینده را روی application:didFinishLaunchingWithOptions: روی خودش تنظیم کنید.

سویفت

Messaging.messaging().delegate = self

هدف-C

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

هدف-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;
  }
}];

شما می توانید در هر زمان از این روش برای دسترسی به توکن به جای ذخیره آن استفاده کنید.

مانیتور به روز رسانی نشانه

برای اینکه هر زمان که توکن به روز می شود مطلع شوید، یک نماینده مطابق با پروتکل نماینده پیام رسانی ارائه دهید. مثال زیر نماینده را ثبت می کند و متد نماینده مناسب را اضافه می کند:

سویفت

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

هدف-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 گوش دهید. ویژگی token همیشه دارای مقدار رمز فعلی است.

Swizzling غیرفعال شد: توکن APN و نشانه ثبت نام را نقشه برداری کنید

اگر Swizzling متد را غیرفعال کرده‌اید، یا در حال ساخت یک برنامه SwiftUI هستید، باید به صراحت توکن APN خود را به نشانه ثبت FCM نگاشت کنید. متد application(_:didRegisterForRemoteNotificationsWithDeviceToken:) را برای بازیابی توکن APNs اجرا کنید و سپس ویژگی apnsToken Messaging را تنظیم کنید:

سویفت

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

هدف-C

// 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

هدف-C

[FIRMessaging messaging].autoInitEnabled = YES;

پس از تنظیم، این مقدار در سراسر راه اندازی مجدد برنامه باقی می ماند.

مراحل بعدی

بعد از اینکه کلاینت Apple خود را راه اندازی کردید، آماده هستید تا مدیریت پیام و سایر رفتارهای پیشرفته تر را به برنامه خود اضافه کنید. برای اطلاعات بیشتر به این راهنماها مراجعه کنید:

،

برای برنامه‌های مشتری اپل، می‌توانید اعلان‌ها و بارهای داده تا 4096 بایت را از طریق رابط APN Firebase Cloud Messaging دریافت کنید.

برای نوشتن کد مشتری خود در Objective-C یا Swift، توصیه می کنیم از API FIRMessaging استفاده کنید. مثال شروع سریع کد نمونه ای را برای هر دو زبان ارائه می دهد.

تغییر روش در Firebase Cloud Messaging

FCM SDK جابجایی روش را در دو حوزه کلیدی انجام می‌دهد: نگاشت توکن APN شما به نشانه ثبت FCM و گرفتن داده‌های تجزیه و تحلیل در طول رسیدگی به تماس برگشتی پیام پایین‌دست . برنامه‌نویسانی که ترجیح می‌دهند از Swizzling استفاده نکنند، می‌توانند با افزودن پرچم FirebaseAppDelegateProxyEnabled در فایل Info.plist برنامه و تنظیم آن روی NO (مقدار بولی) آن را غیرفعال کنند. بخش‌های مرتبط راهنماها، نمونه‌های کدی را ارائه می‌دهند، هم با فعال کردن روش و هم بدون آن.

Firebase را به پروژه اپل خود اضافه کنید

اگر قبلاً این کار را نکرده‌اید، Firebase را به پروژه اپل خود اضافه کنید .

کلید احراز هویت APN خود را آپلود کنید

کلید احراز هویت APN خود را در Firebase آپلود کنید. اگر از قبل یک کلید تأیید اعتبار APN ندارید، مطمئن شوید که در مرکز اعضای برنامه‌نویس Apple ایجاد کرده‌اید.

  1. در داخل پروژه خود در کنسول Firebase ، نماد چرخ دنده را انتخاب کنید، تنظیمات پروژه را انتخاب کنید و سپس برگه Cloud Messaging را انتخاب کنید.

  2. در کلید احراز هویت APN در پیکربندی برنامه iOS ، روی دکمه آپلود کلیک کنید.

  3. به مکانی که کلید خود را در آن ذخیره کرده اید بروید، آن را انتخاب کنید و روی Open کلیک کنید. شناسه کلید را برای کلید اضافه کنید (در مرکز اعضای برنامه نویس اپل موجود است) و روی آپلود کلیک کنید.

برای اطلاعیه از راه دور ثبت نام کنید

در هنگام راه اندازی یا در نقطه مورد نظر در جریان برنامه خود، برنامه خود را برای اعلان های راه دور ثبت کنید. مطابق شکل با registerForRemoteNotifications تماس بگیرید:

سویفت

UNUserNotificationCenter.current().delegate = self

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

application.registerForRemoteNotifications()

هدف-C

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

[application registerForRemoteNotifications];

به رمز ثبت نام دسترسی پیدا کنید

به طور پیش فرض، FCM SDK یک نشانه ثبت نام برای نمونه برنامه مشتری در راه اندازی برنامه ایجاد می کند. مشابه توکن دستگاه APN، این توکن به شما امکان می دهد اعلان های هدفمند را به هر نمونه خاصی از برنامه خود ارسال کنید.

همانطور که پلتفرم‌های اپل معمولاً یک توکن دستگاه APN را در شروع برنامه ارائه می‌کنند، FCM یک نشانه ثبت نام را از طریق روش messaging:didReceiveRegistrationToken: FIRMessagingDelegate ارائه می‌کند. FCM SDK یک توکن جدید یا موجود را در طول راه‌اندازی اولیه برنامه و هر زمان که توکن به‌روزرسانی یا باطل شود، بازیابی می‌کند. در همه موارد، FCM SDK messaging:didReceiveRegistrationToken: با یک توکن معتبر فراخوانی می‌کند.

نشانه ثبت نام ممکن است زمانی تغییر کند که:

  • برنامه در یک دستگاه جدید بازیابی می شود
  • کاربر برنامه را حذف/نصب مجدد می کند
  • کاربر داده های برنامه را پاک می کند.

نماینده پیام رسانی را تنظیم کنید

برای دریافت نشانه‌های ثبت‌نام، پروتکل ارسال پیام را پیاده‌سازی کنید و پس از فراخوانی [FIRApp configure] ویژگی delegate FIRMessaging را تنظیم کنید. برای مثال، اگر نماینده برنامه شما با پروتکل نماینده پیام‌رسانی مطابقت دارد، می‌توانید نماینده را روی application:didFinishLaunchingWithOptions: روی خودش تنظیم کنید.

سویفت

Messaging.messaging().delegate = self

هدف-C

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

هدف-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;
  }
}];

شما می توانید در هر زمان از این روش برای دسترسی به توکن به جای ذخیره آن استفاده کنید.

مانیتور به روز رسانی نشانه

برای اینکه هر زمان که توکن به روز می شود مطلع شوید، یک نماینده مطابق با پروتکل نماینده پیام رسانی ارائه دهید. مثال زیر نماینده را ثبت می کند و متد نماینده مناسب را اضافه می کند:

سویفت

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

هدف-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 گوش دهید. ویژگی token همیشه دارای مقدار رمز فعلی است.

Swizzling غیرفعال شد: توکن APN و نشانه ثبت نام را نقشه برداری کنید

اگر Swizzling متد را غیرفعال کرده‌اید، یا در حال ساخت یک برنامه SwiftUI هستید، باید به صراحت توکن APN خود را به نشانه ثبت FCM نگاشت کنید. متد application(_:didRegisterForRemoteNotificationsWithDeviceToken:) را برای بازیابی توکن APNs اجرا کنید و سپس ویژگی apnsToken Messaging را تنظیم کنید:

سویفت

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

هدف-C

// 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

هدف-C

[FIRMessaging messaging].autoInitEnabled = YES;

پس از تنظیم، این مقدار در سراسر راه اندازی مجدد برنامه باقی می ماند.

مراحل بعدی

بعد از اینکه کلاینت Apple خود را راه اندازی کردید، آماده هستید تا مدیریت پیام و سایر رفتارهای پیشرفته تر را به برنامه خود اضافه کنید. برای اطلاعات بیشتر به این راهنماها مراجعه کنید: