لكتابة تطبيق عميل "المراسلة عبر السحابة الإلكترونية من Firebase" من عدّة أنظمة أساسية باستخدام C++ ، استخدِم واجهة برمجة تطبيقات المراسلة عبر السحابة الإلكترونية من Firebase تعمل حزمة تطوير البرامج (SDK) بلغة C++ على نظامَي التشغيل Android وApple الأساسيين، مع إجراء عملية إعداد إضافية. لكل نظام أساسي.
إعداد Firebase و"SDK للمراسلة عبر السحابة الإلكترونية من Firebase"
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.تهيئة "المراسلة عبر السحابة الإلكترونية من Firebase"، وتمرير التطبيق إلى أداة استماع تم إنشاؤها:
::firebase::messaging::Initialize(app, listener);
يجب أن تتحقّق التطبيقات التي تعتمد على حزمة تطوير البرامج (SDK) لخدمات Google Play من الجهاز. عن حِزمة APK متوافقة مع "خدمات Google Play" قبل الوصول إلى الميزات لمزيد من المعلومات، راجع التحقق من توفّر حزمة APK لخدمات Google Play
iOS+
- إذا لم تكن قد فعلت ذلك بالفعل،
إضافة Firebase إلى مشروع C++ بعد ذلك، يُرجى اتّباع الخطوات التالية:
لإعداد مشروعك للمراسلة عبر السحابة الإلكترونية من Firebase:
- في Podfile الخاص بمشروعك، أضف تبعية FCM:
pod 'FirebaseMessaging'
- سحب
firebase.framework
وfirebase_messaging.framework
إطارات العمل في مشروع Xcode من حزمة تطوير البرامج (SDK) C++ من Firebase.
- في 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
عندما لا يكون التطبيق قيد التشغيل على الإطلاق وينقر المستخدم على إشعار،
لا يتم توجيه الرسالة بشكل تلقائي من خلال خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" المدمجة
مع معاودة الاتصال. في هذه الحالة، يتم استلام حمولات الرسائل من خلال Intent
.
المستخدم لبدء التطبيق. لإتاحة إعادة توجيه هذه الرسائل الواردة من خلال خدمة "المراسلة عبر السحابة الإلكترونية من Firebase"
إلى معاودة الاتصال بمكتبة 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); } }
الرسائل التي يتم استلامها أثناء عمل التطبيق في الخلفية تتضمن محتوى
المستخدم في حقل الإشعار
لملء إشعار لوحة النظام، ولكن
عدم إرسال محتوى الإشعار إلى خدمة "المراسلة عبر السحابة الإلكترونية من Firebase". أي،
لن يكون Message::notification
فارغًا.
وباختصار:
حالة التطبيق | الإشعار | البيانات | كلاهما |
---|---|---|---|
لون الواجهة | OnMessageReceived |
OnMessageReceived |
OnMessageReceived |
الخلفية | علبة النظام | OnMessageReceived |
إشعار: لوحة النظام البيانات: في سياقات الهدف. |
التعامل مع الرسائل المخصصة على Android
بشكل تلقائي، يتم تمرير الإشعارات المرسلة إلى التطبيق إلى
::firebase::messaging::Listener::OnMessageReceived
، ولكن في بعض الحالات قد
وتريد إلغاء السلوك الافتراضي. لإجراء ذلك على Android، يجب
وكتابة فصول دراسية مخصصة تمتد
com.google.firebase.messaging.cpp.ListenerService
بالإضافة إلى تحديث
AndroidManifest.xml
لمشروعك.
إلغاء طُرق ListenerService
ListenerService
هي فئة Java التي تتداخل مع الرسائل الواردة المُرسَلة إلى
التطبيق وتوجيهها إلى مكتبة C++. عندما يعمل التطبيق في المقدّمة
(أو عندما يكون التطبيق في الخلفية ويتلقّى حمولة بيانات فقط)
تمر الرسائل بإحدى عمليات معاودة الاتصال المتوفرة في هذا الصف. للإضافة
مخصص للتعامل مع الرسائل، فستحتاج إلى تمديد
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
.
الذي يعرّف القيمة التلقائية للمراسلة عبر السحابة الإلكترونية من Firebase.ListenerService
هذا البيان
عادةً ما يتم دمجها مع البيان الخاص بالمشروع والذي يمثل كيف
يمكن تشغيل "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>
منع الإعداد التلقائي
تنشئ خدمة "المراسلة عبر السحابة الإلكترونية من Firebase" رمزًا مميّزًا للتسجيل من أجل استهداف الأجهزة.
عندما يتم إنشاء رمز مميز، تقوم المكتبة بتحميل ملف
والمعرّف وبيانات التهيئة إلى 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
تسمح ميزة "المراسلة عبر السحابة الإلكترونية من Firebase" بإرسال الرسائل التي تحتوي على رابط لصفحة في تطبيقك. لاستلام رسائل تحتوي على رابط لصفحة في التطبيق، يجب إضافة فلتر أهداف جديد. إلى النشاط الذي يعالج الروابط لمواضع معيّنة لتطبيقك. يجب أن يعمل فلتر الأهداف التقاط روابط لمواضع معينة لنطاقك. إذا لم تتضمّن رسائلك رابطًا لموضع معيّن، هذه التهيئة ليست ضرورية. في ملف 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. لمعرفة المزيد من المعلومات، يمكنك الاطّلاع على هذه الوظيفة في نموذج للبدء السريع التي يمكنك تنزيلها وتشغيلها ومراجعتها.
لإضافة سلوك آخر أكثر تقدمًا إلى تطبيقك، يمكنك الاطّلاع على أدلة الإرسال الرسائل الواردة من خادم التطبيق:
ضع في اعتبارك أنك بحاجة إلى تنفيذ الخادم للاستفادة من هذه الجديدة.