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

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

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

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

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

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

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

    • עבור iOS - מטרות iOS 10 ומעלה
    • עבור אנדרואיד - מטרות API ברמה 19 (KitKat) ומעלה

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

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

    • עבור אנדרואיד - אמולטורים חייב להשתמש בתמונת אמולטור השימוש ב- Google Play.

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

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

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

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

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

  1. עבור אל קונסולת Firebase .

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

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

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

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

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

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

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

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

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

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

    • עבור iOS - לחץ להורדה GoogleService-info.plist.

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

  2. פתח בחלון הפרויקט של פרויקט האחדות שלך, ולאחר מכן להעביר קובץ config שלך (הים) לתוך Assets התיקייה.

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

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

  1. במסוף Firebase, לחץ על הורדה Firebase האחדות SDK, אז unzip ב- SDK איפשהו נוח.

    • ניתן להוריד את SDK האחדות Firebase שוב בכל עת.

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

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

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

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

    אנליטיקס מופעל

    • מוסיפים את החבילה Firebase עבור Google Analytics: FirebaseAnalytics.unitypackage
    • מוסיפים את החבילה עבור Firebase Cloud Messaging: FirebaseMessaging.unitypackage

    Analytics לא מופעל

    מוסיפים את החבילה עבור Firebase Cloud Messaging: FirebaseMessaging.unitypackage

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

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

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

ה- SDK האחדות Firebase עבור אנדרואיד דורש שירותים של 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.
  }
});

פרויקט Unity שלך רשום ומוגדר לשימוש ב-Firebase.

שלב 7: הוסף מסגרת להודעות משתמש

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

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

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

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

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

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

  3. גלול למטה כדי רקע מצבי, ואז לעבור אותו ביום.

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

אתחול Firebase Cloud Messaging

ספריית מסר Firebase הענן תהיה מאותחלת בעת הוספת מטפלים הוא ברמת 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, Firebase Cloud Messaging מגיע יחד עם פעילות נקודת כניסה מותאמת אישית מחליפה את ברירת המחדל UnityPlayerActivity . אם אינך משתמש בנקודת כניסה מותאמת אישית ההחלפה הזו מתרחשת אוטומטית ולא תצטרך לנקוט פעולה נוספת. Apps שאינו משתמשות פעילות נקודה הכניסה מחדל או אספקה משלהם Assets/Plugins/AndroidManifest.xml יצטרכו תצורה נוספת.

פלאגין Firebase Cloud Messaging Unity באנדרואיד מגיע עם שני קבצים נוספים:

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

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

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

אם האפליקציה שלך לא להשתמש בברירת המחדל UnityPlayerActivity תצטרך להסיר את מסופק AndroidManifest.xml ולהבטיח כי הפעילות האישית שלך כמו שצריך מטפלת בכול מעברים של מחזור חיי פעילות אנדרואיד (דוגמה איך לעשות את זה מוצג להלן). אם הפעילות האישית שלך מרחיבה 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());
  // For older versions of Firebase C++ SDK (< 7.1.0), use `startService`.
  // startService(message);
  MessageForwardingService.enqueueWork(this, 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);
}

גירסאות חדשות של Firebase C ++ SDK (7.1.0 ואילך) שימוש JobIntentService המחייב שינויים נוספים ב AndroidManifest.xml קובץ.

<service android:name="com.google.firebase.messaging.MessageForwardingService"
     android:permission="android.permission.BIND_JOB_SERVICE"
     android:exported="false" >
</service>

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

כאשר האפליקציה אינה פועלת כלל ומשתמש מקיש על הודעה, ההודעה אינה מנותבת, כברירת מחדל, דרך השיחות המובנות של 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). כדי לעשות זאת, להוסיף ערך metadata כדי שלך Info.plist (לא שלך GoogleService-Info.plist ) על אפל, או שלך AndroidManifest.xml על אנדרואיד:

דְמוּי אָדָם

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

מָהִיר

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. כדי ללמוד עוד, ראה מדגם QuickStart אשר מדגים את הפונקציה הזו.

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

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