لكتابة تطبيق عميل Firebase Cloud Messaging عبر الأنظمة الأساسية باستخدام Unity ، استخدم Firebase Cloud Messaging API. تعمل Unity SDK مع كل من Android و Apple ، مع بعض الإعداد الإضافي المطلوب لكل نظام أساسي.
قبل ان تبدأ
المتطلبات الأساسية
قم بتثبيت Unity 2019.1 أو أحدث. قد تكون الإصدارات السابقة متوافقة أيضًا ولكن لن يتم دعمها بشكل نشط. يعتبر دعم Unity 2019.1 مهملًا ، ولن يتم دعمه بشكل نشط بعد الإصدار الرئيسي التالي.
(أنظمة Apple الأساسية فقط) قم بتثبيت ما يلي:
- Xcode 13.3.1 أو أعلى
- CocoaPods 1.10.0 أو أعلى
تأكد من أن مشروع الوحدة الخاص بك يلبي هذه المتطلبات:
- لنظام iOS - يستهدف iOS 11 أو أعلى
- بالنسبة إلى tvOS - يستهدف tvOS 12 أو أعلى
- لنظام التشغيل Android - يستهدف مستوى API 19 (KitKat) أو أعلى
قم بإعداد جهاز أو استخدام محاكي لتشغيل مشروع الوحدة الخاص بك.
لنظام iOS أو tvOS - قم بإعداد جهاز مادي لتشغيل تطبيقك ، وأكمل هذه المهام:
- احصل على مفتاح مصادقة Apple Push Notification لحساب Apple Developer الخاص بك.
- قم بتمكين دفع الإخطارات في XCode ضمن التطبيق > القدرات .
لنظام Android - يجب أن تستخدم المحاكيات صورة المحاكي مع Google Play.
- سجّل الدخول إلى Firebase باستخدام حساب Google الخاص بك.
إذا لم يكن لديك بالفعل مشروع Unity وترغب فقط في تجربة أحد منتجات Firebase ، فيمكنك تنزيل إحدى عينات البدء السريع الخاصة بنا.
الخطوة 1: أنشئ مشروع Firebase
قبل أن تتمكن من إضافة Firebase إلى مشروع Unity الخاص بك ، تحتاج إلى إنشاء مشروع Firebase للاتصال بمشروع Unity الخاص بك. تفضل بزيارة فهم مشاريع Firebase لمعرفة المزيد حول مشاريع Firebase.
الخطوة 2: تسجيل تطبيقك في Firebase
يمكنك تسجيل تطبيق أو لعبة واحدة أو أكثر للتواصل مع مشروع Firebase.
انتقل إلى وحدة تحكم Firebase .
في وسط صفحة نظرة عامة على المشروع ، انقر فوق أيقونة الوحدة (
) لبدء سير عمل الإعداد.إذا كنت قد أضفت بالفعل تطبيقًا إلى مشروع Firebase ، فانقر فوق إضافة تطبيق لعرض خيارات النظام الأساسي.
حدد أي هدف بناء لمشروع الوحدة الخاص بك الذي ترغب في تسجيله ، أو يمكنك حتى تحديد تسجيل كلا الهدفين الآن في نفس الوقت.
أدخل المعرف (المعرفات) الخاص بالنظام الأساسي لمشروع الوحدة الخاص بك.
لنظام iOS - أدخل معرف iOS لمشروع Unity الخاص بك في حقل معرف حزمة iOS .
لنظام Android - أدخل معرف Android لمشروع Unity الخاص بك في حقل اسم حزمة Android .
غالبًا ما يتم استخدام المصطلحين اسم الحزمة ومعرف التطبيق بالتبادل.
افتح مشروع Unity الخاص بك في Unity IDE الخاص بك ، ثم انتقل إلى قسم الإعدادات لكل نظام أساسي:
لنظام iOS - انتقل إلى إنشاء الإعدادات> iOS .
لنظام Android - انتقل إلى Android> إعدادات المشغل> إعدادات أخرى .
معرف مشروع الوحدة الخاص بك هو قيمة معرف الحزمة (معرف المثال:
com.yourcompany.yourproject
).(اختياري) أدخل الألقاب الخاصة بالنظام الأساسي لمشروع الوحدة الخاص بك.
هذه الأسماء المستعارة هي معرفات داخلية وملائمة ولا تظهر إلا لك في وحدة تحكم Firebase.انقر فوق تسجيل التطبيق .
الخطوة 3: أضف ملفات تهيئة Firebase
احصل على ملف (ملفات) تكوين Firebase الخاص بالنظام الأساسي في سير عمل إعداد وحدة تحكم Firebase.
لنظام iOS - انقر فوق تنزيل GoogleService-Info.plist .
لنظام Android - انقر فوق تنزيل google-services.json .
يحتوي ملف تهيئة Firebase على معرّفات فريدة ولكنها غير سرية لمشروعك. لمعرفة المزيد حول ملف التكوين هذا ، تفضل بزيارة فهم مشاريع Firebase .
يمكنك تنزيل ملف تهيئة Firebase مرة أخرى في أي وقت.
تأكد من عدم إلحاق اسم ملف التكوين بأحرف إضافية ، مثل
(2)
.
افتح نافذة المشروع في مشروع الوحدة الخاص بك ، ثم انقل ملف (ملفات) التكوين إلى مجلد
Assets
.مرة أخرى في وحدة تحكم Firebase ، في سير عمل الإعداد ، انقر فوق "التالي" .
الخطوة 4: أضف حزم Firebase Unity SDK
في وحدة تحكم Firebase ، انقر على تنزيل Firebase Unity SDK ، ثم قم بفك ضغط SDK في مكان مناسب.
يمكنك تنزيل Firebase Unity SDK مرة أخرى في أي وقت.
إن حزمة Firebase Unity SDK ليست خاصة بالنظام الأساسي.
في مشروع Unity المفتوح ، انتقل إلى Assets > Import Package > Custom Package .
من حزمة SDK غير المضغوطة ، حدد منتجات Firebase المدعومة التي تريد استخدامها في تطبيقك.
للحصول على تجربة مثالية مع Firebase Cloud Messaging ، نوصي بتمكين Google Analytics في مشروعك. أيضًا ، كجزء من إعداد Analytics ، تحتاج إلى إضافة حزمة Firebase لبرنامج Analytics إلى تطبيقك.
تم تمكين التحليلات
- أضف حزمة Firebase لبرنامج Google Analytics:
FirebaseAnalytics.unitypackage
- أضف الحزمة لـ Firebase Cloud Messaging:
FirebaseMessaging.unitypackage
لم يتم تمكين التحليلات
أضف الحزمة لـ Firebase Cloud Messaging:
FirebaseMessaging.unitypackage
- أضف حزمة Firebase لبرنامج Google Analytics:
في نافذة استيراد حزمة الوحدة ، انقر فوق استيراد .
مرة أخرى في وحدة تحكم 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.
تفعيل دفع الإخطارات على منصات Apple
الخطوة 1: إضافة إطار عمل إشعارات المستخدم
انقر فوق المشروع في Xcode ، ثم حدد علامة التبويب "عام" من منطقة المحرر .
قم بالتمرير لأسفل إلى الأطر والمكتبات المرتبطة ، ثم انقر فوق الزر + لإضافة إطار عمل.
في النافذة التي تظهر ، قم بالتمرير إلى UserNotifications.framework ، وانقر فوق ذلك الإدخال ، ثم انقر فوق إضافة .
الخطوة 2: تفعيل دفع الإخطارات
انقر فوق المشروع في Xcode ، ثم حدد علامة التبويب "القدرات" من منطقة المحرر .
قم بتبديل دفع الإخطارات إلى تشغيل .
قم بالتمرير لأسفل إلى أوضاع الخلفية ، ثم قم بتبديلها إلى وضع التشغيل .
حدد مربع الاختيار الإخطارات عن بعد ضمن أوضاع الخلفية .
قم بتهيئة Firebase Cloud Messaging
ستتم تهيئة مكتبة Firebase Cloud Message عند إضافة معالجات لأحداث 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 Cloud Messaging مجمعة مع نشاط نقطة إدخال مخصص يحل محل UnityPlayerActivity
الافتراضي. إذا كنت لا تستخدم نقطة إدخال مخصصة ، فسيحدث هذا الاستبدال تلقائيًا ولن تضطر إلى اتخاذ أي إجراء إضافي. ستحتاج التطبيقات التي لا تستخدم نشاط نقطة الإدخال الافتراضية أو التي توفر Assets/Plugins/AndroidManifest.xml
إلى تكوين إضافي.
يأتي المكون الإضافي Firebase Cloud Messaging Unity Plugin على نظام Android مرفقًا بملفين إضافيين:
-
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
المقدم والتأكد من أن نشاطك المخصص يتعامل بشكل صحيح مع جميع انتقالات دورة حياة نشاط 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 ++ 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>
ملاحظة حول تسليم الرسائل على Android
عندما لا يعمل التطبيق على الإطلاق وينقر المستخدم على إشعار ، لا يتم توجيه الرسالة افتراضيًا عبر عمليات الاسترجاعات المضمنة في 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
الخاص بك) على Apple أو 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>
سويفت
FirebaseMessagingAutoInitEnabled = NO
لإعادة تمكين FCM ، يمكنك إجراء مكالمة وقت التشغيل:
Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;
تستمر هذه القيمة عبر عمليات إعادة تشغيل التطبيق بمجرد تعيينها.
التعامل مع الرسائل ذات الروابط العميقة على Android
يسمح 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. لمعرفة المزيد ، راجع نموذج البدء السريع الذي يوضح هذه الوظيفة.
لإضافة سلوك آخر أكثر تقدمًا إلى تطبيقك ، راجع أدلة إرسال الرسائل من خادم التطبيق:
ضع في اعتبارك أنك ستحتاج إلى تطبيق خادم للاستفادة من هذه الميزات.