Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

הגדר אפליקציית לקוח מסרים של Firebase Cloud ב- iOS

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

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

כדי לאפשר שליחת הודעות דחיפה דרך רשתות APN, עליך:

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

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

אתה יוצר את שניהם במרכז החברים של אפל למפתחים .

שיטה מתפתלת בהודעות ענן של Firebase

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

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

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

תנאים מוקדמים

  • התקן את הדברים הבאים:

    • Xcode 12.2 ואילך
    • CocoaPods 1.10.0 ואילך
  • ודא שהפרויקט שלך עומד בדרישות הבאות:

    • על הפרויקט שלך למקד ל- iOS 10 ואילך.
  • הגדר מכשיר iOS פיזי להפעלת האפליקציה שלך והשלם את המשימות הבאות:

    • השג מפתח אימות הודעות דחיפה של Apple עבור חשבון המפתח של Apple .
    • אפשר הודעות דחיפה ב- XCode תחת אפליקציה> יכולות .

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

צור פרויקט Firebase

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

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

לאחר שיש לך פרויקט Firebase, תוכל להוסיף אליו את אפליקציית iOS שלך.

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

  1. עבור למסוף Firebase .

  2. במרכז עמוד סקירת הפרויקט, לחץ על סמל iOS ( ) כדי להפעיל את זרימת העבודה של ההתקנה.

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

  3. הזן את מזהה החבילה של האפליקציה שלך בשדה מזהה חבילה של iOS .

  4. (אופציונלי) הזן מידע אחר על האפליקציה: כינוי לאפליקציה ומזהה App Store .

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

הוסף קובץ תצורה של Firebase

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

  2. העבר את קובץ התצורה שלך לשורש של פרויקט ה- Xcode שלך. אם תתבקש, בחר להוסיף את קובץ התצורה לכל היעדים.

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

הוסף SDK של Firebase לאפליקציה שלך

אנו ממליצים להשתמש ב- CocoaPods להתקנת ספריות Firebase. עם זאת, אם אתה מעדיף לא להשתמש ב- CocoaPods, תוכל לשלב את מסגרות ה- SDK ישירות או להשתמש במקום זאת במנהל החבילות Swift .

האם אתה משתמש באחת מדוגמאות ההפעלה המהירה ? פרויקט ה- Xcode ו- Podfile (עם תרמילים) כבר קיימים, אך עדיין תצטרך להוסיף את קובץ התצורה של Firebase ולהתקין את התרמילים.

  1. צור קובץ Podfile אם עדיין אין לך:

    cd your-project-directory
    pod init
  2. אל קובץ ה- Podfile שלך, הוסף את תרמילי Firebase שבהם ברצונך להשתמש באפליקציה שלך.

    תוכל להוסיף כל אחד ממוצרי Firebase הנתמכים לאפליקציית iOS שלך.

    לקבלת חוויה אופטימלית עם Firebase Cloud Messaging, אנו ממליצים להפעיל את Google Analytics בפרויקט שלך. כמו כן, כחלק מהגדרת Analytics, עליך להוסיף את ה- Firebase SDK עבור Analytics לאפליקציה שלך.

    ניתוח מופעל

    # Add the Firebase pod for Google Analytics
    pod 'Firebase/Analytics'
    
    # For Analytics without IDFA collection capability, use this pod instead
    # pod ‘Firebase/AnalyticsWithoutAdIdSupport’
    
    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'

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

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

    # Add the pod for Firebase Cloud Messaging
    pod 'Firebase/Messaging'
  3. התקן את התרמילים, ואז פתח את קובץ ה- .xcworkspace שלך כדי לראות את הפרויקט ב- Xcode:

    pod install
    open your-project.xcworkspace

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

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

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

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

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

אתחל את Firebase באפליקציה שלך

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

  1. ייבא את מודול Firebase ל- UIApplicationDelegate שלך:

    מָהִיר

    import Firebase

    מטרה-ג

    @import Firebase;
  2. הגדר תצורה של מופע משותף של FirebaseApp , בדרך כלל ביישום האפליקציה שלך application:didFinishLaunchingWithOptions: method:

    מָהִיר

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

    מטרה-ג

    // Use Firebase library to configure APIs
    [FIRApp configure];

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

בין בעת ​​ההפעלה, או בנקודה הרצויה בזרימת היישום שלך, רשום את האפליקציה שלך להתראות מרחוק. registerForRemoteNotifications שיחות 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()

מטרה-ג

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

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

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

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

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

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

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

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

מָהִיר

Messaging.messaging().delegate = self

מטרה-ג

[FIRMessaging messaging].delegate = self;

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

אסימונים לרישום מועברים באמצעות messaging:didReceiveRegistrationToken: השיטה 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)"
  }
}

מטרה-ג

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

מטרה-ג

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

נכה סוחף: ממפה את אסימון ה- APN שלך ואת אסימון ההרשמה

אם השבתת את החיטוט בשיטה, יהיה עליך למפות במפורש את אסימון ה- APN שלך לאסימון הרישום של FCM. דרוס את שיטות didRegisterForRemoteNotificationsWithDeviceToken כדי לאחזר את ה- APN אסימון, ולאחר מכן להגדיר FIRMessaging של APNSToken רכוש:

מָהִיר

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

מטרה-ג

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

מטרה-ג

[FIRMessaging messaging].autoInitEnabled = YES;

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

הצעדים הבאים

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