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

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

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

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

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

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

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

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

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

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

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

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

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

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

מָהִיר


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

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

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

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

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

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

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

כדי לקבל אסימוני רישום, יישם את פרוטוקול נציג ההודעות והגדר את מאפיין delegate של FIRMessaging לאחר קריאה ל- [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, או שאתה בונה אפליקציית SwiftUI, תצטרך למפות במפורש את אסימון ה-APN שלך לאסימון הרישום של FCM. יישם את application(_:didRegisterForRemoteNotificationsWithDeviceToken:) כדי לאחזר את אסימון APNs, ולאחר מכן הגדר את המאפיין apnsToken של Messaging :

מָהִיר

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. כדי לעשות זאת, הוסף ערך מטא נתונים ל- Info.plist שלך (לא GoogleService-Info.plist שלך):

FirebaseMessagingAutoInitEnabled = NO

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

מָהִיר

Messaging.messaging().autoInitEnabled = true

Objective-C

[FIRMessaging messaging].autoInitEnabled = YES;

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

הצעדים הבאים

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