1. מבוא
העדכון האחרון: 2020-1-6
שירות העברת ההודעות בענן ב-Firebase (FCM) הוא פתרון להעברת הודעות בפלטפורמות שונות שמאפשר לכם לשלוח הודעות בצורה מהימנה ללא עלות.
באמצעות FCM, אפשר להודיע לאפליקציית לקוח שיש אימייל חדש או נתונים אחרים שזמינים לסנכרון. אתם יכולים לשלוח הודעות התראה כדי לעודד את המשתמשים לאינטראקציה חוזרת ולשמר אותם. בתרחישי שימוש כמו העברת הודעות מיידיות, הודעה יכולה להעביר מטען ייעודי (payload) של עד 4KB לאפליקציית לקוח.
איך זה עובד
הטמעה של FCM כוללת שני רכיבים עיקריים לשליחה ולקבלה:
- סביבה מהימנה כמו Cloud Functions for Firebase או שרת אפליקציות שבה אפשר ליצור, לטרגט ולשלוח הודעות.
- אפליקציית לקוח ל-iOS, ל-Android או לאינטרנט (JavaScript) שמקבלת הודעות באמצעות שירות התעבורה הספציפי לפלטפורמה המתאימה.
סקירה כללית על הארכיטקטורה של FCM

FCM מסתמך על קבוצת הרכיבים הבאה שיוצרים, מעבירים ומקבלים הודעות:
- כלים ליצירה או לבנייה של בקשות להודעות. הכלי ליצירת התראות מספק אפשרות מבוססת-ממשק משתמש גרפי ליצירת בקשות להתראות. כדי להשיג אוטומציה מלאה ותמיכה בכל סוגי ההודעות, צריך ליצור בקשות להודעות בסביבת שרת מהימנה שתומכת ב-SDK של Firebase לאדמינים או בפרוטוקולי השרת של FCM. הסביבה הזו יכולה להיות Cloud Functions for Firebase, Google App Engine או שרת האפליקציות שלכם.
- הקצה העורפי של FCM, שמקבל בקשות להודעות (בין היתר), מבצע פיצול של הודעות באמצעות נושאים ויוצר מטא-נתונים של הודעות, כמו מזהה ההודעה.
- שכבת תעבורה ברמת הפלטפורמה, שמנתבת את ההודעה למכשיר היעד, מטפלת בהעברת ההודעה ומחילת הגדרה ספציפית לפלטפורמה במקרים המתאימים. שכבת התעבורה הזו כוללת:
- שכבת התעבורה של Android (ATL) למכשירי Android עם Google Play Services
- שירות ההתראות של Apple (APNs) למכשירי iOS
- פרוטוקול של הודעות פוש באפליקציות אינטרנט
- FCM SDK במכשיר של המשתמש, שבו ההתראה מוצגת או שההודעה מטופלת בהתאם למצב הפעילות של האפליקציה (בקדמה או ברקע) ולכל לוגיקת אפליקציה רלוונטית.
מה תפַתחו
ב-codelab הזה תוסיפו הודעת פוש לאפליקציית iOS לדוגמה באמצעות FCM.
מה תלמדו
- איך מפעילים או מבטלים את ההרשמה של משתמש לקבלת הודעות פוש
- איך לטפל בהודעות פוש נכנסות
- איך מציגים התראה
- איך מגיבים לקליקים על התראות
מה תצטרכו
- Xcode 11.0 ואילך
- CocoaPods 1.9.0 ואילך
- חשבון Apple Developer
- מכשיר iOS פיזי להרצת האפליקציה
- ידע בסיסי ב-Swift
2. תהליך ההגדרה
הורדת קוד לדוגמה
ב-codelab הזה תבנו אפליקציית בדיקה משלכם, אבל אם אתם רוצים לראות ולהריץ את אפליקציית הדוגמה הקיימת, אתם יכולים להוריד את קוד הדוגמה למדריך למתחילים.
יש שתי דרכים להשיג את הדוגמה:
- משכפלים את מאגר Git:
$ git clone https://github.com/firebase/quickstart-ios.git
- מורידים את קובץ ה-ZIP:
אם מורידים את המקור כקובץ ZIP, אחרי שמחלצים אותו מקבלים תיקיית בסיס quickstart-ios.
יצירת אפליקציה חדשה
כדי ליצור אפליקציית בדיקה משלכם, מבצעים את השלבים הבאים (השלבים הבאים מתייחסים ל-XCode 12.3):
- פותחים את XCode ובוחרים באפשרות Create a new Xcode project (יצירת פרויקט חדש ב-Xcode).
- בוחרים באפשרות אפליקציה ולוחצים על הבא.

- מזינים את שם המוצר (לדוגמה, MessagingExample)
- בוחרים באפשרות Team (צוות). אם לא יצרתם צוות, אתם צריכים להגדיר אותו בחשבון שלכם ב-Apple Developer.
- מזינים את מזהה הארגון (למשל,
com.your-name) - מזינים את מזהה החבילה (למשל,
com.your-name.MessagingExample, הוא צריך להיות ייחודי בין כל האפליקציות ל-iOS). - בתפריט הנפתח ממשק, בוחרים באפשרות תסריט מצויר.
- בתפריט הנפתח מחזור חיים, בוחרים באפשרות UIKit App Delegate.
- בוחרים באפשרות Swift בשפה.
- לוחצים על הבא.

תצטרכו את מזהה החבילה כשתיצרו מפתח APN ותירשמו לאפליקציה בפרויקט Firebase.
3. הגדרת APN
יצירת מפתח האימות
בקטע הזה מוסבר איך ליצור מפתח אימות למזהה אפליקציה שמופעלות בו התראות פוש. אם יש לכם מפתח קיים, אתם יכולים להשתמש בו במקום ליצור מפתח חדש.
כדי ליצור מפתח אימות:
- בחשבון הפיתוח, עוברים אל Certificates, Identifiers & Profiles (אישורים, מזהים ופרופילים) ואז אל Keys (מפתחות).

- לוחצים על לחצן ההוספה (+) בפינה השמאלית העליונה.

- מזינים תיאור למפתח האימות של APNs
- בקטע Key Services (שירותים מרכזיים), מסמנים את התיבה APNs ולוחצים על Continue (המשך).

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

יצירת מזהה אפליקציה
מזהה אפליקציה הוא מזהה ייחודי של אפליקציה. הוא מיוצג בדרך כלל על ידי דומיין הפוך.
- עוברים אל Apple Developer Member Center ונכנסים לחשבון.
- עוברים אל Certificates, Identifiers and Profiles (אישורים, מזהים ופרופילים).
- עוברים אל מזהים.
- לוחצים על הלחצן + כדי ליצור מזהה אפליקציה חדש.

- לוחצים על לחצן הבחירה מזהי אפליקציות ואז על המשך.

- בוחרים באפשרות אפליקציה ולוחצים על המשך.

- כדי ליצור את מזהה האפליקציה החדש:
- מזינים שם למזהה האפליקציה.
- מזינים מזהה צוות. הערך הזה צריך להיות זהה למזהה הצוות בכרטיסייה 'חברות'.
- בקטע App ID Suffix (סיומת של מזהה האפליקציה), בוחרים באפשרות Explicit App ID (מזהה אפליקציה מפורש) ומזינים את מזהה החבילה.

- בקטע App Services (שירותי אפליקציות), מוודאים שהאפשרות Push Notifications (התראות פוש) מסומנת.

- לוחצים על המשך ומוודאים שהפרטים שהזנתם נכונים:
- הערך של Identifier צריך להיות זהה לצירוף של הערכים של Team ID ושל מזהה חבילה
- התראות בדחיפה צריכות להיות ניתנות להגדרה
- לוחצים על Register (הרשמה) כדי ליצור את מזהה האפליקציה.
יצירת הפרופיל
כדי לבדוק את האפליקציה בזמן הפיתוח, צריך פרופיל לפיתוח כדי לתת למכשירים הרשאה להריץ אפליקציה שעדיין לא פורסמה ב-App Store.
- עוברים אל Apple Developer Member Center ונכנסים לחשבון.
- עוברים אל Certificates, Identifiers and Profiles (אישורים, מזהים ופרופילים).
- בתפריט הנפתח בפינה הימנית העליונה, בוחרים באפשרות iOS, tvOS, watchOS אם היא לא נבחרה כבר, ואז עוברים אל פרופילים.
- לוחצים על הלחצן + כדי ליצור פרופיל חדש.

- בוחרים באפשרות פיתוח אפליקציות ל-iOS כסוג פרופיל ההקצאה ולוחצים על המשך.

- בתפריט הנפתח, בוחרים את מזהה האפליקציה שרוצים להשתמש בו ולוחצים על המשך.
- בוחרים את אישור הפיתוח ל-iOS של מזהה האפליקציה שבחרתם בשלב הקודם ולוחצים על המשך.
- בוחרים את מכשירי ה-iOS שרוצים לכלול בפרופיל ההקצאה ולוחצים על המשך. חשוב לבחור את כל המכשירים שרוצים להשתמש בהם לבדיקה.
- מזינים שם לפרופיל ההקצאה (לדוגמה, MessagingExampleProfile) ולוחצים על יצירה.

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

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

אם יש לכם פרויקט קיים ב-Google Cloud Platform (GCP), אתם יכולים לבחור את הפרויקט מהתפריט הנפתח כדי להוסיף לו משאבי Firebase.
- (אופציונלי) אם אתם יוצרים פרויקט חדש, אתם יכולים לערוך את מזהה הפרויקט.
מערכת Firebase מקצה באופן אוטומטי מזהה ייחודי לפרויקט Firebase. במאמר 'הסבר על פרויקטים ב-Firebase' מוסבר איך Firebase משתמש במזהה הפרויקט.
- לוחצים על המשך.
- הגדרתם את Google Analytics לפרויקט, כך שתוכלו ליהנות מחוויה אופטימלית בשימוש בכל אחד מהמוצרים הבאים של Firebase:
- Firebase Crashlytics
- Firebase Predictions
- העברת הודעות בענן ב-Firebase
- העברת הודעות בתוך האפליקציה ב-Firebase
- הגדרת תצורה מרחוק ב-Firebase
- Firebase A/B Testing
כשמוצגת בקשה, בוחרים להשתמש בחשבון Google Analytics קיים או ליצור חשבון חדש. אם בוחרים ליצור חשבון חדש, בוחרים את מיקום הדיווח ב-Analytics, ואז מאשרים את הגדרות שיתוף הנתונים ואת התנאים של Google Analytics עבור הפרויקט.


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

- מזינים את מזהה החבילה של האפליקציה בשדה מזהה החבילה ל-iOS.
- (אופציונלי) מזינים פרטים נוספים על האפליקציה: שם חיבה לאפליקציה ומזהה App Store.
- לוחצים על Register app (רישום האפליקציה).

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

אם יש לכם כמה מזהי חבילות בפרויקט, אתם צריכים לשייך כל מזהה חבילה לאפליקציה רשומה במסוף Firebase, כדי שלכל אפליקציה יהיה קובץ GoogleService-Info.plist משלה.
סוגרים את XCode.
מוסיפים את Firebase SDKs לאפליקציה
מומלץ להשתמש ב-CocoaPods כדי להתקין את ספריות Firebase. עם זאת, אם אתם לא רוצים להשתמש ב-CocoaPods, אתם יכולים לשלב את מסגרות ה-SDK ישירות או להשתמש בגרסת הבטא של Swift Package Manager.
- צריך ליצור Podfile אם אין עדיין. אם אתם משתמשים בדוגמה להפעלה מהירה, פרויקט Xcode וקובץ Podfile (עם pods) כבר קיימים.
$ cd MessagingExample $ pod init
- מוסיפים ל-Podfile את ה-pods של Firebase שרוצים להשתמש בהם באפליקציה.
אתם יכולים להוסיף לאפליקציית iOS כל אחד ממוצרי Firebase הנתמכים.
בדוגמה של ההפעלה המהירה, נוספו Google Analytics ו-Firebase Cloud Messaging SDKs.
# Add the Firebase pod for Google Analytics pod 'Firebase/Analytics' # Add the pod for Firebase Cloud Messaging pod 'Firebase/Messaging'
- מתקינים את ה-pods ואז פותחים את הקובץ
.xcworkspaceכדי לראות את הפרויקט ב-Xcode:
$ pod install
- פותחים את
MessagingExample.xcworkspaceולוחצים על הבא במסוף Firebase.
הפעלת Firebase באפליקציה
צריך להוסיף לאפליקציה קוד אתחול של Firebase.
מייבאים את מודול Firebase ומגדירים מופע משותף (במדגם ההפעלה המהירה, מודול Firebase כבר מיובא).
- מייבאים את מודול Firebase אל
UIApplicationDelegate:
AppDelegate.swift
import UIKit
import Firebase // Add this line
- מגדירים מופע משותף של FirebaseApp, בדרך כלל בשיטה
application:didFinishLaunchingWithOptions:של האפליקציה:
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure() // Add this line
return true
}
- לוחצים על הבא במסוף Firebase.

- ערכות ה-SDK של Firebase מתווספות לאפליקציה. לוחצים על המשך למסוף.

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

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

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

הרשמה לקבלת התראות מרחוק
בתחילת ההפעלה או בנקודה הרצויה בתהליך השימוש באפליקציה, רושמים את האפליקציה לקבלת התראות מרחוק.
בדוגמה של ההפעלה המהירה, registerForRemoteNotifications כבר נוסף.
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
// [START register for remote notifications]
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()
// [END register for remote notifications]
return true
}
מקצים את נכס הנציג של UNUserNotificationCenter על ידי הוספת השורות האלה בסוף הקובץ AppDelegate.swift.
AppDelegate.swift
@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
// 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
// Print full message.
print(userInfo)
completionHandler()
}
}
הגדרת נציג לניהול הודעות
כדי לקבל אסימוני רישום, צריך להטמיע את פרוטוקול ההעברה של הודעות ולהגדיר את המאפיין FIRMessaging של delegate אחרי הקריאה ל-[FIRApp configure]. לדוגמה, אם נציג האפליקציה תואם לפרוטוקול הנציג של ההודעות, אפשר להגדיר את הנציג ב-application:didFinishLaunchingWithOptions: לעצמו (במדריך לתחילת העבודה, הוא כבר מוגדר).
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure()
Messaging.messaging().delegate = self // Add this line
// [START register for remote notifications]
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()
// [END register for remote notifications]
return true
}
מקצים את נכס הנציג של FIRMessaging על ידי הוספת השורות האלה בסוף הקובץ AppDelegate.swift.
AppDelegate.swift
extension AppDelegate : MessagingDelegate {
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)
}
}
הוספת יכולות
הוספתם את היכולת 'התראות פוש' בקטע 'יצירת מזהה אפליקציה', אבל אתם צריכים להוסיף את היכולת הזו גם ב-XCode. כדי לעשות את זה, פועלים לפי השלבים הבאים (השלבים שבהמשך מתייחסים ל-XCode 12.3):
- לוחצים על שם הפרויקט באזור הניווט.
- לוחצים על חתימה ויכולות.
- לוחצים על + יכולת.

- לוחצים לחיצה כפולה על Background Modes (מצבי רקע).
- לוחצים שוב על + יכולת.
- לוחצים לחיצה כפולה על התראות בדחיפה.
- מסמנים את האפשרות התראות מרחוק בקטע מצבי רקע.

6. שליחת הודעת התראה
כדי לשלוח הודעת בדיקה:
- מתקינים את האפליקציה במכשיר היעד ומריצים אותה. תצטרכו לאשר את בקשת ההרשאה לקבלת התראות מרחוק.
- מקבלים את טוקן הרישום ביומן של XCode.

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

- לוחצים על שליחת הודעת בדיקה.
- בשדה עם התווית Add an FCM registration token (הוספת אסימון רישום ל-FCM), מזינים את אסימון הרישום שהשגתם בשלב 2.
- לוחצים על בדיקה.
אחרי שלוחצים על בדיקה, המכשיר של הלקוח שמטורגט (עם האפליקציה ברקע) אמור לקבל את ההתראה במרכז ההתראות.
כדי לקבל תובנות לגבי מסירת הודעות לאפליקציה, אפשר לעיין בלוח הבקרה של דיווח FCM, שבו מתועד מספר ההודעות שנשלחו ונפתחו במכשירי iOS ו-Android.

7. מזל טוב
מזל טוב, שלחת הודעת בדיקה בהצלחה!
יש עוד הרבה פונקציות והגדרות ב-FCM, כמו מינוי לנושאים.
אם אתם רוצים לקבל מידע נוסף על התכונות האלה, אתם יכולים לעיין במסמך הרשמי למפתחים.
מה השלב הבא?
כדאי לנסות את ה-Codelab הזה.