Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

پیام ها را در یک برنامه iOS دریافت کنید

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

رسیدگی به اعلان های هشدار

FCM تمام پیام های هدف iOS را از طریق APN ها ارائه می دهد. برای کسب اطلاعات بیشتر در مورد دریافت APN ها اطلاعیه ها از طریق UNUserNotificationCenter، اسناد اپل در دیدن سیستم های انتقال مواد اطلاعیه ها و عملیات اطلاع رسانی های مرتبط .

در iOS 10 و بالاتر، شما باید مجموعه ای نماینده UNUserNotificationCenter و پیاده سازی روش نماینده مناسب برای دریافت اطلاعیه ها از FCM.

سریع

@available(iOS 10, *)
extension AppDelegate: UNUserNotificationCenterDelegate {
  // Receive displayed notifications for iOS 10 devices.
  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              willPresent notification: UNNotification,
                              withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions)
                                -> Void) {
    let userInfo = notification.request.content.userInfo

    // With swizzling disabled you must let Messaging know about the message, for Analytics
    // Messaging.messaging().appDidReceiveMessage(userInfo)

    // ...

    // Print full message.
    print(userInfo)

    // Change this to your preferred presentation option
    completionHandler([[.alert, .sound]])
  }

  func userNotificationCenter(_ center: UNUserNotificationCenter,
                              didReceive response: UNNotificationResponse,
                              withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo

    // ...

    // With swizzling disabled you must let Messaging know about the message, for Analytics
    // Messaging.messaging().appDidReceiveMessage(userInfo)

    // Print full message.
    print(userInfo)

    completionHandler()
  }
}

هدف-ج

// Receive displayed notifications for iOS 10 devices.
// Handle incoming notification messages while app is in the foreground.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
  NSDictionary *userInfo = notification.request.content.userInfo;

  // With swizzling disabled you must let Messaging know about the message, for Analytics
  // [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

  // ...

  // Print full message.
  NSLog(@"%@", userInfo);

  // Change this to your preferred presentation option
  completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionAlert);
}

// Handle notification messages after display notification is tapped by the user.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
         withCompletionHandler:(void(^)(void))completionHandler {
  NSDictionary *userInfo = response.notification.request.content.userInfo;
  if (userInfo[kGCMMessageIDKey]) {
    NSLog(@"Message ID: %@", userInfo[kGCMMessageIDKey]);
  }

  // With swizzling disabled you must let Messaging know about the message, for Analytics
  // [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

  // Print full message.
  NSLog(@"%@", userInfo);

  completionHandler();
}

اگر شما می خواهید برای اضافه کردن اقدامات سفارشی به اطلاعیه شما، مجموعه ای click_action پارامتر در محموله اطلاع رسانی . استفاده از ارزش است که شما را برای استفاده از category کلید در payload APN ها است. اقدامات سفارشی باید قبل از استفاده ثبت شوند. برای اطلاعات بیشتر، نگاه کنید به اپل هشدار از طریق محلی و از راه دور برنامه نویسی راهنمای .

بینش به تحویل پیام را به برنامه خود را، مشاهده داشبورد FCM گزارش ، که سوابق تعدادی از پیام های ارسال شده و برای "برداشت" (اطلاعیه دیده شده توسط کاربران) برای برنامه های آندروید باز به دستگاه های iOS و آندروید، همراه با داده.

رسیدگی به اعلان های فشار بی صدا

در هنگام ارسال پیام با content_available کلیدی (معادل APN ها است content-available ، ارسال خواهد شد به عنوان اطلاعیه سکوت تحویل داده، بیدار شدن برنامه خود را در پس زمینه برای انجام وظایف مانند تازه کردن داده های پس زمینه. اطلاعیه پیش زمینه بر خلاف، این اطلاعیه باید از طریق کار گرفته می شود appDelegate(_:didReceiveRemoteNotification:fetchCompletionHandler:) روش.

پیاده سازی application(_:didReceiveRemoteNotification:fetchCompletionHandler:) به عنوان نشان داده شده است:

سریع

func application(_ application: UIApplication,
                 didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                 fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult)
                   -> Void) {
  // If you are receiving a notification message while your app is in the background,
  // this callback will not be fired till the user taps on the notification launching the application.
  // TODO: Handle data of notification

  // With swizzling disabled you must let Messaging know about the message, for Analytics
  // Messaging.messaging().appDidReceiveMessage(userInfo)

  // Print message ID.
  if let messageID = userInfo[gcmMessageIDKey] {
    print("Message ID: \(messageID)")
  }

  // Print full message.
  print(userInfo)

  completionHandler(UIBackgroundFetchResult.newData)
}

هدف-ج

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  // If you are receiving a notification message while your app is in the background,
  // this callback will not be fired till the user taps on the notification launching the application.
  // TODO: Handle data of notification

  // With swizzling disabled you must let Messaging know about the message, for Analytics
  // [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

  // ...

  // Print full message.
  NSLog(@"%@", userInfo);

  completionHandler(UIBackgroundFetchResultNewData);
}

iOS تحویل اعلان های پس زمینه را تضمین نمی کند. برای یادگیری در مورد شرایط است که می تواند اطلاعیه زمینه به شکست، و اسناد اپل در کنار زدن روز رسانی پس زمینه به برنامه شما .

تفسیر محموله پیام اعلان

بار پیام های اطلاع رسانی فرهنگ لغت کلیدها و مقادیر است. پیام های اعلان ارسال شده از طریق APN ها از قالب بار APN ها به شرح زیر پیروی می کند:

  {
    "aps" : {
      "alert" : {
        "body" : "great match!",
        "title" : "Portugal vs. Denmark",
      },
      "badge" : 1,
    },
    "customKey" : "customValue"
  }

رسیدگی به پیام ها با روش چرخاندن غیر فعال است

به طور پیش فرض، اگر شما کلاس برنامه نماینده برنامه خود را اختصاص به UNUserNotificationCenter و Messaging خواص نماینده، FCM خواهد شد برنامه کلاس نماینده خود را به صورت خودکار FCM خود را نشانه با APN ها دستگاه توکن بلعیدن و با تصویب رویدادهای اطلاع رسانی دریافت به تجزیه و تحلیل. اگر صراحتاً متد swizzling را غیرفعال می کنید یا برای هر نماینده از یک کلاس جداگانه استفاده می کنید ، باید هر دو این کارها را به صورت دستی انجام دهید.

به معاشرت FCM نشانه با APN ها دستگاه رمز، عبور از APN ها به نشانه Messaging کلاس در نماینده برنامه خود را کنترل بازخوانی کد از طریق apnsToken اموال .

سریع

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

هدف-ج

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

به تصویب اطلاع رسانی اطلاعات reciept به تجزیه و تحلیل، استفاده از appDidReceiveMessage(_:) روش .

سریع

func userNotificationCenter(_ center: UNUserNotificationCenter,
                            willPresent notification: UNNotification,
  withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
  let userInfo = notification.request.content.userInfo

  Messaging.messaging().appDidReceiveMessage(userInfo)

  // Change this to your preferred presentation option
  completionHandler([[.alert, .sound]])
}

func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {
  let userInfo = response.notification.request.content.userInfo

  Messaging.messaging().appDidReceiveMessage(userInfo)

  completionHandler()
}

func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
   fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
  Messaging.messaging().appDidReceiveMessage(userInfo)
  completionHandler(.noData)
}

هدف-ج

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
  NSDictionary *userInfo = notification.request.content.userInfo;

  [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

  // Change this to your preferred presentation option
  completionHandler(UNNotificationPresentationOptionBadge | UNNotificationPresentationOptionAlert);
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
         withCompletionHandler:(void(^)(void))completionHandler {
  NSDictionary *userInfo = response.notification.request.content.userInfo;

  [[FIRMessaging messaging] appDidReceiveMessage:userInfo];

  completionHandler();
}

- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {
  [[FIRMessaging messaging] appDidReceiveMessage:userInfo];
  completionHandler(UIBackgroundFetchResultNoData);
}