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

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

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

پیش نیازها

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

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

    • کد X4 9.4.1 یا بالاتر
    • CocoaPods 1.10.0 یا بالاتر
  • اطمینان حاصل کنید که پروژه Unity شما این الزامات را دارد:

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

  • برای اجرای پروژه 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 دوباره در هر زمان.

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

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

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

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

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

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

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

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

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

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

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

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

در ابتدای برنامه کد زیر را اضافه کنید. می توانید قبل از فراخوانی سایر روش ها در SDK ، خدمات Google Play را به نسخه مورد نیاز SDK Firebase Unity بررسی کرده و به صورت اختیاری به روز کنید.

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

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

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

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

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

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

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

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

راه اندازی پیام های ابری 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);
}

پیکربندی Activity نقطه ورود Android

در آندروید، فایربیس ابر پیام می آید با یک فعالیت نقطه ورود سفارشی است که جایگزین به طور پیش فرض همراه UnityPlayerActivity . اگر از نقطه ورود سفارشی استفاده نمی کنید ، این جایگزینی به طور خودکار اتفاق می افتد و نیازی به انجام اقدامات اضافی ندارید. برنامه هایی که حالت پیش فرض فعالیت نقطه و یا که عرضه استفاده نمی خود Assets/Plugins/AndroidManifest.xml خواهد پیکربندی اضافی نیاز دارند.

افزونه Firebase Cloud Messaging Unity در Android همراه با دو فایل اضافی ارائه می شود:

  • 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>

در مورد ارسال پیام در 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 ) در 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>

همچنین ممکن است برای ایجاد انعطاف پذیری بیشتر فیلتر هدف ، یک علامت wild را مشخص کنید. مثلا:

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

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

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