הוספת התראות לאפליקציה ל-iOS

1. מבוא

עדכון אחרון:6.1-2020

Firebase Cloud Messaging (FCM) הוא פתרון להעברת הודעות בפלטפורמות שונות שמאפשר לשלוח הודעות באופן מהימן ללא עלות.

באמצעות FCM, ניתן להודיע לאפליקציית לקוח על כך שאימייל חדש או נתונים אחרים זמינים לסנכרון. אפשר לשלוח התראות כדי לעודד את המשתמשים לאינטראקציה חוזרת ולשמר. בתרחישים לדוגמה כמו העברת הודעות מיידיות, הודעה יכולה להעביר מטען ייעודי (payload) בנפח של עד 4KB לאפליקציית לקוח.

איך זה עובד

הטמעת FCM כוללת שני רכיבים עיקריים לשליחה ולקבלה:

  1. סביבה מהימנה כמו Cloud Functions for Firebase או שרת אפליקציות שבו אפשר ליצור, לטרגט ולשלוח הודעות.
  2. אפליקציית לקוח ב-iOS, ב-Android או באינטרנט (JavaScript) שמקבלת הודעות דרך שירות ההעברה הספציפי לפלטפורמה.

סקירה כללית של הארכיטקטורה של FCM

6636933bbe959ef2.png

FCM מסתמך על קבוצת הרכיבים הבאה שבונים, מעבירים ומקבלים הודעות:

  1. כלים לכתיבה או לפיתוח של בקשות להודעות. הכלי 'מלחין התראות' מספק אפשרות מבוססת GUI ליצירת בקשות להתראות. כדי לקבל אוטומציה מלאה ותמיכה בכל סוגי ההודעות, עליכם ליצור בקשות להודעות בסביבת שרת מהימנה שתומכת ב-Firebase Admin SDK או בפרוטוקולים של שרת FCM. הסביבה הזו יכולה להיות Cloud Functions for Firebase , Google App Engine או שרת אפליקציות משלכם.
  2. הקצה העורפי של FCM, שמקבל (בין היתר) בקשות להודעות, מבצע מעריצים על הודעות באמצעות נושאים ויוצר מטא-נתונים של הודעות, כמו מזהה ההודעה.
  3. שכבת העברה ברמת הפלטפורמה, שמנתבת את ההודעה למכשיר המטורגט, מטפלת בשליחת ההודעות ומחילה הגדרות ספציפיות לפלטפורמה, במקרים הרלוונטיים. שכבת התעבורה הזו כוללת:
  • שכבת התעבורה של Android (ATL) למכשירי Android עם Google Play Services
  • שירות התראות (APN) של Apple למכשירי iOS
  • פרוטוקול Web Push לאפליקציות אינטרנט
  1. ה-FCM SDK במכשיר של המשתמש, שבו מוצגת ההתראה או שהטיפול בהודעה מטופל בהתאם למצב החזית/הרקע של האפליקציה וללוגיקה רלוונטית של האפליקציה.

מה תפַתחו

ב-Codelab הזה, אתם מתכננים להוסיף התראה לאפליקציה לדוגמה ל-iOS באמצעות FCM.

מה תלמדו

  • איך נרשמים או מבטלים את ההרשמה לקבלת הודעות Push
  • איך לטפל בהודעות דחיפה נכנסות
  • איך להציג התראה
  • איך מגיבים לקליקים על התראות

מה צריך להכין

  • Xcode 11.0 ואילך
  • CocoaPods 1.9.0 ואילך
  • חשבון מפתח ב-Apple
  • מכשיר iOS פיזי להפעלת האפליקציה
  • ידע בסיסי ב-Swift

2. בתהליך ההגדרה

להורדת הקוד לדוגמה

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

אפשר לקבל את הדוגמה בשתי דרכים:

  • משכפלים את המאגר של Git:
$ git clone https://github.com/firebase/quickstart-ios.git
  • הורדת קובץ ה-ZIP:

אם מורידים את המקור כקובץ ZIP, פורקים אותו ומקבלים תיקיית בסיס: quickstart-ios.

איך יוצרים אפליקציה חדשה

כדי ליצור אפליקציית בדיקה משלכם, פועלים לפי השלבים הבאים (השלבים הבאים מופיעים ב-XCode 12.3):

  1. פותחים את XCode ובוחרים באפשרות Create a new Xcode project (יצירת פרויקט Xcode חדש).
  2. בוחרים באפשרות אפליקציה ולוחצים על הבא.

e56c631b086c6d8.png

  1. מזינים את שם המוצר (למשל, MessagingExample)
  2. בוחרים באפשרות Team (אם עדיין לא יצרתם את Team, מגדירים אותו בחשבון הפיתוח של Apple).
  3. יש להזין מזהה ארגון (למשל, com.your-name)
  4. מזינים את מזהה החבילה (למשל, com.your-name.MessagingExample, הוא צריך להיות ייחודי בכל האפליקציות ל-iOS).
  5. בוחרים באפשרות Storyboard (סטוריבורד) בתפריט הנפתח Interface (ממשק).
  6. בוחרים באפשרות UIKit App Delegate בתפריט הנפתח LifeCycle (מחזור חיים).
  7. בוחרים באפשרות Swift בשפה.
  8. לוחצים על הבא.

fb860c0fa4a02818.png

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

3. הגדרת נקודות APN

יצירת מפתח האימות

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

כדי ליצור מפתח אימות:

  1. בחשבון הפיתוח, עוברים לקטע אישורים, מזהים פרופילים, ומנווטים אל Keys.

19ae87d0f00402b1.png

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

c4acd10dbc4f721f.png

  1. יש להזין תיאור למפתח האימות של ה-APN
  2. בקטע 'שירותים מרכזיים', מסמנים את תיבת הסימון של נקודות ה-APN ולוחצים על המשך.

6a3e8ff7457a8251.png

  1. לוחצים על Register ואז על Download (הורדה). כדאי לשמור את המפתח במקום מאובטח. זו הורדה חד-פעמית ואי אפשר לאחזר את המפתח מאוחר יותר.

42c205e072fbd622.png

איך יוצרים מזהה אפליקציה

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

  1. עוברים אל Apple Developer Member Center ונכנסים לחשבון.
  2. עוברים אל אישורים, מזהים ופרופילים.
  3. עוברים לקטע מזהים.
  4. לוחצים על הלחצן + כדי ליצור מזהה אפליקציה חדש. e04fc394c52a866f.png
  5. לוחצים על לחצן הבחירה מזהי אפליקציות ולוחצים על המשך.

d454fd5df3b8d93d.png

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

3bd2e836be5e0291.png

  1. כדי ליצור מזהה אפליקציה חדש:
  2. מזינים שם למזהה האפליקציה.
  3. מזינים מזהה צוות. הערך הזה חייב להתאים למזהה הצוות בכרטיסייה 'חברות במועדון'.
  4. בקטע סיומת של מזהה אפליקציה, בוחרים באפשרות מזהה אפליקציה מפורש ומזינים את מזהה החבילה. 7363c4d1962b486d.png
  5. בקטע שירותי אפליקציות, מוודאים שהאפשרות התראות בדחיפה מסומנת. 552ea08703f7e323.png
  6. לוחצים על המשך ומוודאים שהקלט נכון:
  7. הערך של Identifier צריך להתאים לשרשור הערכים של מזהה הצוות ושל מזהה החבילה
  8. התראות צריכות להיות ניתן להגדיר.
  9. לוחצים על Register כדי ליצור את מזהה האפליקציה.

יצירת הפרופיל

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

  1. עוברים אל Apple Developer Member Center ונכנסים לחשבון.
  2. עוברים אל אישורים, מזהים ופרופילים.
  3. בתפריט הנפתח שבפינה הימנית העליונה, בוחרים באפשרות iOS, tvOS, watchOS אם היא עדיין לא מסומנת, ואז עוברים אל Profiles (פרופילים).
  4. לוחצים על הלחצן + כדי ליצור פרופיל חדש. 1fa2342cfe45a925.png
  5. בוחרים באפשרות פיתוח אפליקציות ל-iOS בתור סוג הפרופיל של ניהול התצורה, ולוחצים על המשך.

507434a466220dfe.png

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

4395f04647afa997.png

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

106761fa786ba580.png

  1. לוחצים לחיצה כפולה על קובץ הפרופיל להקצאת הרשאות ידנית כדי להתקין אותו.

4. הוספה של Firebase לפרויקט iOS

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

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

  1. במסוף Firebase, לוחצים על Add project (הוספת פרויקט) ובוחרים או מזינים את השם Project name (שם הפרויקט). e462afd91c149238.png

אם יש לכם פרויקט ב-Google Cloud Platform (GCP), אתם יכולים לבחור את הפרויקט מהתפריט הנפתח כדי להוסיף משאבי Firebase לפרויקט הזה.

  1. (אופציונלי) אם יוצרים פרויקט חדש, אפשר לערוך את Project ID.

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

  1. לוחצים על המשך.
  2. מגדירים את Google Analytics לפרויקט, וכך נהנים מחוויה אופטימלית בכל אחד ממוצרי Firebase הבאים:
  • Firebase Crashlytics
  • Firebase Predictions
  • העברת הודעות בענן ב-Firebase
  • העברת הודעות בתוך האפליקציה ב-Firebase
  • הגדרת תצורה מרחוק ב-Firebase
  • Firebase A/B Testing

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

1282a798556779ab.png

48ade68c8de27d2.png

  1. לוחצים על יצירת פרויקט (או על הוספת Firebase, אם משתמשים בפרויקט קיים של GCP).

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

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

אחרי שיוצרים פרויקט ב-Firebase, אפשר להוסיף אליו אפליקציה ל-iOS.

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

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

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

93462beb642e8987.png

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

2e7a00b0008344c1.png

מוסיפים קובץ תצורה של Firebase

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

7c5e0a46d07fa9c7.png

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

סגירת XCode.

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

מומלץ להשתמש ב-CocoaPods כדי להתקין את ספריות Firebase. עם זאת, אם אתם מעדיפים לא להשתמש ב-CocoaPods, תוכלו לשלב את frameworks של ה-SDK באופן ישיר או להשתמש בגרסת הבטא של Swift Package Manager.

  1. אם עדיין אין לך קובץ Podfile, צריך ליצור אותו. אם אתם משתמשים בדוגמה של המדריך למתחילים, פרויקט ה-Xcode וה-Podfile (עם רצפי מודעות) כבר קיימים.
$ cd MessagingExample
$ pod init
  1. ל-Podfile, מוסיפים את קבוצות ה-Pod של Firebase שבהן רוצים להשתמש באפליקציה.

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

בדוגמה של המדריך למתחילים, נוספו ערכות SDK להעברת הודעות בענן ב-Google Analytics וב-Firebase.

# Add the Firebase pod for Google Analytics
pod 'Firebase/Analytics'

# Add the pod for Firebase Cloud Messaging
pod 'Firebase/Messaging'
  1. מתקינים את רצף המודעות, ואז פותחים את קובץ .xcworkspace כדי לראות את הפרויקט ב-Xcode:
$ pod install
  1. פותחים את MessagingExample.xcworkspace ולוחצים על הבא במסוף Firebase. 6d1f8230d16693e6.png

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

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

מייבאים את מודול Firebase ומגדירים מכונה משותפת (בדוגמה של המדריך למתחילים, מודול Firebase כבר יובא).

  1. מייבאים את מודול Firebase אל UIApplicationDelegate:

AppDelegate.swift

import UIKit
import Firebase // Add this line
  1. מגדירים מופע משותף של אפליקציית Firebase, בדרך כלל בשיטה application:didFinishLaunchingWithOptions: של האפליקציה:

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
  FirebaseApp.configure() // Add this line
  return true
}
  1. לוחצים על Next במסוף Firebase. f9d37423d346ff0.png
  2. ערכות Firebase SDK מתווספות לאפליקציה. לוחצים על המשך למסוף. d1b1309cd3790f66.png

5. הגדרת לקוח FCM

העלאה של מפתח האימות של נקודות ה-APN

מעלים את מפתח האימות של נקודות ה-APN ל-Firebase.

  1. בתוך הפרויקט במסוף Firebase, לוחצים על סמל גלגל השיניים, בוחרים באפשרות Project Settings (הגדרות הפרויקט) ואז בוחרים בכרטיסייה Cloud Messaging. ba8b5f95241327fe.png
  2. במפתח אימות של APNs, בקטע הגדרת אפליקציה ל-iOS, לוחצים על הלחצן העלאה. 357ddc0d4b182492.png
  3. מדפדפים למיקום שבו שמרת את המפתח, בוחרים אותו ולוחצים על פתיחה. מוסיפים את מזהה המפתח של המפתח (זמין בקטע אישורים, מזהים ופרופילים ב-Apple Developer Member Center) ולוחצים על העלאה. 3dae27f2327daf9e.png

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

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

בדוגמה של המדריך למתחילים, 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()
  }
}

איך מגדירים מי יקבל הרשאה להעברת הודעות

כדי לקבל אסימוני רישום, צריך להטמיע את הפרוטוקול להענקת גישה להעברת הודעות ולהגדיר את נכס delegate של FIRMessaging אחרי קריאה ל-[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):

  1. לוחצים על שם הפרויקט באזור Navigator.
  2. לוחצים על Signing & יכולות.
  3. לוחצים על + יכולת.

eaf41aefb3bf2c9e.png

  1. לוחצים לחיצה כפולה על מצבי רקע.
  2. לוחצים שוב על + יכולת.
  3. לוחצים לחיצה כפולה על התראות בדחיפה.
  4. מסמנים את האפשרות התראות מרחוק בקטעים מצבים ברקע.

e5d0fc08651e04a9.png

6. שליחת התראה

אפשר לשלוח הודעת בדיקה לפי השלבים הבאים:

  1. צריך להתקין את האפליקציה ולהפעיל אותה במכשיר היעד. עליך לאשר את בקשת ההרשאה כדי לקבל התראות מרחוק.
  2. מקבלים את אסימון הרישום ביומן XCode.

a2e49a92f9807d34.png

  1. מוודאים שהאפליקציה פועלת ברקע במכשיר.
  2. פותחים את מלחין ההתראות ובוחרים באפשרות התראה חדשה.
  3. כותבים את הטקסט של ההודעה. f485d7fbd2456ae0.png
  4. בוחרים באפשרות שליחת הודעת בדיקה.
  5. בשדה הוספת אסימון רישום של FCM, מזינים את אסימון הרישום שקיבלתם בשלב 2.
  6. לוחצים על בדיקה.

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

כדי לקבל תובנות לגבי שליחת הודעות לאפליקציה שלכם, אפשר להיכנס למרכז הבקרה לדיווח של FCM, שבו נרשם מספר ההודעות שנשלחו ונפתחו במכשירי iOS ו-Android.

6570eea7b5228513.png

7. מזל טוב

מזל טוב, שלחת בהצלחה הודעת בדיקה!

יש עוד הרבה פונקציות והגדרות אישיות ב-FCM, כמו מינוי לנושא.

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

מה השלב הבא?

כדאי לנסות כמה מ-Codelabs האלה.

קריאה נוספת