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

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

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

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

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

  1. روی پروژه خود در Xcode کلیک کنید ، سپس برگه عمومی را از منطقه ویرایشگر انتخاب کنید.
  2. به چارچوب ها و کتابخانه های پیوندی بروید ، سپس روی دکمه + کلیک کنید تا یک چارچوب اضافه شود.
  3. در پنجره ای که ظاهر می شود ، به usernotifications.framework بروید ، روی آن ورودی کلیک کنید ، سپس روی add کلیک کنید.
  4. روی پروژه خود در Xcode کلیک کنید ، سپس برگه قابلیت ها را از منطقه ویرایشگر انتخاب کنید.
  5. اعلان های فشار را به روشن کنید.
  6. به حالت های پس زمینه بروید ، سپس آن را روشن کنید.
  7. کادر انتخاب از راه دور اعلان ها را در حالت های پس زمینه انتخاب کنید.

Firebase Cloud Messaging را اولیه کنید

کتابخانه پیام Cloud 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);
}

با سیستم عامل های Android راه اندازی کنید

برای تنظیم FCM با سیستم عامل های وحدت و اندرویدی از دستورالعمل های زیر استفاده کنید.

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

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

افزونه Unity Firebase Cloud Messaging در Android با دو پرونده اضافی همراه است:

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