برنامه مشتری Firebase Cloud Messaging را با Unity تنظیم کنید

برای ارسال کراس پلت فرم برنامه سرویس گیرنده فایربیس ابر پیام خود را با وحدت، با استفاده از فایربیس ابر پیام API. Unity SDK هم برای اندروید و هم برای اپل کار می کند و برای هر پلتفرم نیاز به تنظیمات اضافی است.

قبل از اینکه شروع کنی

پیش نیازها

  • Unity 2017.4 یا بالاتر را نصب کنید. نسخه های قبلی نیز ممکن است سازگار باشند، اما به طور فعال پشتیبانی نمی شوند. پشتیبانی از Unity 2017.4 منسوخ تلقی می شود و پس از نسخه اصلی بعدی دیگر به طور فعال پشتیبانی نخواهد شد.

  • (IOS تنها) نصب زیر:

    • Xcode 9.4.1 یا بالاتر
    • CocoaPods 1.10.0 یا بالاتر
  • مطمئن شوید که پروژه یونیتی شما با این شرایط مطابقت دارد:

    • برای iOS - هدف قرار در iOS 10 یا بالاتر
    • برای آندروید - سطح اهداف API 19 (کیت کت) و یا بالاتر

  • برای اجرای پروژه Unity خود یک دستگاه راه اندازی کنید یا از یک شبیه ساز استفاده کنید.

    • برای iOS - تنظیم یک دستگاه فیزیکی در iOS برای اجرای برنامه خود را، و تکمیل این وظایف:

      • به دست آوردن یک هشدار از طریق فشار اپل اعتبار کلید برای خود حساب اپل توسعهدهنده .
      • فعال کردن فشار اطلاعیه در Xcode متعلق به تحت برنامه> قابلیت های.
    • برای آندروید - شبیه ساز باید یک تصویر شبیه ساز با Google Play استفاده کنید.

اگر شما در حال حاضر یک پروژه وحدت دارند و فقط می خواهم سعی کنید از یک محصول فایربیس، شما می توانید یکی از ما را دانلود نمونه شروع سریع .

مرحله 1: یک پروژه Firebase ایجاد کنید

قبل از اینکه بتوانید Firebase را به پروژه Unity خود اضافه کنید، باید یک پروژه Firebase ایجاد کنید تا به پروژه Unity خود متصل شوید. مشاهده درک پروژه فایربیس برای کسب اطلاعات بیشتر در مورد پروژه های فایربیس.

مرحله 2: برنامه خود را در Firebase ثبت کنید

می توانید یک یا چند برنامه یا بازی را برای اتصال به پروژه Firebase خود ثبت کنید.

  1. رفتن به کنسول فایربیس .

  2. در مرکز صفحه مرور کلی پروژه، کلیک بر روی آیکون وحدت ( ) برای راه اندازی گردش کار راه اندازی شده است.

    اگر شما در حال حاضر یک برنامه اضافه به پروژه Firebase خود، کلیک کنید اضافه کردن برنامه برای نمایش گزینه های پلت فرم.

  3. هدف ساخت پروژه یونیتی خود را که می‌خواهید ثبت کنید انتخاب کنید، یا حتی می‌توانید هر دو هدف را هم‌اکنون ثبت کنید.

  4. شناسه(های) پلتفرم خاص پروژه Unity خود را وارد کنید.

    • برای iOS - را وارد کنید در iOS شناسه پروژه وحدت خود را در بسته نرم افزاری ID در iOS زمینه است.

    • برای آندروید - را وارد کنید ID آندروید پروژه وحدت خود را در نام بسته Android زمینه است.
      نام نظر بسته و ID نرم افزار اغلب به جای یکدیگر استفاده می شود.

  5. (اختیاری) نام مستعار پلت فرم خاص پروژه وحدت خود را (ها) را وارد کنید.
    این نام‌های مستعار داخلی و شناسه‌های راحتی هستند و فقط در کنسول Firebase برای شما قابل مشاهده هستند.

  6. برنامه ثبت نام کلیک کنید.

مرحله 3: فایل های پیکربندی Firebase را اضافه کنید

  1. فایل(های) پیکربندی Firebase مخصوص پلتفرم خود را در گردش کار راه اندازی کنسول Firebase دریافت کنید.

    • برای iOS - کلیک کنید دانلود GoogleService-Info.plist.

    • برای آندروید - کلیک کنید دانلود گوگل services.json.

  2. باز کردن پنجره پروژه از پروژه های وحدت خود را، و سپس حرکت فایل پیکربندی خود را (بازدید کنندگان) به Assets پوشه.

  3. برگشت در فایربیس کنسول، در گردش کار راه اندازی، روی Next کلیک کنید.

مرحله 4: SDK های Firebase Unity را اضافه کنید

  1. در فایربیس کنسول، کلیک کنید دانلود فایربیس وحدت SDK، سپس جدا کردن از SDK جایی راحت است.

    • شما می توانید دانلود فایربیس وحدت SDK دوباره در هر زمان.

    • Firebase Unity SDK مخصوص پلتفرم نیست.

  2. در پروژه خود باز وحدت، حرکت به دارایی> واردات بسته بندی> بسته بندی سفارشی.

  3. از SDK استخراج، انتخاب محصولات فایربیس پشتیبانی که شما می خواهید به استفاده در برنامه شما.

    برای یک تجربه بهینه با Firebase ابر پیام، توصیه می کنیم فعال کردن Google Analytics به در پروژه شما. همچنین، به عنوان بخشی از راه اندازی Analytics، باید بسته Firebase برای Analytics را به برنامه خود اضافه کنید.

    تجزیه و تحلیل فعال شد

    • اضافه کردن بسته فایربیس گوگل آنالیز: FirebaseAnalytics.unitypackage
    • اضافه کردن بسته برای فایربیس ابر پیام: FirebaseMessaging.unitypackage

    تجزیه و تحلیل فعال نیست

    اضافه کردن بسته برای فایربیس ابر پیام: FirebaseMessaging.unitypackage

  4. در پنجره واردات وحدت بسته بندی، واردات را کلیک کنید.

  5. برگشت در فایربیس کنسول، در گردش کار راه اندازی، روی Next کلیک کنید.

مرحله 5: الزامات نسخه خدمات Google Play را تأیید کنید

فایربیس وحدت SDK برای آندروید نیاز به سرویس Google Play ، که باید تا به روز می شود قبل از SDK را می توان مورد استفاده قرار گیرد.

کد زیر را در ابتدای برنامه خود اضافه کنید. قبل از فراخوانی هر روش دیگری در SDK، می‌توانید سرویس‌های Google Play را به نسخه مورد نیاز 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 ثبت و پیکربندی شده است.

مرحله ۷: چارچوب اعلان‌های کاربر را اضافه کنید

  1. کلیک کنید بر روی این پروژه در Xcode متعلق به، و سپس تب General از منطقه ویرایشگر را انتخاب کنید.

  2. پایین به لینک چارچوب و کتابخانه، سپس با کلیک بر روی دکمه + برای اضافه کردن یک چارچوب.

  3. در پنجره ای که ظاهر می شود، به UserNotifications.framework رفته، کلیک کنید که ورود و سپس Add کلیک کنید.

مرحله 8: اعلان‌های فشاری را فعال کنید

  1. کلیک کنید بر روی این پروژه در Xcode متعلق به، سپس برگه قابلیت از منطقه ویرایشگر را انتخاب کنید.

  2. سوئیچ فشار اطلاعیه به در.

  3. پایین به حالت پس زمینه، سپس آن را تغییر دهید به در.

  4. چک باکس اطلاعیه از راه دور تحت حالت پس زمینه را انتخاب کنید.

Firebase Cloud Messaging را راه اندازی کنید

کتابخانه فایربیس ابر پیام هنگام اضافه کردن دسته برای هر دو مقداردهی اولیه می شود 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

در آندروید، فایربیس ابر پیام می آید با یک فعالیت نقطه ورود سفارشی است که جایگزین به طور پیش فرض همراه UnityPlayerActivity . اگر از یک نقطه ورودی سفارشی استفاده نمی کنید، این جایگزینی به طور خودکار انجام می شود و شما نباید اقدام دیگری انجام دهید. برنامه هایی که حالت پیش فرض فعالیت نقطه و یا که عرضه استفاده نمی خود 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 که به درستی اداره کند پیام های دریافتی برای فایربیس ابر پیام ضروری است.

پیکربندی یک فعالیت نقطه ورودی سفارشی

اگر برنامه خود را به طور پیش فرض استفاده نمی 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);
}

نسخه های جدید از فایربیس 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) از تولید در زمان پیکربندی جلوگیری کنید. برای این کار، اضافه کردن یک مقدار فراداده به خود 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 هستید. برای کسب اطلاعات بیشتر، نگاه کنید به نمونه شروع سریع که نشان می دهد این قابلیت است.

برای افزودن سایر رفتارهای پیشرفته تر به برنامه خود، به راهنمای ارسال پیام از سرور برنامه مراجعه کنید:

به خاطر داشته باشید که شما یک نیاز پیاده سازی سرور به استفاده از این ویژگی ها.