הגדר אפליקציית לקוח Firebase Cloud Messaging בפלטפורמות של Apple

עבור אפליקציות לקוח של Apple, אתה יכול לקבל הודעות ועמיסות נתונים של עד 4000 בתים דרך ממשק Firebase Cloud Messaging APNs.

כדי לכתוב קוד הלקוח שלך Objective-C או סוויפט, אנו ממליצים להשתמש ב- API FIRMessaging . למשל QuickStart מספק דוגמת קוד עבור שתי השפות.

שיטה שוטפת ב-Firebase Cloud Messaging

Swizzling השיטה מבצעת FCM SDK בשני תחומים מרכזיים: מיפוי ה- APN שלך אסימון לרישום FCM אסימון לכיד נתונים ניתוח במהלך טיפול התקשרות הודעה במורד זרם . מפתחים המעדיפים שלא swizzling השימוש יכול להשבית אותו על ידי הוספת דגל FirebaseAppDelegateProxyEnabled בקובץ info.plist של היישום וקביעת אותו NO (ערך בוליאני). האזורים הרלוונטיים של המדריכים מספקים דוגמאות קוד, גם עם ובלי הפעלת שיטת swizzling.

הוסף את Firebase לפרויקט Apple שלך

אם לא עשית זאת עדיין, להוסיף Firebase לפרויקט האפל שלך .

העלה את מפתח האימות של ה-APN שלך

העלה את מפתח האימות של ה-APN שלך ל-Firebase. אם עדיין אין לך מפתח אימות APNs, הקפד ליצור אחד המפתחים של אפל חבר המרכז .

  1. בתוך הפרויקט שלך במסוף Firebase, בחר את סמל גלגל השיניים, בחר הגדרות פרויקט, ולאחר מכן בחר את כרטיסיית הודעות בענן.

  2. במפתח אימות APNs תחת תצורת אפליקציה ל- iOS, לחץ על כפתור Upload.

  3. דפדף אל המיקום שבו שמרת המפתח שלך, בחר בו ולאחר מכן לחץ על פתח. מוסיפים את מזהה מפתח עבור המפתח (זמין למפתחים אפל מרכז חבר ) ולחץ על העלאה.

הירשם לקבלת התראות מרחוק

או בעת ההפעלה, או בנקודה הרצויה בזרימת היישום שלך, רשום את האפליקציה שלך לקבלת התראות מרחוק. התקשר registerForRemoteNotifications כמוצג:

מָהִיר

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: { _, _ in }
  )
} else {
  let settings: UIUserNotificationSettings =
    UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

Objective-C

if ([UNUserNotificationCenter class] != nil) {
  // iOS 10 or later
  // For iOS 10 display notification (sent via APNS)
  [UNUserNotificationCenter currentNotificationCenter].delegate = self;
  UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert |
      UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  [[UNUserNotificationCenter currentNotificationCenter]
      requestAuthorizationWithOptions:authOptions
      completionHandler:^(BOOL granted, NSError * _Nullable error) {
        // ...
      }];
} else {
  // iOS 10 notifications aren't available; fall back to iOS 8-9 notifications.
  UIUserNotificationType allNotificationTypes =
  (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
  UIUserNotificationSettings *settings =
  [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
  [application registerUserNotificationSettings:settings];
}

[application registerForRemoteNotifications];

גש לאסימון הרישום

כברירת מחדל, ה-SDK של FCM מייצר אסימון רישום עבור מופע אפליקציית הלקוח בעת הפעלת האפליקציה. בדומה לאסימון מכשיר APN, אסימון זה מאפשר לך לשלוח התראות ממוקדות לכל מופע מסוים של האפליקציה שלך.

באותו אופן כי פלטפורמות אפלות בדרך כלל לספק מכשיר ה- APN אסימון על תחילת יישום, FCM מספק רישום אסימון באמצעות FIRMessagingDelegate של messaging:didReceiveRegistrationToken: שיטה. ה-SDK של FCM מאחזר אסימון חדש או קיים במהלך ההשקה הראשונית של האפליקציה ובכל פעם שהאסימון מתעדכן או אינו חוקי. בכל המקרים, ה- SDK FCM קורא messaging:didReceiveRegistrationToken: עם אסימון תקף.

אסימון הרישום עשוי להשתנות כאשר:

  • האפליקציה משוחזרת במכשיר חדש
  • המשתמש מסיר/מתקין מחדש את האפליקציה
  • המשתמש מנקה את נתוני האפליקציה.

הגדר את נציג ההודעות

כדי לקבל אסימונים רישום, ליישם את פרוטוקול נציג מסרים ולהגדיר FIRMessaging של delegate רכוש אחרי שחייגתי [FIRApp configure] . לדוגמא, אם נציג היישום שלך תואם את פרוטוקול הנציג מסרים, אתה יכול להגדיר את הנציג על application:didFinishLaunchingWithOptions: אל עוצמה.

מָהִיר

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

מביא את אסימון הרישום הנוכחי

אסימוני רישום מועברים באמצעות שיטת messaging:didReceiveRegistrationToken: . שיטה זו נקראת בדרך כלל פעם אחת לכל התחלת אפליקציה עם אסימון רישום. כאשר קוראים לשיטה זו, זה הזמן האידיאלי:

  • אם אסימון הרישום חדש, שלח אותו לשרת היישומים שלך.
  • תרשום את אסימון הרישום לנושאים. זה נדרש רק עבור מנויים חדשים או עבור מצבים שבהם המשתמש התקין מחדש את האפליקציה.

ניתן לאחזר את האסימון ישירות באמצעות אסימון (שלם :) . שגיאה שאינה null מסופקת אם אחזור האסימון נכשל בכל דרך שהיא.

מָהִיר

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

אתה יכול להשתמש בשיטה זו בכל עת כדי לגשת לאסימון במקום לאחסן אותו.

רענון אסימון צג

כדי לקבל הודעה בכל פעם שהאסימון מתעדכן, ספק נציג התואם לפרוטוקול נציג ההודעות. הדוגמה הבאה רושמת את הנציג ומוסיפה את שיטת הנציג המתאימה:

מָהִיר

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, תצטרך למפות במפורש את אסימון ה-APN שלך לאסימון הרישום של FCM. דרוס את שיטות didRegisterForRemoteNotificationsWithDeviceToken כדי לאחזר את ה- APN אסימון, ולאחר מכן להגדיר FIRMessaging של APNSToken רכוש:

מָהִיר

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, תוכל לגשת אליו ולהאזין לאירועי רענון באותן שיטות כמו עם הפעלת swizzling.

מנע אתחול אוטומטי

כאשר נוצר אסימון רישום של FCM, הספרייה מעלה את המזהה ונתוני התצורה ל-Firebase. אם ברצונך לקבל תחילה הסכמה מפורשת ממשתמשים, תוכל למנוע יצירת אסימונים בזמן ההגדרה על ידי השבתת FCM. כדי לעשות זאת, להוסיף ערך metadata כדי שלך Info.plist (לא שלך GoogleService-Info.plist ):

FirebaseMessagingAutoInitEnabled = NO

כדי להפעיל מחדש את FCM, אתה יכול לבצע שיחת זמן ריצה:

מָהִיר

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

ערך זה נמשך בכל הפעלה מחדש של האפליקציה לאחר ההגדרה.

הצעדים הבאים

לאחר שתגדיר את לקוח Apple שלך, אתה מוכן להוסיף טיפול בהודעות והתנהגות אחרת ומתקדמת יותר לאפליקציה שלך. עיין במדריכים אלה למידע נוסף: