שליחה של הודעת בדיקה לאפליקציה ברקע של Apple

כדי להתחיל להשתמש ב-FCM, כדאי ליצור את תרחיש השימוש הפשוט ביותר: שליחת הודעת בדיקה מ מרכז ההודעות למכשיר פיתוח כשהאפליקציה פועלת ברקע במכשיר. בדף הזה מפורטים כל השלבים להשגת המטרה הזו, מההגדרה ועד האימות. יכול להיות שחלק מהשלבים כבר הושלמו אם הגדרתם אפליקציית לקוח של אפל עבור FCM.

הוספת Firebase לפרויקט Apple

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

דרישות מוקדמות

  • מתקינים את הרכיבים הבאים:

    • ‫Xcode 16.2 ואילך
  • חשוב לוודא שהפרויקט עומד בדרישות הבאות:

    • הפרויקט שלכם צריך להיות מיועד לגרסאות הפלטפורמה האלה ומעלה:
      • iOS 13
      • macOS 10.15
      • tvOS 13
      • watchOS 7
  • מגדירים מכשיר Apple פיזי להרצת האפליקציה, ומבצעים את המשימות הבאות:

    • משיגים מפתח אימות של Apple Push Notification בשביל חשבון Apple Developer.
    • מפעילים את ההתראות בדחיפה ב-XCode בקטע App > Capabilities.

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

יצירת פרויקט Firebase

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

רישום האפליקציה ב-Firebase

כדי להשתמש ב-Firebase באפליקציית Apple, צריך לרשום את האפליקציה בפרויקט Firebase. רישום האפליקציה נקרא לעיתים קרובות "הוספה" של האפליקציה לפרויקט.

  1. עוברים אל מסוף Firebase.

  2. במרכז הדף של סקירת הפרויקט, לוחצים על הסמל iOS+‎ כדי להפעיל את תהליך ההגדרה.

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

  3. מזינים את מזהה החבילה של האפליקציה בשדה מזהה החבילה.

  4. (אופציונלי) מזינים פרטים נוספים על האפליקציה: כינוי האפליקציה ומזהה האפליקציה בחנות.

  5. לוחצים על רישום האפליקציה.

הוספת קובץ הגדרות של Firebase

  1. לוחצים על Download GoogleService-Info.plist (הורדה של GoogleService-Info.plist) כדי לקבל את קובץ ההגדרות של אפליקציית Firebase ‏(GoogleService-Info.plist).

  2. מעבירים את קובץ ההגדרות לרמה הבסיסית (root) של פרויקט Xcode. אם מוצגת בקשה, בוחרים להוסיף את קובץ ההגדרות לכל יעדי ההעברה.

אם יש לכם כמה מזהי חבילות בפרויקט, אתם צריכים לשייך כל מזהה חבילה לאפליקציה רשומה במסוף Firebase, כדי שלכל אפליקציה יהיה קובץ GoogleService-Info.plist משלה.

הוספת ערכות SDK של Firebase לאפליקציה

משתמשים ב-Swift Package Manager כדי להתקין ולנהל יחסי תלות ב-Firebase.

  1. ב-Xcode, כשהפרויקט של האפליקציה פתוח, עוברים אל File > Add Packages (קובץ > הוספת חבילות).
  2. כשמוצגת בקשה, מוסיפים את מאגר Firebase Apple platforms SDK:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. בוחרים את הספרייה Firebase Cloud Messaging.
  5. מוסיפים את הדגל -ObjC לקטע Other Linker Flags בהגדרות הבנייה של היעד.
  6. כדי ליהנות מחוויה אופטימלית עם Firebase Cloud Messaging, מומלץ להפעיל את Google Analytics בפרויקט Firebase ולהוסיף את Firebase SDK for Google Analytics לאפליקציה. אפשר לבחור בספרייה ללא איסוף של IDFA או עם איסוף של IDFA. אפשר לעיין בשאלות הנפוצות בנושא הארגון העדכני של מודולים ב-Google Analytics עבור Firebase SDK.
  7. אחרי שתסיימו, פלטפורמת Xcode תתחיל באופן אוטומטי לטפל ביחסי התלות ולהוריד אותם ברקע.

העלאת מפתח אימות של APNs

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

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

  2. בקטע הגדרת אפליקציה ל-iOS, בשדה מפתח אימות של APNs, לוחצים על לחצן העלאה.

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

הפעלת Firebase באפליקציה

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

  1. מייבאים את המודול FirebaseCore אל UIApplicationDelegate, וגם את כל מודולי Firebase אחרים שמשמשים את נציג האפליקציה. לדוגמה, כדי להשתמש ב-Cloud Firestore וב-Authentication:

    SwiftUI

    import SwiftUI
    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Swift

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Objective-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  2. מגדירים מופע משותף של FirebaseApp בשיטה application(_:didFinishLaunchingWithOptions:) של נציג האפליקציה:

    SwiftUI

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Swift

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Objective-C

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. אם אתם משתמשים ב-SwiftUI, אתם צריכים ליצור נציג אפליקציה ולצרף אותו למבנה App באמצעות UIApplicationDelegateAdaptor או NSApplicationDelegateAdaptor. צריך גם להשבית את החלפת השיטות של נציג האפליקציה. מידע נוסף זמין בהוראות ל-SwiftUI.

    SwiftUI

    @main
    struct YourApp: App {
      // register app delegate for Firebase setup
      @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
    
      var body: some Scene {
        WindowGroup {
          NavigationView {
            ContentView()
          }
        }
      }
    }
          

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

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

Swift

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 מפיק טוקן רישום למופע של אפליקציית הלקוח בהפעלת האפליקציה. הטוקן הזה דומה לטוקן המכשיר של APNs, והוא מאפשר לכם לשלוח התראות ממוקדות לכל מופע ספציפי של האפליקציה.

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

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

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

הגדרת נציג לניהול שיחות

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

Swift

Messaging.messaging().delegate = self

Objective-C

[FIRMessaging messaging].delegate = self;

אחזור של טוקן הרישום הנוכחי

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

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

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

Swift

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

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

מעקב אחרי רענון טוקנים

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

Swift

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 במקום לספק שיטת נציג. מאפיין הטוקן תמיד מכיל את ערך הטוקן הנוכחי.

שליחת הודעת התראה

  1. מתקינים את האפליקציה ומפעילים אותה במכשיר היעד. במכשירי Apple, צריך לאשר את הבקשה להרשאה לקבל התראות מרחוק.

  2. מוודאים שהאפליקציה פועלת ברקע במכשיר.

  3. במסוף Firebase, פותחים את דף ההודעות.

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

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

  6. מזינים את הטקסט של ההודעה. כל שאר השדות הם אופציונליים.

  7. בחלונית השמאלית, בוחרים באפשרות שליחת הודעת בדיקה.

  8. בשדה עם התווית הוספת אסימון רישום ל-FCM, מזינים את אסימון הרישום שקיבלתם בקטע הקודם של המדריך הזה.

  9. בוחרים באפשרות בדיקה.

אחרי שתבחרו באפשרות בדיקה, ההתראה אמורה להתקבל במכשיר הלקוח המטורגט (כשהאפליקציה פועלת ברקע).

כדי לקבל תובנות לגבי מסירת הודעות לאפליקציה, אפשר לעיין ב FCMלוח הבקרה של הדוחות, שבו מתועד מספר ההודעות שנשלחו ונפתחו במכשירי Apple ובמכשירי Android, וגם נתונים לגבי 'חשיפות' (התראות שהמשתמשים ראו) באפליקציות ל-Android.

השלבים הבאים

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