Google is committed to advancing racial equity for Black communities. See how.
این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

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

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

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

اندروید

  1. اگر قبلاً این کار را نکرده اید ، Firebase را به پروژه ++ C خود اضافه کنید .

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

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

  2. با عبور از محیط JNI و فعالیت:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
    یک شی Firebase App ایجاد کنید

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

  4. FCM را با وارد کردن برنامه و یک شنونده ساخته شده ، آغاز کنید:

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

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

iOS

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

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

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

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

    4. زبانه قابلیت ها را از قسمت Editor انتخاب کنید.

      1. اعلان های فشار را به روشن تغییر دهید .
      2. به پایین به حالتهای Background بروید و سپس آن را به On تغییر دهید.
      3. اعلان های از راه دور را در حالت های پس زمینه انتخاب کنید.
  4. ایجاد یک برنامه Firebase App:

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

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

  6. Firebase Cloud Messaging را ابتدا با عبور از برنامه و یک شنونده ساخته شده ، شروع کنید:

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

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

با مقدار دهی اولیه کتابخانه Firebase Cloud Messaging ، برای نمونه برنامه مشتری رمز ثبت درخواست می شود. این برنامه توکن را با 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());
    startService(message);
  }
}

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

به طور خلاصه:

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

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

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

روش های ListenerService لغو کنید.

ListenerService کلاس Java است که پیام های دریافتی ارسال شده به برنامه را رهگیری می کند و آنها را به کتابخانه 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 وجود دارد که ListenerService پیش فرض FCM را اعلام می کند. این مانیفست به طور معمول با مانیفست خاص پروژه ادغام می شود ، این نحوه 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>

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

FCM شناسه Instance را ایجاد می کند ، که به عنوان رمز ثبت در FCM استفاده می شود. هنگامی که شناسه Instance تولید می شود ، کتابخانه شناسه و پیکربندی را در Firebase بارگذاری می کند. اگر می خواهید قبل از استفاده از Instance ID ، انتخاب صریح داشته باشید ، می توانید با غیرفعال کردن FCM (و در Android ، Analytics) از تولید در زمان پیکربندی جلوگیری کنید. . برای این کار ، یک مقدار فراداده به Info.plist (نه GoogleService-Info.plist ) در iOS یا 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>

iOS

FirebaseMessagingAutoInitEnabled = NO

برای فعال کردن مجدد FCM ، می توانید یک تماس در زمان اجرا برقرار کنید:

::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);

این مقدار در هنگام راه اندازی مجدد برنامه ، همچنان ادامه دارد.

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

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

مراحل بعدی

پس از راه اندازی برنامه سرویس گیرنده ، آماده ارسال پیام های پایین دستی و موضوعی با Firebase هستید. برای کسب اطلاعات بیشتر ، این ویژگی نشان داده شده در نمونه شروع سریع را که می توانید بارگیری ، اجرا و بررسی کنید ، مشاهده کنید.

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

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