Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

قم بإعداد تطبيق Firebase Cloud Messaging باستخدام C ++

لكتابة تطبيق عميل Firebase Cloud Messaging عبر الأنظمة الأساسية باستخدام C ++ ، استخدم Firebase Cloud Messaging API. تعمل حزمة C ++ SDK مع كل من Android و iOS ، مع بعض الإعداد الإضافي المطلوب لكل نظام أساسي.

قم بإعداد Firebase و FCM SDK

ذكري المظهر

  1. إذا لم تكن قد قمت بذلك بالفعل ، فأضف Firebase إلى مشروع C ++ الخاص بك .

    • في إرشادات الإعداد المرتبطة ، راجع متطلبات الجهاز والتطبيق لاستخدام Firebase C ++ SDK ، بما في ذلك التوصية باستخدام CMake لبناء تطبيقك.

    • في ملف build.gradle مستوى المشروع ، تأكد من تضمين مستودع Google Maven في كل من buildscript الخاص بك buildscript allprojects .

  2. قم بإنشاء كائن تطبيق Firebase ، بالمرور في بيئة ونشاط JNI:

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

  3. حدد فئة تنفذ واجهة firebase::messaging::Listener .

  4. تهيئة FCM ، تمرير في التطبيق والمستمع المركب:

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

  5. يجب أن تتحقق التطبيقات التي تعتمد على خدمات Google Play SDK من الجهاز بحثًا عن ملف APK متوافق لخدمات Google Play قبل الوصول إلى الميزات. لمعرفة المزيد ، ارجع إلى Check for Google Play services APK .

iOS

  1. أنت بحاجة إلى شهادة APNs صالحة. إذا لم يكن لديك واحدة بالفعل ، فارجع إلى توفير شهادات SSL APNs .
  2. إذا لم تكن قد قمت بذلك بالفعل ، فأضف Firebase إلى مشروع C ++ الخاص بك . بعد ذلك ، لإعداد مشروعك لـ FCM:
    1. في Podfile الخاص بمشروعك ، أضف تبعية FCM:
      pod 'Firebase/Messaging'
    2. اسحب firebase.framework و firebase_messaging.framework الأطر في مشروع Xcode من ++ SDK Firebase C .
  3. تكوين مشروع Xcode الخاص بك لتمكين دفع الإخطارات:

    1. حدد المشروع من منطقة Navigator .
    2. حدد هدف المشروع من منطقة المحرر .
    3. حدد علامة التبويب عامة من منطقة محرر.

      1. قم بالتمرير لأسفل إلى النظم والمكتبات المرتبطة ، ثم انقر فوق الزر + لإضافة إطارات عمل.
      2. في النافذة التي تظهر ، قم بالتمرير إلى UserNotifications.framework ، وانقر فوق هذا الإدخال ، ثم انقر فوق إضافة .

        يظهر هذا الإطار فقط في Xcode v8 والإصدارات الأحدث وهو مطلوب بواسطة هذه المكتبة.

    4. حدد علامة التبويب القدرات من منطقة المحرر .

      1. تبديل دفع الإخطارات إلى تشغيل .
      2. انتقل لأسفل إلى خلفية وسائط، ثم التبديل إلى تشغيل.
      3. حدد الإخطارات عن بعد ضمن أوضاع الخلفية .
  4. أنشئ كائن تطبيق Firebase:

    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 ++ callback ، تحتاج إلى تجاوز الطريقة 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 الخاص AndroidManifest.xml .

تجاوز طرق خدمة ListenerService .

ListenerService هي فئة Java تعترض الرسائل الواردة المرسلة إلى التطبيق وتوجهها إلى مكتبة C ++. عندما يكون التطبيق في المقدمة (أو عندما يكون التطبيق في الخلفية ويتلقى حمولة بيانات فقط) ، ستمر الرسائل عبر إحدى عمليات رد الاتصال المتوفرة في هذه الفئة. لإضافة سلوك مخصص إلى معالجة الرسائل ، ستحتاج إلى توسيع خدمة ListenerService الافتراضية الخاصة بـ FCM:

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 الخاص 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 معرّف مثيل ، والذي يتم استخدامه كرمز تسجيل ضمن FCM. عندما يتم إنشاء معرف مثيل ، ستقوم المكتبة بتحميل المعرف وبيانات التكوين إلى Firebase. إذا كنت ترغب في الحصول على اشتراك صريح قبل استخدام معرف المثيل ، يمكنك منع الإنشاء في وقت التكوين عن طريق تعطيل 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 بإرسال الرسائل التي تحتوي على رابط لموضع معين إلى تطبيقك. لتلقي الرسائل التي تحتوي على رابط لموضع معين ، يجب إضافة عامل تصفية نية جديد إلى النشاط الذي يتعامل مع الروابط الداخلية لتطبيقك. يجب أن يلتقط فلتر النية الروابط لمواضع معينة في نطاقك. إذا كانت رسائلك لا تحتوي على رابط لموضع معين ، فإن هذا التكوين ليس ضروريًا. في 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>

عندما ينقر المستخدمون على إشعار يحتوي على رابط للنظام والمضيف الذي تحدده ، سيبدأ تطبيقك النشاط باستخدام عامل تصفية النية هذا للتعامل مع الارتباط.

الخطوات التالية

بعد إعداد تطبيق العميل ، تكون جاهزًا لإرسال رسائل متلقية أو موضوعية باستخدام Firebase. لمعرفة المزيد ، راجع هذه الوظيفة الموضحة في نموذج البدء السريع الذي يمكنك تنزيله وتشغيله ومراجعته.

لإضافة سلوك آخر أكثر تقدمًا إلى تطبيقك ، راجع أدلة إرسال الرسائل من خادم التطبيق:

ضع في اعتبارك أنك ستحتاج إلى تطبيق خادم للاستفادة من هذه الميزات.