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


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

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

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

قبل از شروع

پیش نیازها

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

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

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

    • برای iOS - iOS 13 یا بالاتر را هدف قرار می دهد
    • برای tvOS - tvOS 13 یا بالاتر را هدف قرار می دهد
    • برای Android - API سطح 21 (Lollipop) یا بالاتر را هدف قرار می دهد
  • برای اجرای پروژه 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 را به برنامه خود اضافه کنید.

    Analytics فعال شد

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

    Analytics فعال نیست

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

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

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

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

برخی از محصولات موجود در Firebase Unity SDK برای Android به 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 ندارید، مطمئن شوید که در مرکز اعضای برنامه‌نویس Apple ایجاد کرده‌اید.

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

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

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

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

  1. روی پروژه خود در Xcode کلیک کنید، سپس برگه General را از ناحیه ویرایشگر انتخاب کنید.
  2. به Frameworks and Libraries مرتبط بروید، سپس برای افزودن یک چارچوب، روی دکمه + کلیک کنید.
  3. در پنجره ای که ظاهر می شود، به UserNotifications.framework بروید، روی آن ورودی کلیک کنید، سپس روی افزودن کلیک کنید.
  4. روی پروژه خود در Xcode کلیک کنید، سپس برگه قابلیت ها را از ناحیه ویرایشگر انتخاب کنید.
  5. Push Notifications را روی On قرار دهید.
  6. به حالت‌های پس‌زمینه بروید، سپس آن را به روشن تغییر دهید.
  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 از دستورالعمل های زیر استفاده کنید.

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

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

از ابتدای خودکار جلوگیری کنید

FCM یک نشانه ثبت نام برای هدف قرار دادن دستگاه ایجاد می کند. هنگامی که یک نشانه تولید می شود ، کتابخانه داده های شناسه و پیکربندی را در Firebase بارگذاری می کند. اگر می خواهید قبل از استفاده از توکن ، یک انتخاب صریح را دریافت کنید ، می توانید با غیرفعال کردن FCM (و در Android ، Analytics) از تولید در زمان پیکربندی جلوگیری کنید. شما می AndroidManifest.xml یک مقدار ابرداده را به Info.plist خود اضافه GoogleService-Info.plist

اندروید

<?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 برای وحدت وجود دارد: