C++ के साथ अपना क्रॉस-प्लेटफ़ॉर्म फायरबेस क्लाउड मैसेजिंग क्लाइंट ऐप लिखने के लिए, फायरबेस क्लाउड मैसेजिंग एपीआई का उपयोग करें। C++ SDK Android और Apple दोनों प्लेटफॉर्म के लिए काम करता है, प्रत्येक प्लेटफॉर्म के लिए कुछ अतिरिक्त सेटअप की आवश्यकता होती है।
Firebase और FCM SDK सेट अप करें
एंड्रॉयड
यदि आपने पहले से नहीं किया है, तो अपने C++ प्रोजेक्ट में Firebase जोड़ें ।
लिंक किए गए सेटअप निर्देशों में, Firebase C++ SDK का उपयोग करने के लिए डिवाइस और ऐप की आवश्यकताओं की समीक्षा करें, जिसमें आपके ऐप को बनाने के लिए CMake का उपयोग करने की सिफारिश भी शामिल है।
अपनी प्रोजेक्ट-स्तरीय
build.gradle
फ़ाइल में, अपनेbuildscript
औरallprojects
अनुभागों में Google की मावेन रिपॉजिटरी को शामिल करना सुनिश्चित करें।
जेएनआई पर्यावरण और गतिविधि में गुजरने वाला फायरबेस ऐप ऑब्जेक्ट बनाएं:
app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
एक वर्ग को परिभाषित करें जो
firebase::messaging::Listener
इंटरफ़ेस को लागू करता है।FCM को इनिशियलाइज़ करें, ऐप में पास करें और एक बिल्ट लिसनर:
::firebase::messaging::Initialize(app, listener);
Google Play सेवाओं SDK पर भरोसा करने वाले ऐप्स को सुविधाओं तक पहुंचने से पहले संगत Google Play सेवाओं APK के लिए डिवाइस की जांच करनी चाहिए। अधिक जानने के लिए, Google Play सेवाओं के लिए जांचें APK देखें।
आईओएस+
- आपको एक वैध APN प्रमाणपत्र की आवश्यकता है। यदि आपके पास पहले से एक नहीं है, तो Apple डेवलपर सदस्य केंद्र में एक बनाना सुनिश्चित करें।
- यदि आपने पहले से नहीं किया है, तो अपने C++ प्रोजेक्ट में Firebase जोड़ें । फिर, FCM के लिए अपना प्रोजेक्ट सेट अप करने के लिए:
- अपने प्रोजेक्ट के पॉडफाइल में, FCM डिपेंडेंसी जोड़ें:
pod 'FirebaseMessaging'
-
firebase.framework
औरfirebase_messaging.framework
फ़्रेमवर्क को Firebase C++ SDK से अपने Xcode प्रोजेक्ट में खींचें।
- अपने प्रोजेक्ट के पॉडफाइल में, FCM डिपेंडेंसी जोड़ें:
पुश सूचनाएँ सक्षम करने के लिए अपने Xcode प्रोजेक्ट को कॉन्फ़िगर करें:
- नेविगेटर क्षेत्र से परियोजना का चयन करें।
- संपादक क्षेत्र से परियोजना लक्ष्य का चयन करें।
संपादक क्षेत्र से सामान्य टैब का चयन करें।
- लिंक्ड फ्रेमवर्क और लाइब्रेरी तक नीचे स्क्रॉल करें, फिर फ्रेमवर्क जोड़ने के लिए + बटन पर क्लिक करें।
दिखाई देने वाली विंडो में, UserNotifications.framework तक स्क्रॉल करें, उस प्रविष्टि पर क्लिक करें, फिर जोड़ें पर क्लिक करें।
यह ढांचा केवल Xcode v8 और बाद में दिखाई देता है और इस पुस्तकालय के लिए आवश्यक है।
संपादक क्षेत्र से क्षमताएं टैब चुनें.
- पुश नोटिफ़िकेशन को चालू पर स्विच करें.
- पृष्ठभूमि मोड तक नीचे स्क्रॉल करें, फिर उसे चालू पर स्विच करें.
- पृष्ठभूमि मोड के अंतर्गत दूरस्थ सूचनाएं चुनें.
एक फायरबेस ऐप ऑब्जेक्ट बनाएं:
app = ::firebase::App::Create(::firebase::AppOptions());
एक वर्ग को परिभाषित करें जो
firebase::messaging::Listener
इंटरफ़ेस को लागू करता है।फायरबेस क्लाउड मैसेजिंग को इनिशियलाइज़ करें, ऐप में पास करें और एक निर्मित श्रोता:
::firebase::messaging::Initialize(app, listener);
डिवाइस पंजीकरण टोकन तक पहुंचें
फायरबेस क्लाउड मैसेजिंग लाइब्रेरी को इनिशियलाइज़ करने पर, क्लाइंट ऐप इंस्टेंस के लिए एक पंजीकरण टोकन का अनुरोध किया जाता है। ऐप को OnTokenReceived
कॉलबैक के साथ टोकन प्राप्त होगा, जिसे उस वर्ग में परिभाषित किया जाना चाहिए जो firebase::messaging::Listener
को लागू करता है।
यदि आप उस विशिष्ट उपकरण को लक्षित करना चाहते हैं, तो आपको इस टोकन तक पहुंच की आवश्यकता होगी।
Android पर संदेश वितरण के बारे में ध्यान दें
जब ऐप बिलकुल नहीं चल रहा हो और कोई उपयोगकर्ता सूचना पर टैप करता है, तो संदेश, डिफ़ॉल्ट रूप से, FCM के बिल्ट इन कॉलबैक के माध्यम से रूट नहीं किया जाता है। इस मामले में, एप्लिकेशन शुरू करने के लिए उपयोग किए जाने वाले Intent
के माध्यम से संदेश पेलोड प्राप्त होते हैं। FCM को इन आने वाले संदेशों को C++ लाइब्रेरी कॉलबैक में अग्रेषित करने के लिए, आपको अपनी गतिविधि में onNewIntent
विधि को ओवरराइड करना होगा और MessageForwardingService
के Intent
को पास करना होगा।
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); } }
ऐप पृष्ठभूमि में होने पर प्राप्त संदेशों में सिस्टम ट्रे अधिसूचना को पॉप्युलेट करने के लिए उपयोग की जाने वाली अधिसूचना फ़ील्ड की सामग्री होती है, लेकिन उस अधिसूचना सामग्री को एफसीएम को सूचित नहीं किया जाएगा। यही है, Message::notification
शून्य होगी।
सारांश:
ऐप राज्य | अधिसूचना | आंकड़े | दोनों |
---|---|---|---|
अग्रभूमि | OnMessageReceived | OnMessageReceived | OnMessageReceived |
पृष्ठभूमि | सिस्टम ट्रे | OnMessageReceived | अधिसूचना: सिस्टम ट्रे डेटा: आशय के अतिरिक्त में। |
Android पर कस्टम संदेश हैंडलिंग
डिफ़ॉल्ट रूप से, ऐप को भेजी गई सूचनाएं ::firebase::messaging::Listener::OnMessageReceived
को भेज दी जाती हैं, लेकिन कुछ मामलों में आप डिफ़ॉल्ट व्यवहार को ओवरराइड करना चाह सकते हैं। Android पर ऐसा करने के लिए आपको ऐसी कस्टम क्लास लिखनी होंगी जो com.google.firebase.messaging.cpp.ListenerService
को विस्तारित करती हैं और साथ ही अपने प्रोजेक्ट के AndroidManifest.xml
भी अपडेट करती हैं।
ListenerService
विधियों को ओवरराइड करें।
ListenerService
जावा क्लास है जो ऐप पर भेजे गए आने वाले संदेशों को रोकता है और उन्हें सी ++ लाइब्रेरी में रूट करता है। जब ऐप अग्रभूमि में होता है (या जब ऐप पृष्ठभूमि होता है और इसे केवल-डेटा पेलोड प्राप्त होता है), संदेश इस वर्ग पर प्रदान किए गए कॉलबैक में से एक से होकर गुजरेगा। संदेश प्रबंधन में कस्टम व्यवहार जोड़ने के लिए, आपको 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
को क्यूसम श्रोता सेवा से बदलने की आवश्यकता है। यह डिफ़ॉल्ट 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++ 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 उपकरण लक्ष्यीकरण के लिए एक पंजीकरण टोकन बनाता है। जब एक टोकन उत्पन्न होता है, तो पुस्तकालय पहचानकर्ता और कॉन्फ़िगरेशन डेटा को फायरबेस पर अपलोड करता है। यदि आप टोकन का उपयोग करने से पहले एक स्पष्ट ऑप्ट-इन प्राप्त करना चाहते हैं, तो आप FCM (और एंड्रॉइड, एनालिटिक्स) को अक्षम करके पीढ़ी को कॉन्फ़िगर समय पर रोक सकते हैं। ऐसा करने के लिए, Apple प्लेटफॉर्म पर अपनी Info.plist
(न कि आपकी GoogleService-Info.plist
) या Android पर अपने 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>
तीव्र
FirebaseMessagingAutoInitEnabled = NO
FCM को पुन: सक्षम करने के लिए, आप रनटाइम कॉल कर सकते हैं:
::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>
जब उपयोगकर्ता आपके द्वारा निर्दिष्ट योजना और होस्ट के लिंक वाली अधिसूचना को टैप करते हैं, तो आपका ऐप लिंक को संभालने के लिए इस आशय फ़िल्टर के साथ गतिविधि शुरू करेगा।
अगले कदम
क्लाइंट ऐप सेट अप करने के बाद, आप फायरबेस के साथ डाउनस्ट्रीम और विषय संदेश भेजने के लिए तैयार हैं। अधिक जानने के लिए, क्विकस्टार्ट नमूने में प्रदर्शित इस कार्यक्षमता को देखें जिसे आप डाउनलोड, चला और समीक्षा कर सकते हैं।
अपने ऐप में अन्य, अधिक उन्नत व्यवहार जोड़ने के लिए ऐप सर्वर से संदेश भेजने के लिए गाइड देखें:
ध्यान रखें कि इन सुविधाओं का उपयोग करने के लिए आपको सर्वर कार्यान्वयन की आवश्यकता होगी।