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

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

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

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

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

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

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

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

  • הגדר מכשיר או השתמש באמולטור להפעלת פרויקט 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.

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

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

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

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

שלב 4: הוסף SDKs של Unebase Unity

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

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

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

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

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

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

    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 לגרסה הנדרשת על ידי ה- SDK של Firebase Unity לפני שתתקשר לשיטות אחרות ב- 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

ספריית מסר 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 ) על iOS, או שלך 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>

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

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

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