لكتابة تطبيق عميل Firebase Cloud Messaging من عدّة منصات باستخدام C++ ، استخدِم واجهة برمجة التطبيقات Firebase Cloud Messaging. تعمل حزمة تطوير البرامج (SDK) بلغة C++ على نظامَي التشغيل Android وApple الأساسيين، مع إجراء عملية إعداد إضافية. لكل نظام أساسي.
إعداد Firebase وحزمة تطوير البرامج (SDK) الخاصة بـ "FCM"
Android
إذا لم تكن قد فعلت ذلك بالفعل، إضافة Firebase إلى مشروع C++
في تعليمات الإعداد المرتبطة، راجِع الجهاز والتطبيق. متطلبات استخدام حزمة تطوير البرامج (SDK) Firebase C++، بما في ذلك أو اقتراح استخدام أداة CMake لإنشاء تطبيقك.
في ملف
build.gradle
على مستوى المشروع، تأكَّد من تضمين مستودع Maven التابع لشركة Google في كل منbuildscript
أقسامallprojects
يمكنك إنشاء كائن تطبيق Firebase، وإرساله في بيئة JNI النشاط:
app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
تحديد فئة تنفذ
firebase::messaging::Listener
من واجهة pyplot.إعداد FCM، وتمرير التطبيق إلى أداة استماع تم إنشاؤها:
::firebase::messaging::Initialize(app, listener);
يجب أن تتحقّق التطبيقات التي تعتمد على حزمة تطوير البرامج (SDK) لخدمات Google Play من الجهاز. عن حِزمة APK متوافقة مع "خدمات Google Play" قبل الوصول إلى الميزات لمزيد من المعلومات، راجع التحقق من توفّر حزمة APK لخدمات Google Play
iOS+
- إذا لم تكن قد فعلت ذلك بالفعل،
إضافة Firebase إلى مشروع C++ بعد ذلك، يُرجى اتّباع الخطوات التالية:
لإعداد مشروعك في "FCM":
- في Podfile الخاص بمشروعك، أضف تبعية FCM:
pod 'FirebaseMessaging'
- سحب
firebase.framework
وfirebase_messaging.framework
أطر العمل في مشروع Xcode من Firebase C++ حزمة SDK.
- في Podfile الخاص بمشروعك، أضف تبعية FCM:
حمِّل مفتاح مصادقة أسماء نقاط الوصول إلى Firebase. إذا لم يكن لديك مفتاح مصادقة لأسماء نقاط الوصول (APN)، احرص على إنشاء مفتاح في مركز أعضاء مطوّري برامج Apple
-
داخل مشروعك في وحدة تحكّم "Firebase"، اختَر رمز الترس، اختَر إعدادات المشروع، ثم حدد المراسلة عبر السحابة الإلكترونية.
-
في مفتاح مصادقة أسماء نقاط الوصول (APN) ضمن ضبط تطبيق iOS، انقر على تحميل .
-
تصفح المكان الذي حفظت فيه مفتاحك، وحدده، ثم انقر انقر على فتح. أضِف معرّف المفتاح للمفتاح (المتوفّر في Apple Developer Member Center) وانقر على تحميل:
-
اضبط مشروع Xcode لتفعيل الإشعارات الفورية:
- اختَر المشروع من منطقة المستكشف.
- اختَر هدف المشروع من منطقة المحرِّر.
اختَر علامة التبويب عام من منطقة المحرِّر.
- مرِّر لأسفل إلى أُطر العمل والمكتبات المرتبطة، ثم انقر على الزر + لإضافة أطر عمل.
في النافذة التي تظهر، مرِّر للوصول UserNotifications.framework، انقر على هذا الإدخال، ثم انقر على انقر على إضافة.
لا يظهر إطار العمل هذا إلا في الإصدار 8 من Xcode والإصدارات الأحدث، مطلوبة لهذه المكتبة.
اختَر علامة التبويب الإمكانات من منطقة المحرِّر.
- بدِّل مفتاح الإشعارات الفورية إلى تفعيل.
- انتقِل للأسفل وصولاً إلى أوضاع الخلفية، ثم بدِّل الوضع إلى تفعيل.
- انقر على الإشعارات عن بُعد ضمن أوضاع الخلفية.
إنشاء كائن تطبيق في Firebase:
app = ::firebase::App::Create(::firebase::AppOptions());
تحديد فئة تنفذ
firebase::messaging::Listener
من واجهة pyplot.تهيئة "المراسلة عبر السحابة الإلكترونية من Firebase"، وتمريرها إلى التطبيق وصفحة المستمع:
::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
، ولكن في بعض الحالات قد
وتريد إلغاء السلوك الافتراضي. لإجراء ذلك على 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
هذا بـ
خدمة مستمعي العميل. يتم تحقيق ذلك من خلال إزالة الإعداد التلقائي
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>
تستخدم الإصدارات الجديدة من حزمة تطوير برامج Firebase C++ (الإصدار 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. إذا كنت تريد الحصول على لقطة شاشة
الموافقة قبل استخدام الرمز المميّز، يمكنك منع الإنشاء في وقت الإعداد من خلال
إيقاف ميزة "المراسلة عبر السحابة الإلكترونية من Firebase" (وفي Android، "إحصاءات Google"). للقيام بذلك، أضف قيمة بيانات تعريف إلى
Info.plist
(وليس GoogleService-Info.plist
) على منصات Apple
أو AndroidManifest.xml
على Android:
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>
Swift
FirebaseMessagingAutoInitEnabled = NO
لإعادة تفعيل خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"، يمكنك إجراء مكالمة في بيئة التشغيل:
::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);
تظل هذه القيمة سارية في جميع عمليات إعادة تشغيل التطبيق بعد ضبطها.
التعامل مع الرسائل التي تتضمن روابط لصفحات معيّنة على Android
يسمح 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. لمعرفة المزيد من المعلومات، يمكنك الاطّلاع على هذه الوظيفة في نموذج للبدء السريع التي يمكنك تنزيلها وتشغيلها ومراجعتها.
لإضافة سلوك آخر أكثر تقدمًا إلى تطبيقك، يمكنك الاطّلاع على أدلة الإرسال الرسائل الواردة من خادم التطبيق:
ضع في اعتبارك أنك بحاجة إلى تنفيذ الخادم للاستفادة من هذه الجديدة.