إعداد تطبيق عميل "المراسلة عبر السحابة الإلكترونية من Firebase" باستخدام Unity

لكتابة تطبيق عميل "المراسلة عبر السحابة الإلكترونية من Firebase" من عدّة منصات باستخدام Unity، استخدِم واجهة برمجة تطبيقات المراسلة عبر السحابة الإلكترونية من Firebase تعمل حزمة Unity SDK على كل من Android وApple، وعليك ضبط بعض الإعدادات الإضافية. لكل نظام أساسي.

قبل البدء

المتطلبات الأساسية

  • تثبيت Unity 2019.1 أو إصدار أحدث. وقد تكون الإصدارات السابقة متوافقة أيضًا ولكن لن يتم دعمها بشكل نشط. يجب أخذ دعم Unity 2019.1 في الاعتبار ، ولن يتم دعمها بشكل نشط بعد المشروع الرئيسي التالي .

  • (أنظمة Apple الأساسية فقط) ثبِّت ما يلي:

    • Xcode 13.3.1 أو إصدار أحدث
    • الإصدار 1.12.0 من CocoaPods أو إصدار أحدث
  • احرص على أن يستوفي مشروعك في Unity المتطلبات التالية:

    • لنظام التشغيل iOS: يستهدف الإصدار 11 من نظام التشغيل iOS أو الإصدارات الأحدث.
    • لنظام التشغيل tvOS - يستهدف الإصدار tvOS 12 أو الإصدارات الأحدث.
    • لنظام التشغيل Android: يستهدف المستوى 19 من واجهة برمجة التطبيقات (KitKat) أو أعلى
  • ابدأ إعداد جهاز أو استخدام محاكيًا لتشغيل مشروع Unity.

    • على أجهزة iOS أو tvOS: عليك إعداد جهاز فعلي لتشغيل التطبيق، وإكمال هذه المهام:

      • احصل على مفتاح مصادقة الإشعارات الفورية من Apple من أجل حساب مطوّر برامج Apple:
      • تفعيل الإشعارات الفورية في XCode ضمن التطبيق > الإمكانات:
    • على أجهزة Android — يجب على المحاكيات استخدام صورة المحاكي في Google Play.

إذا لم يكن لديك مشروع Unity ولم يسبق لك سوى تجربة منصة Firebase يمكنك تنزيل أحد نماذج البدء السريع لدينا.

الخطوة 1: إنشاء مشروع على Firebase

يجب إنشاء منصة Firebase لتتمكّن من إضافة منصة Firebase إلى مشروع Unity. لربطه بمشروع Unity. انتقِل إلى مقالة التعرّف على Firebase. المشاريع للاطّلاع على مزيد من المعلومات حول مشاريع Firebase.

الخطوة 2: تسجيل تطبيقك في Firebase

يمكنك تسجيل تطبيق أو لعبة واحدة أو أكثر لربطها بحسابك على Firebase. مشروعك.

  1. انتقِل إلى وحدة تحكُّم Firebase.

  2. في منتصف صفحة النظرة العامة على المشروع، انقر على رمز Unity. () لبدء عملية الإعداد

    إذا سبق لك إضافة تطبيق إلى مشروعك على Firebase، انقر على إضافة تطبيق. لعرض خيارات النظام الأساسي.

  3. اختَر التصميم المستهدَف لمشروع Unity الذي تريد تسجيله، أو يمكنك اختيار تسجيل كلا الهدفَين الآن في الوقت نفسه.

  4. أدخِل أرقام التعريف الخاصة بالمنصّة الخاصة بمشروع Unity.

    • على أجهزة iOS: أدخِل رقم تعريف iOS لمشروع Unity في حزمة iOS رقم التعريف .

    • على أجهزة Android: أدخِل معرّف Android لمشروع Unity في حزمة Android name.
      غالبًا ما يتم استخدام المصطلحين اسم الحزمة ورقم تعريف التطبيق. بالتبادل.

  5. (اختياري) أدخِل الأسماء المستعارة الخاصة بمنصة مشروع Unity.
    هذه الألقاب هي معرّفات داخلية ومعرّفات ملائمة ومرئية فقط. إلى وحدة تحكم Firebase.

  6. انقر على تسجيل التطبيق.

الخطوة 3: إضافة ملفات إعداد Firebase

  1. احصل على ملفات إعداد Firebase الخاصة بالنظام الأساسي في سير عمل إعداد "وحدة تحكُّم Firebase".

    • لنظام التشغيل iOS - انقر على تنزيل GoogleService-Info.plist.

    • بالنسبة إلى Android: انقر على تنزيل google-services.json.

  2. افتح نافذة المشروع الخاصة بمشروع Unity، ثم انقل الإعدادات. من الملفات في المجلد Assets.

  3. في "وحدة تحكُّم Firebase"، انقر على التالي في سير عمل الإعداد.

الخطوة 4: إضافة حِزم تطوير البرامج (SDK) الخاصة بمنصّة Firebase Unity

  1. في وحدة تحكُّم Firebase، انقر على تنزيل حزمة تطوير البرامج (SDK) لمنصة Firebase Unity، ثم فك الضغط. SDK في مكان ما مناسب.

  2. في مشروع Unity المفتوح، انتقل إلى مواد العرض > استيراد حزمة > الحزمة المخصّصة:

  3. من حزمة SDK غير المضغوطة، اختَر منصة Firebase المتوافقة المنتجات التي تريد استخدامها في تطبيقك.

    للحصول على تجربة مثالية باستخدام "المراسلة عبر السحابة الإلكترونية من Firebase"، نقترح عليك تفعيل "إحصاءات Google" في مشروعك. وكجزء من عملية إعداد "إحصاءات Google"، عليك أيضًا إضافة حزمة Firebase لبرنامج "إحصاءات Google" إلى تطبيقك.

    تفعيل الإحصاءات

    • إضافة حزمة Firebase لبرنامج "إحصاءات Google": FirebaseAnalytics.unitypackage
    • إضافة حزمة "المراسلة عبر السحابة الإلكترونية من Firebase": FirebaseMessaging.unitypackage

    عدم تفعيل الإحصاءات

    إضافة حزمة "المراسلة عبر السحابة الإلكترونية من Firebase": FirebaseMessaging.unitypackage

  4. في نافذة استيراد حزمة Unity، انقر على استيراد.

  5. في "وحدة تحكُّم Firebase"، انقر على التالي في سير عمل الإعداد.

الخطوة 5: التأكّد من متطلبات إصدار "خدمات Google Play"

تتطلّب حزمة تطوير البرامج (SDK) لمنصة Firebase Unity لنظام التشغيل Android خدمات Google Play، التي يجب أن يكون مُحدّثًا قبل استخدام حزمة SDK.

أضف عبارة using ورمز الإعداد التالي في بداية التطبيق. يمكنك البحث عن "خدمات Google Play" أو تحديثها اختياريًا إلى تتطلّبه حزمة تطوير البرامج (SDK) Unity من Firebase قبل طلب أي إصدار في حزمة SDK.

using Firebase.Extensions;
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(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.

تحميل مفتاح مصادقة أسماء نقاط الوصول (APN) إلى خدمة الدعم في Apple

حمِّل مفتاح مصادقة أسماء نقاط الوصول إلى Firebase. إذا لم يكن لديك مفتاح مصادقة لأسماء نقاط الوصول (APN)، اح��ص على إن��اء مفتاح ��ي مركز أعضاء مطوّري برامج Apple

  1. داخل مشروعك في وحدة تحكُّم Firebase، اختَر رمز الترس، اختَر إعدادات المشروع، ثم اختَر المراسلة عبر السحابة الإلكترونية.

  2. في مفتاح مصادقة أسماء نقاط الوصول (APN) ضمن ضبط تطبيق iOS، انقر على تحميل .

  3. تصفح المكان الذي حفظت فيه مفتاحك، وحدده، ثم انقر انقر على فتح. أضِف معرّف المفتاح للمفتاح (المتوفّر في Apple Developer Member Center) وانقر على تحميل:

تفعيل الإشعارات الفورية على أنظمة Apple الأساسية

الخطوة 1: إضافة إطار عمل لإشعارات المستخدمين

  1. انقر على المشروع في Xcode، ثم اختَر علامة التبويب General (عام) من منطقة المحرِّر:

  2. مرِّر لأسفل إلى أُطر العمل والمكتبات المرتبطة، ثم انقر على + لإضافة إطار عمل.

  3. في النافذة التي تظهر، انتقِل إلى UserNotifications.framework، وانقر على. هذا الإدخال، ثم انقر على إضافة.

الخطوة 2: تفعيل الإشعارات الفورية

  1. انقر على المشروع في Xcode، ثم اختَر علامة التبويب الإمكانات من منطقة المحرِّر:

  2. بدِّل مفتاح الإشعارات الفورية إلى تفعيل.

  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

على نظام التشغيل Android، تأتي خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" مزودة بنقطة دخول مخصّصة نشاط يحل محل UnityPlayerActivity التلقائية. في حال عدم استخدام نقطة دخول مخصصة يحدث هذا الاستبدال تلقائيًا يتعين عليك اتخاذ أي إجراء إضافي. التطبيقات التي لا تستخدم نقطة الدخول التلقائية سيحتاج النشاط أو التي توفر Assets/Plugins/AndroidManifest.xml خاصة بها إعدادات إضافية.

يتضمّن Android مكوّن Unity الإضافي من Firebase Cloud Messaging على الملفات الإضافية:

  • يحتوي Assets/Plugins/Android/libmessaging_unity_player_activity.jar على نشاط يسمى MessagingUnityPlayerActivity ويحل محل المعيار UnityPlayerActivity
  • يتم توجيه Assets/Plugins/Android/AndroidManifest.xml إلى التطبيق لاستخدام MessagingUnityPlayerActivity كنقطة دخول إلى التطبيق

يتم توفير هذه الملفات لأنّ UnityPlayerActivity التلقائي لا التعامل مع انتقالات النشاط البدني onStop وonRestart أو تنفيذ onNewIntent وهو ضروري لخدمة "المراسلة عبر السحابة الإلكترونية من Firebase" التعامل مع الرسائل الواردة.

تهيئة نشاط نقطة دخول مخصص

إذا كان تطبيقك لا يستخدم 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());
  // 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++ (الإصدار 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>

ملاحظة حول تسليم الرسائل على Android

عندما لا يكون التطبيق قيد التشغيل على الإطلاق وينقر المستخدم على إشعار، لا يتم توجيه الرسالة بشكل تلقائي من خلال خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" المدمجة مع معاودة الاتصال. في هذه الحالة، يتم استلام حمولات الرسائل من خلال Intent. المستخدم لبدء التطبيق.

الرسائل التي يتم استلامها أثناء عمل التطبيق في الخلفية تتضمن محتوى المستخدم في حقل الإشعار لملء إشعار لوحة النظام، ولكن عدم إرسال محتوى الإشعار إلى خدمة "المراسلة عبر السحابة الإلكترونية من Firebase". أي، لن يكون FirebaseMessage.Notification فارغًا.

وباختصار:

حالة التطبيق الإشعار البيانات كلاهما
لون الواجهة Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
الخلفية علبة النظام Firebase.Messaging.FirebaseMessaging.MessageReceived إشعار: لوحة النظام
البيانات: في سياقات الهدف.

منع الإعداد التلقائي

تنشئ خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" رمزًا مميّزًا للتسجيل من أجل استهداف الأجهزة. عندما يتم إنشاء رمز مميز، تقوم المكتبة بتحميل ملف والمعرّف وبيانات التهيئة إلى Firebase. إذا كنت تريد الحصول على لقطة شاشة الموافقة قبل استخدام الرمز المميّز، يمكنك منع الإنشاء في وقت الإعداد من خلال إيقاف ميزة "المراسلة عبر السحابة الإلكترونية من Firebase" (وفي Android، "إحصاءات Google"). للقيام بذلك، أضف قيمة بيانات تعريف إلى Info.plist (وليس GoogleService-Info.plist) على Apple، أو AndroidManifest.xml على Android:

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>

Swift

FirebaseMessagingAutoInitEnabled = NO

لإعادة تفعيل خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"، يمكنك إجراء مكالمة في بيئة التشغيل:

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

تظل هذه القيمة سارية في جميع عمليات إعادة تشغيل التطبيق بعد ضبطها.

تسمح ميزة "المراسلة عبر السحابة الإلكترونية من Firebase" بإرسال الرسائل التي تحتوي على رابط لصفحة في تطبيقك. لاستلام رسائل تحتوي على رابط لصفحة في التطبيق، يجب إضافة فلتر أهداف جديد. إلى النشاط الذي يعالج الروابط لمواضع معيّنة لتطبيقك. يجب أن يعمل فلتر الأهداف التقاط روابط لمواضع معينة لنطاقك. إذا لم تتضمّن رسائلك رابطًا لموضع معيّن، هذه التهيئة ليست ضرورية. في ملف 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. لمزيد من المعلومات، يُرجى مراجعة نموذج للبدء السريع الذي يوضح هذه الوظيفة.

لإضافة سلوك آخر أكثر تقدمًا ��لى تطبيقك، يُرجى الاطّلاع على أدلة الإرسال الرسائل الواردة من خادم التطبيق:

ضع في اعتبارك أنك بحاجة إلى تنفيذ الخادم للاستفادة من هذه الجديدة.