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 באמצעות Unity

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

לפני שאתה מתחיל

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

  • התקן את Unity 2017.4 ואילך. גרסאות קודמות עשויות גם להיות תואמות אך לא יתמכו באופן פעיל.

  • (iOS בלבד) התקן את הדברים הבאים:

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

    • עבור iOS - מכוון ל- iOS 10 ואילך
    • לאנדרואיד - מכוון ל- API ברמה 16 (Jelly Bean) ואילך
  • הגדר מכשיר או השתמש באמולטור להפעלת פרויקט Unity שלך.

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

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

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

שלב 1: צור פרויקט Firebase

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

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

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

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

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

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

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

  4. הזן את המזהים / ספציפיים הספציפיים של פרויקט Unity שלך.

    • עבור iOS - הזן את מזהה ה- iOS של פרויקט Unity שלך בשדה מזהה חבילה של iOS .

    • עבור Android - הזן את מזהה ה- Android של פרויקט Unity שלך בשדה שם חבילות Android .
      המונחים שם החבילה ומזהה היישום משמשים לרוב להחלפה.

  5. (אופציונלי) הזן את הכינוי (ים) הספציפיים לפלטפורמה של פרויקט Unity שלך.
    כינויים אלה הם מזהים פנימיים, מזהים נוחות וגלויים לך רק במסוף Firebase.

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

שלב 3: הוסף קבצי תצורה של Firebase

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

    • עבור iOS - לחץ על הורד את GoogleService-Info.plist .

    • לאנדרואיד - לחץ על הורד google-services.json .

  2. פתח את חלון הפרויקט של פרויקט Unity שלך, ואז העבר את קובץ התצורה שלך לתיקיית Assets .

  3. חזרה למסוף Firebase, בתהליך העבודה של ההתקנה, לחץ על הבא .

שלב 4: הוסף ערכות SDK של Firebase

  1. במסוף Firebase, לחץ על הורד Firebase Unity SDK , ואז פתח את ה- SDK במקום נוח.

    • תוכל להוריד את ה- SDK של Firebase Unity שוב בכל עת.

    • SDK Firebase Unity אינו ספציפי לפלטפורמה.

  2. בפרויקט האחדות הפתוח שלך, נווט אל נכסים > חבילת ייבוא > חבילה מותאמת אישית .

  3. מתוך SDK הלא מרוכז, בחר במוצרי Firebase הנתמכים שבהם ברצונך להשתמש באפליקציה שלך.

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

    ניתוח מופעל

    • הוסף את חבילת Firebase עבור Google Analytics: FirebaseAnalytics.unitypackage
    • הוסף את החבילה עבור העברת הודעות בענן של FirebaseMessaging.unitypackage : FirebaseMessaging.unitypackage

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

    הוסף את החבילה עבור העברת הודעות בענן של FirebaseMessaging.unitypackage : FirebaseMessaging.unitypackage

  4. בחלון ייבוא ​​חבילת אחדות , לחץ על ייבוא .

  5. חזרה למסוף Firebase, בתהליך העבודה של ההתקנה, לחץ על הבא .

שלב 5: אשר את דרישות גרסת שירותי Google Play

Firebase Unity SDK עבור Android דורש שירותי Google Play , שעליהם להיות מעודכנים לפני שניתן יהיה להשתמש ב- SDK.

הוסף את הקוד הבא בתחילת היישום שלך. באפשרותך לחפש ולעדכן את שירותי Google Play לגרסה הנדרשת על ידי Firebase Unity SDK לפני שאתה קורא לשיטות אחרות ב- SDK.

Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
  var dependencyStatus = task.Result;
  if (dependencyStatus == Firebase.DependencyStatus.Available) {
    // Create and hold a reference to your FirebaseApp,
    // where app is a Firebase.FirebaseApp property of your application class.
       app = Firebase.FirebaseApp.DefaultInstance;

    // Set a flag here to indicate whether Firebase is ready to use by your app.
  } else {
    UnityEngine.Debug.LogError(System.String.Format(
      "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
    // Firebase Unity SDK is not safe to use here.
  }
});

פרויקט האחדות שלך רשום ומוגדר לשימוש ב- Firebase.

שלב 7: הוסף מסגרת התראות משתמשים

  1. לחץ על הפרויקט ב- Xcode, ואז בחר בכרטיסיה כללי מאזור העורך .

  2. גלול מטה למסגרות ולספריות מקושרות , ואז לחץ על כפתור + כדי להוסיף מסגרת.

  3. בחלון שמופיע, גלול אל UserNotifications.framework , לחץ על ערך זה ולחץ על הוסף .

שלב 8: אפשר התראות דחיפה

  1. לחץ על הפרויקט ב- Xcode, ואז בחר בכרטיסייה יכולות באזור העורך .

  2. החלף להודעות דחיפה למצב On.

  3. גלול מטה למצבי רקע ואז העבר אותו למצב מופעל .

  4. בחר בתיבת הסימון התראות מרחוק תחת מצבי רקע .

אתחל את הודעות הענן של Firebase

ספריית הודעות הענן של Firebase TokenReceived בעת הוספת מטפלים באירועים TokenReceived או MessageReceived .

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

בנוסף, יהיה עליך להירשם לאירוע OnMessageReceived אם ברצונך להיות מסוגל לקבל הודעות נכנסות.

כל ההתקנה נראית כך:

public void Start() {
  Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
  Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
  UnityEngine.Debug.Log("Received Registration Token: " + token.Token);
}

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
  UnityEngine.Debug.Log("Received a new message from: " + e.Message.From);
}

קביעת תצורה של פעילות נקודת כניסה של Android

ב- Android, העברת הודעות בענן של Firebase מגיעה עם פעילות נקודת כניסה מותאמת אישית המחליפה את ברירת המחדל של UnityPlayerActivity . אם אינך משתמש בנקודת כניסה מותאמת אישית החלפה זו מתרחשת באופן אוטומטי ולא תצטרך לנקוט בפעולות נוספות. אפליקציות שאינן משתמשות בנקודת הכניסה המוגדרת כברירת מחדל או שמספקות Assets/Plugins/AndroidManifest.xml משלהן, יזדקקו לתצורה נוספת.

תוסף האחדות של Firebase Cloud Messaging ב- Android מגיע עם שני קבצים נוספים:

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar מכיל פעילות הנקראת MessagingUnityPlayerActivity המחליפה את UnityPlayerActivity הסטנדרטית.
  • Assets/Plugins/Android/AndroidManifest.xml מורה לאפליקציה להשתמש ב- MessagingUnityPlayerActivity כנקודת הכניסה לאפליקציה.

קבצים אלה מסופקים מכיוון UnityPlayerActivity המחדל של UnityPlayerActivity אינה מטפלת onStop onRestart , onRestart מחזור החיים של הפעילות או מיישמת את onNewIntent הדרוש להעברת Firebase Cloud Cloud כדי לטפל נכון בהודעות נכנסות.

קביעת תצורה של פעילות נקודת כניסה מותאמת אישית

אם האפליקציה שלך לא משתמשת ב- UnityPlayerActivity המוגדרת כברירת מחדל, יהיה עליך להסיר את AndroidManifest.xml המסופק ולהבטיח שהפעילות המותאמת אישית שלך תטפל כראוי בכל המעברים של מחזור החיים של Android (דוגמה כיצד לעשות זאת מוצגת להלן). אם הפעילות המותאמת אישית שלך מרחיבה את UnityPlayerActivity תוכל במקום זאת להרחיב את com.google.firebase.MessagingUnityPlayerActivity אשר מיישם את כל השיטות הדרושות.

אם אתה משתמש בפעילות מותאמת אישית ולא מאריך את com.google.firebase.MessagingUnityPlayerActivity , עליך לכלול את הקטעים הבאים בפעילות שלך.

/**
 * Workaround for when a message is sent containing both a Data and Notification payload.
 *
 * When the app is in the background, if a message with both a data and notification payload is
 * received the data payload is stored on the Intent passed to onNewIntent. By default, that
 * intent does not get set as the Intent that started the app, so when the app comes back online
 * it doesn't see a new FCM message to respond to. As a workaround, we override onNewIntent so
 * that it sends the intent to the MessageForwardingService which forwards the message to the
 * FirebaseMessagingService which in turn sends the message to the application.
 */
@Override
protected void onNewIntent(Intent intent) {
  Intent message = new Intent(this, MessageForwardingService.class);
  message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
  message.putExtras(intent);
  message.setData(intent.getData());
  startService(message);
}

/**
 * Dispose of the mUnityPlayer when restarting the app.
 *
 * This ensures that when the app starts up again it does not start with stale data.
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
  if (mUnityPlayer != null) {
    mUnityPlayer.quit();
    mUnityPlayer = null;
  }
  super.onCreate(savedInstanceState);
}

הערה לגבי מסירת הודעות באנדרואיד

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

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

לסיכום:

מצב האפליקציה הוֹדָעָה נתונים שניהם
חֲזִית Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
רקע כללי מגש המערכת Firebase.Messaging.FirebaseMessaging.MessageReceived הודעה: מגש המערכת
נתונים: בתוספות של הכוונה.

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

FCM מייצר אסימון רישום למיקוד למכשירים. כאשר נוצר אסימון, הספרייה מעלה את נתוני המזהה ואת התצורה ל- Firebase. אם ברצונך לקבל הסכמה מפורשת לפני השימוש באסימון, תוכל למנוע ייצור בזמן התצורה על ידי השבתת FCM (וב- Android, Analytics). לשם כך, הוסף ערך מטא-נתונים ל- Info.plist שלך (ולא GoogleService-Info.plist ) ב- iOS, או ל- AndroidManifest.xml ב- Android:

דְמוּי אָדָם

<?xml version="1.0" encoding="utf-8"?>
<application>
  <meta-data android:name="firebase_messaging_auto_init_enabled"
             android:value="false" />
  <meta-data android:name="firebase_analytics_collection_enabled"
             android:value="false" />
</application>

iOS

FirebaseMessagingAutoInitEnabled = NO

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

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

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

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

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
  <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="http"/>
  <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="https"/>
</intent-filter>

אפשר גם לציין תו כללי כדי להגמיש את מסנן הכוונות. לדוגמה:

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
  <data android:host="*.example.com" android:scheme="http"/>
  <data android:host="*.example.com" android:scheme="https"/>
</intent-filter>

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

הצעדים הבאים

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

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

זכור כי תזדקק ליישום שרת בכדי להשתמש בתכונות אלה.