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

برای نوشتن برنامه مشتری Firebase Cloud Messaging با Unity، از Firebase Cloud Messaging API استفاده کنید. Unity SDK هم برای اندروید و هم برای اپل کار می کند و برای هر پلتفرم نیاز به تنظیمات اضافی است.

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

پیش نیازها

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

  • (فقط پلتفرم های اپل) موارد زیر را نصب کنید:

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

    • برای iOS - iOS 11 یا بالاتر را هدف قرار می دهد
    • برای tvOS - tvOS 12 یا بالاتر را هدف قرار می دهد
    • برای Android - API سطح 19 (KitKat) یا بالاتر را هدف قرار می دهد
  • برای اجرای پروژه Unity خود یک دستگاه راه اندازی کنید یا از یک شبیه ساز استفاده کنید.

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

      • یک کلید تأیید اعتبار Apple Push Notification برای حساب Apple Developer خود دریافت کنید.
      • Push Notifications را در XCode در قسمت App > Capabilities فعال کنید.
    • برای اندرویدشبیه سازها باید از یک تصویر شبیه ساز با Google Play استفاده کنند.

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

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

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

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

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

  1. به کنسول Firebase بروید.

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

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

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

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

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

    • برای اندروید — شناسه اندروید پروژه Unity خود را در قسمت نام بسته اندروید وارد کنید.
      اصطلاحات نام بسته و شناسه برنامه اغلب به جای یکدیگر استفاده می شوند.

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

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

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

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

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

    • برای Android — روی Download google-services.json کلیک کنید.

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

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

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

  1. در کنسول Firebase، روی Download Firebase Unity SDK کلیک کنید، سپس SDK را در جایی مناسب از حالت فشرده خارج کنید.

    • می‌توانید Firebase Unity SDK را دوباره در هر زمانی دانلود کنید.

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

  2. در پروژه Unity باز خود، به Assets > Import Package > Custom Package بروید.

  3. از 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

  4. در پنجره Import Unity Package ، روی Import کلیک کنید.

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

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

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

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

اعلان‌های فشاری را در پلتفرم‌های اپل فعال کنید

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

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

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

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

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

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

  2. Push Notifications را روی On قرار دهید.

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

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

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

نکته ای در مورد تحویل پیام در اندروید

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

پس از تنظیم، این مقدار در سراسر راه اندازی مجدد برنامه باقی می ماند.

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

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

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