با Firebase Cloud Messaging شروع کنید


این راهنمای سریع نحوه راه‌اندازی Firebase Cloud Messaging را در برنامه‌های موبایل و کلاینت وب شما شرح می‌دهد تا بتوانید پیام‌ها را به طور قابل اعتمادی ارسال کنید. برای محیط‌های سرور، به بخش Your server environment and FCM مراجعه کنید.

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

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

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

پیش‌نیازها

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

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

    • Xcode نسخه ۱۳.۳.۱ یا بالاتر
    • کوکو پادز ۱.۱۲.۰ یا بالاتر
  • مطمئن شوید که پروژه یونیتی شما این الزامات را برآورده می‌کند:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  3. به کنسول Firebase برگردید، در گردش کار تنظیمات، روی Next کلیک کنید.

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

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

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

    • کیت توسعه نرم‌افزار (SDK) Firebase Unity پلتفرم خاصی نیست.

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

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

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

    Analytics فعال شد

    • پکیج Firebase را برای Google Analytics اضافه کنید: FirebaseAnalytics.unitypackage
    • بسته‌ی Firebase Cloud Messaging را اضافه کنید: FirebaseMessaging.unitypackage

    Analytics فعال نیست

    بسته‌ی Firebase Cloud Messaging را اضافه کنید: FirebaseMessaging.unitypackage

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

  5. به کنسول Firebase برگردید، در گردش کار تنظیمات، روی Next کلیک کنید.

مرحله ۵: الزامات نسخه سرویس‌های گوگل پلی را تأیید کنید

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

دستور using و کد مقداردهی اولیه زیر را در ابتدای برنامه خود اضافه کنید. می‌توانید قبل از فراخوانی هر متد دیگری در SDK، Google Play services را بررسی کرده و در صورت تمایل، آنها را به نسخه مورد نیاز به‌روزرسانی کنید.

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 ثبت و پیکربندی شده است.

با پلتفرم‌های اپل راه‌اندازی کنید

برای تنظیم FCM با پلتفرم‌های Unity و Apple از دستورالعمل‌های زیر استفاده کنید.

کلید احراز هویت APN خود را آپلود کنید

کلید احراز هویت APN خود را در Firebase آپلود کنید. اگر از قبل کلید احراز هویت APN ندارید، حتماً آن را در مرکز اعضای توسعه‌دهنده اپل ایجاد کنید.

  1. در داخل پروژه خود در کنسول Firebase ، نماد چرخ دنده را انتخاب کنید، تنظیمات پروژه را انتخاب کنید و سپس برگه Cloud Messaging را انتخاب کنید.

  2. در کلید احراز هویت APNs در بخش پیکربندی برنامه iOS ، روی دکمه آپلود کلیک کنید تا کلید احراز هویت توسعه یا کلید احراز هویت تولید یا هر دو را آپلود کنید. حداقل یکی از آنها لازم است.

  3. به محلی که کلید خود را ذخیره کرده‌اید بروید، آن را انتخاب کنید و روی «باز کردن» کلیک کنید. شناسه کلید را برای کلید (که در مرکز اعضای توسعه‌دهنده اپل موجود است) اضافه کنید و روی «بارگذاری» کلیک کنید.

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

  1. روی پروژه خود در Xcode کلیک کنید، سپس از قسمت Editor، تب General را انتخاب کنید.
  2. به Linked Frameworks and Libraries بروید، سپس برای افزودن یک چارچوب، روی دکمه + کلیک کنید.
  3. در پنجره‌ای که ظاهر می‌شود، به UserNotifications.framework بروید، روی آن کلیک کنید، سپس روی Add کلیک کنید.
  4. روی پروژه خود در Xcode کلیک کنید، سپس از قسمت Editor، تب Capabilities را انتخاب کنید.
  5. اعلان‌های فوری را روی روشن (On) قرار دهید.
  6. به حالت‌های پس‌زمینه بروید، سپس آن را روی روشن (On) قرار دهید.
  7. کادر انتخاب اعلان‌های از راه دور را در زیر حالت‌های پس‌زمینه انتخاب کنید.

مقداردهی اولیه 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);
}

با پلتفرم‌های اندروید راه‌اندازی کنید

برای تنظیم FCM با پلتفرم‌های Unity و Android از دستورالعمل‌های زیر استفاده کنید.

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

Firebase Cloud Messaging با یک فعالیت نقطه ورود سفارشی همراه است که جایگزین UnityPlayerActivity پیش‌فرض می‌شود. اگر از یک نقطه ورود سفارشی استفاده نمی‌کنید، این جایگزینی به طور خودکار اتفاق می‌افتد و نیازی به انجام هیچ اقدام اضافی ندارید.

افزونه 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 ارائه شده را حذف کنید و مطمئن شوید که activity سفارشی شما به درستی تمام انتقال‌های چرخه حیات activity اندروید را مدیریت می‌کند (مثالی از نحوه انجام این کار در زیر نشان داده شده است). اگر activity سفارشی شما UnityPlayerActivity ارث بری می‌کند، می‌توانید com.google.firebase.MessagingUnityPlayerActivity را ارث بری کنید که تمام متدهای لازم را پیاده‌سازی می‌کند.

اگر از یک Activity سفارشی استفاده می‌کنید و com.google.firebase.MessagingUnityPlayerActivity را ارث‌بری نمی‌کنید، باید قطعه کدهای زیر را در Activity خود قرار دهید.

/**
 * 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 earlier 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 makes sure 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 (از ۷.۱.۰ به بعد) از 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 برابر با null خواهد بود.

به طور خلاصه:

حالت برنامه اعلان داده‌ها هر دو
پیش‌زمینه Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
پیشینه سینی سیستم Firebase.Messaging.FirebaseMessaging.MessageReceived اعلان: سینی سیستم
داده‌ها: در موارد اضافیِ هدف.

FCM اجازه می‌دهد پیام‌هایی حاوی یک لینک عمیق به برنامه شما ارسال شوند. برای دریافت پیام‌هایی که حاوی یک لینک عمیق هستند، باید یک فیلتر intent جدید به activity که لینک‌های عمیق را برای برنامه شما مدیریت می‌کند، اضافه کنید. فیلتر intent باید لینک‌های عمیق دامنه شما را دریافت کند. در 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، یک wildcard مشخص کرد. برای مثال:

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

وقتی کاربران روی اعلانی که حاوی لینکی به طرح و میزبان مشخص شده توسط شما است ضربه می‌زنند، برنامه شما اکتیویتی را با این فیلتر intent برای مدیریت لینک آغاز می‌کند.

جلوگیری از مقداردهی اولیه خودکار

FCM یک توکن ثبت نام برای هدف‌گیری دستگاه تولید می‌کند. وقتی یک توکن تولید می‌شود، کتابخانه، شناسه و داده‌های پیکربندی را در Firebase آپلود می‌کند. اگر می‌خواهید قبل از استفاده از توکن، یک گزینه‌ی انتخاب صریح دریافت کنید، می‌توانید با غیرفعال کردن FCM (و در اندروید، 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 برای Unity ارائه شده است: