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

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

Firebase و FCM SDK را تنظیم کنید

اندروید

  1. اگر شما در حال حاضر نیست، اضافه فایربیس را به پروژه خود C ++ .

    • در دستورالعمل های پیکربندی راه اندازی ، الزامات دستگاه و برنامه برای استفاده از SDK Firebase C ++ را مرور کنید ، از جمله توصیه استفاده از CMake برای ساخت برنامه خود.

    • در سطح پروژه خود را build.gradle فایل، مطمئن شوید که شامل مخزن Maven را گوگل در هر دو خود را buildscript و allprojects بخش.

  2. ایجاد یک شیء فایربیس برنامه، عبور در محیط JNI و فعالیت درسایت:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);

  3. تعریف یک کلاس است که پیاده سازی firebase::messaging::Listener رابط.

  4. مقداردهی اولیه FCM، عبور در برنامه و یک ساخته شنونده:

    ::firebase::messaging::Initialize(app, listener);

  5. برنامه هایی که به SDK خدمات Google Play متکی هستند قبل از دسترسی به ویژگی ها باید دستگاه را برای APK خدمات Google Play سازگار بررسی کنند. برای کسب اطلاعات بیشتر، مراجعه به خدمات Google Play APK بررسی .

iOS

  1. شما نیاز به یک معتبر APN ها گواهی. اگر شما در حال حاضر یک، مطمئن شوید که به ایجاد یک در توسعه مرکز اپل کاربران .
  2. اگر شما در حال حاضر نیست، اضافه فایربیس را به پروژه خود C ++ . سپس ، برای راه اندازی پروژه خود برای FCM:
    1. در Podfile پروژه خود را، اضافه کردن وابستگی FCM است:
      pod 'Firebase/Messaging'
    2. کشیدن firebase.framework و firebase_messaging.framework چارچوب به پروژه Xcode متعلق به خود را از فایربیس C ++ SDK .
  3. پروژه Xcode خود را برای فعال کردن Push Notifications پیکربندی کنید:

    1. این پروژه از منطقه ناوبر را انتخاب کنید.
    2. هدف پروژه از منطقه ویرایشگر را انتخاب کنید.
    3. تب General از منطقه ویرایشگر را انتخاب کنید.

      1. پایین به لینک چارچوب و کتابخانه، سپس با کلیک بر روی دکمه + برای اضافه چارچوب.
      2. در پنجره ای که ظاهر می شود، به UserNotifications.framework رفته، با کلیک بر روی آن است که ورود و سپس Add کلیک کنید.

        این چارچوب فقط در Xcode v8 و بعد از آن ظاهر می شود و مورد نیاز این کتابخانه است.

    4. تب قابلیت از منطقه ویرایشگر را انتخاب کنید.

      1. سوئیچ فشار اطلاعیه به در.
      2. پایین به حالت پس زمینه، سپس آن را تغییر دهید به در.
      3. اطلاعیه از راه دور تحت حالت پس زمینه را انتخاب کنید.
  4. ایجاد یک شیء فایربیس برنامه:

    app = ::firebase::App::Create(::firebase::AppOptions());

  5. تعریف یک کلاس است که پیاده سازی firebase::messaging::Listener رابط.

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

    ::firebase::messaging::Initialize(app, listener);

به رمز ثبت دستگاه دسترسی پیدا کنید

با راه اندازی کتابخانه پیام های ابری Firebase ، یک کد ثبت نام برای نمونه برنامه مشتری درخواست می شود. برنامه رمز با دریافت خواهد کرد OnTokenReceived پاسخ به تماس، که باید در کلاس تعریف شده است که پیاده سازی firebase::messaging::Listener .

اگر می خواهید آن دستگاه خاص را هدف قرار دهید ، باید به این رمز دسترسی داشته باشید.

در مورد ارسال پیام در Android توجه داشته باشید

وقتی برنامه به هیچ عنوان اجرا نمی شود و کاربر روی اعلان ضربه می زند ، پیام به طور پیش فرض از طریق تماس های داخلی FCM هدایت نمی شود. در این مورد، محموله پیام از طریق یک دریافت Intent استفاده می شود به شروع برنامه. به FCM رو به جلو این پیام های دریافتی به C ++ پاسخ به تماس کتابخانه، شما نیاز به نادیده گرفتن روش onNewIntent در فعالیت خود را و با تصویب Intent به MessageForwardingService .

import com.google.firebase.messaging.MessageForwardingService;

class MyActivity extends Activity {
  private static final String TAG = "MyActvity";

  @Override
  protected void onNewIntent(Intent intent) {
    Log.d(TAG, "A message was sent to this app while it was in the background.");
    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);
  }
}

پیام های دریافت شده در حالی که برنامه در پس زمینه است محتوای قسمت اعلان خود را برای پر کردن اعلان سینی سیستم استفاده می کند ، اما محتوای اعلان به FCM ارسال نمی شود. به این معنا که Message::notification خواهد شد تهی.

به طور خلاصه:

حالت برنامه اطلاع داده ها هر دو
پیش زمینه OnMessageReceived OnMessageReceived OnMessageReceived
زمینه سینی سیستم OnMessageReceived اعلان: سینی سیستم
داده ها: در موارد اضافی قصد.

مدیریت پیام سفارشی در Android

به طور پیش فرض، اطلاعیه ها ارسال شده به برنامه به تصویب ::firebase::messaging::Listener::OnMessageReceived ، اما در برخی موارد شما ممکن است بخواهید به نادیده گرفتن رفتار پیش فرض. برای این کار بر روی اندروید شما نیاز به ارسال کلاس های سفارشی که گسترش com.google.firebase.messaging.cpp.ListenerService همچنین به روز رسانی پروژه خود را AndroidManifest.xml .

نادیده گرفتن ListenerService روش.

ListenerService کلاس جاوا این است که ره گیری پیام های دریافتی به برنامه و مسیرهای آنها را به C ++ کتابخانه ارسال می شود. هنگامی که برنامه در پیش زمینه است (یا وقتی برنامه در پس زمینه قرار دارد و بار قابل حمل فقط برای داده دریافت می کند) ، پیام ها از طریق یکی از تماس های برگشتی ارائه شده در این کلاس منتقل می شوند. برای اضافه کردن رفتار های سفارشی را به دست زدن به پیام، شما نیاز به گسترش به طور پیش فرض از FCM ListenerService :

import com.google.firebase.messaging.cpp.ListenerService;

class MyListenerService extends ListenerService {

توسط فارغ روش ListenerService.onMessageReceived ، شما می توانید اقدامات بر اساس دریافت انجام RemoteMessage شی و دریافت داده ها پیام:

@Override
public void onMessageReceived(RemoteMessage message) {
  Log.d(TAG, "A message has been received.");
  // Do additional logic...
  super.onMessageReceived(message);
}

ListenerService همچنین دارای یک روش چند دیگر که کمتر مورد استفاده قرار. این می تواند بازنویسی شود و همچنین، برای کسب اطلاعات بیشتر به FirebaseMessagingService مرجع است.

@Override
public void onDeletedMessages() {
  Log.d(TAG, "Messages have been deleted on the server.");
  // Do additional logic...
  super.onDeletedMessages();
}

@Override
public void onMessageSent(String messageId) {
  Log.d(TAG, "An outgoing message has been sent.");
  // Do additional logic...
  super.onMessageSent(messageId);
}

@Override
public void onSendError(String messageId, Exception exception) {
  Log.d(TAG, "An outgoing message encountered an error.");
  // Do additional logic...
  super.onSendError(messageId, exception);
}

به روز رسانی AndroidManifest.xml

هنگامی که کلاس های سفارشی خود نوشته شده است، آنها باید در شامل AndroidManifest.xml را به اثر. اطمینان حاصل کنید که آشکار شامل ابزار ادغام با اعلام ویژگی مناسب در داخل <manifest> برچسب، مانند:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.firebase.messaging.cpp.samples"
    xmlns:tools="http://schemas.android.com/tools">

در firebase_messaging_cpp.aar آرشیو است وجود دارد AndroidManifest.xml فایل که اعلام طور پیش فرض از FCM ListenerService . این آشکار است به طور معمول با پروژه های خاص آشکار این است که چگونه با هم ادغام شدند ListenerService قادر به اجرای است. این ListenerService نیاز به تعویض با خدمات به cusom شنونده است. است که با از بین بردن پیش فرض انجام ListenerService و افزودن سرویس سفارشی، که می تواند با خطوط زیر پروژه های خود را انجام AndroidManifest.xml فایل:

<service android:name="com.google.firebase.messaging.cpp.ListenerService"
         tools:node="remove" />
<service android:name="com.google.firebase.messaging.cpp.samples.MyListenerService"
         android:exported="false">
  <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
  </intent-filter>
</service>

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

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

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