قم بإعداد تطبيق عميل Firebase Cloud Messaging باستخدام Unity

لكتابة عبر منصة التطبيق العميل Firebase سحابة التراسل مع الوحدة، استخدم Firebase سحابة التراسل API. تعمل Unity SDK مع كل من Android و Apple ، مع بعض الإعداد الإضافي المطلوب لكل نظام أساسي.

قبل ان تبدأ

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

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

  • (دائرة الرقابة الداخلية فقط) تثبيت ما يلي:

    • Xcode 9.4.1 أو أعلى
    • CocoaPods 1.10.0 أو أعلى
  • تأكد من أن مشروع الوحدة الخاص بك يلبي هذه المتطلبات:

    • لدائرة الرقابة الداخلية - يستهدف دائرة الرقابة الداخلية 10 أو أعلى
    • لالروبوت - مستوى الأهداف API 19 (كيت كات) أو أعلى

  • قم بإعداد جهاز أو استخدام محاكي لتشغيل مشروع الوحدة الخاص بك.

    • لدائرة الرقابة الداخلية - إعداد جهاز دائرة الرقابة الداخلية المادي لتشغيل التطبيق الخاص بك، واستكمال هذه المهام:

      • الحصول على أبل دفع الإخطار مصادقة المفاتيح الخاصة بك أبل حساب المطور .
      • تمكين إخطارات دفع في كسكودي تحت التطبيقات> قدرات.
    • لالروبوت - المحاكيات يجب استخدام صورة المحاكي مع جوجل اللعب.

إذا لم يكن لديك بالفعل مشروع الوحدة ونريد فقط أن يجرب منتج Firebase، يمكنك تحميل واحد من عينات التشغيل السريع .

الخطوة 1: أنشئ مشروع Firebase

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

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

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

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

  2. في وسط الصفحة نظرة عامة المشروع، انقر فوق رمز الوحدة ( ) لإطلاق سير العمل الإعداد.

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

  3. حدد أي هدف بناء لمشروع الوحدة الخاص بك الذي ترغب في تسجيله ، أو يمكنك حتى تحديد تسجيل كلا الهدفين الآن في نفس الوقت.

  4. أدخل المعرف (المعرفات) الخاص بالنظام الأساسي لمشروع الوحدة الخاص بك.

    • لدائرة الرقابة الداخلية - أدخل مشروع الوحدة الخاص بك ID دائرة الرقابة الداخلية في ID حزمة دائرة الرقابة الداخلية المجال.

    • لالروبوت - أدخل مشروع الوحدة الخاصة بك الروبوت ID في اسم الحزمة الروبوت المجال.
      اسم حيث حزمة ومعرف التطبيق وغالبا ما تستخدم بالتبادل.

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

  6. انقر فوق تسجيل التطبيق.

الخطوة 3: أضف ملفات تكوين Firebase

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

    • لدائرة الرقابة الداخلية - انقر فوق تحميل GoogleService-Info.plist.

    • لالروبوت - انقر على تنزيل Google-services.json.

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

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

الخطوة 4: أضف حزم Firebase Unity SDK

  1. في وحدة تحكم Firebase، انقر فوق تحميل Firebase الوحدة SDK، ثم بفك في SDK مريحة في مكان ما.

    • يمكنك تنزيل Firebase الوحدة SDK مرة أخرى في أي وقت.

    • إن حزمة Firebase Unity SDK ليست خاصة بالنظام الأساسي.

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

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

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

    تم تمكين التحليلات

    • إضافة حزمة Firebase في خدمة Google Analytics: FirebaseAnalytics.unitypackage
    • إضافة حزمة Firebase سحابة الرسائل: FirebaseMessaging.unitypackage

    لم يتم تمكين التحليلات

    إضافة حزمة Firebase سحابة الرسائل: FirebaseMessaging.unitypackage

  4. في الإطار استيراد الوحدة حزمة، انقر فوق استيراد.

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

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

وFirebase الوحدة SDK لالروبوت يتطلب خدمات 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. انقر على المشروع في كسكودي، ثم حدد علامة التبويب عام من منطقة محرر.

  2. انتقل لأسفل إلى Linked الأطر والمكتبات، ثم انقر فوق الزر + لإضافة الإطار.

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

الخطوة 8: تفعيل دفع الإخطارات

  1. انقر على المشروع في كسكودي، ثم حدد علامة التبويب قدرات من منطقة محرر.

  2. التبديل الإخطارات اضغط لتشغيل.

  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 سحابة التراسل واحدة مع النشاط نقطة دخول مخصصة التي يستبدل الافتراضي 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 سحابة التراسل للتعامل مع الرسائل الواردة بشكل صحيح.

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

إذا لم التطبيق استخدام الافتراضي 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>

ملاحظة حول تسليم الرسائل على 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 ) على أبل، أو لديك 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. لمعرفة المزيد، راجع عينة التشغيل السريع الذي يدل على هذه الوظيفة.

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

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