| प्लैटफ़ॉर्म चुनें: | iOS+ Android Web Flutter Unity C++ |
इस गाइड में, Firebase Cloud Messaging का इस्तेमाल शुरू करने का तरीका बताया गया है, ताकि भरोसेमंद तरीके से मैसेज भेजे जा सकें.
C++ का इस्तेमाल करके, अलग-अलग प्लैटफ़ॉर्म पर काम करने वाला Firebase Cloud Messaging क्लाइंट ऐप्लिकेशन बनाने के लिए, Firebase Cloud Messaging एपीआई का इस्तेमाल करें. C++ SDK टूल, Android और Apple, दोनों प्लैटफ़ॉर्म पर काम करता है. हालांकि, हर प्लैटफ़ॉर्म के लिए कुछ अतिरिक्त सेटअप करना ज़रूरी है. iOS और Android के लिए C++ SDK टूल, FCM के साथ कैसे काम करता है, इस बारे में ज़्यादा जानने के लिए, C++ के लिए Firebase के बारे में जानकारी देखें.
Firebase और FCM SDK टूल सेट अप करना
Android
अगर आपने पहले से ही नहीं किया है, अपने C++ प्रोजेक्ट में Firebase जोड़ें.
लिंक किए गए सेटअप के निर्देशों में, Firebase C++ SDK टूल का इस्तेमाल करने के लिए, डिवाइस और ऐप्लिकेशन की ज़रूरी शर्तें देखें. इसमें, अपने ऐप्लिकेशन को बनाने के लिए CMake का इस्तेमाल करने का सुझाव भी शामिल है.
अपने प्रोजेक्ट-लेवल की
build.gradleफ़ाइल में, पक्का करें कि आपनेbuildscriptऔरallprojects, दोनों सेक्शन में Google की Maven रिपॉज़िटरी शामिल की हो.
JNI एनवायरमेंट और ऐक्टिविटी पास करके, Firebase ऐप्लिकेशन ऑब्जेक्ट बनाएं:
app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
firebase::messaging::Listenerइंटरफ़ेस को लागू करने वाली क्लास तय करें.FCM को शुरू करें, ऐप्लिकेशन और बनाए गए लिसनर को पास करके:
::firebase::messaging::Initialize(app, listener);
Google Play services SDK टूल पर निर्भर रहने वाले ऐप्लिकेशन को, सुविधाओं को ऐक्सेस करने से पहले, डिवाइस पर Google Play services का APK टूल देखना चाहिए. ज़्यादा जानने के लिए, Google Play services का APK टूल देखना लेख पढ़ें.
iOS+
- अगर आपने पहले से ही नहीं किया है,
अपने C++ प्रोजेक्ट में Firebase जोड़ें. इसके बाद,
अपने प्रोजेक्ट को FCM के लिए सेट अप करने के लिए:
- अपने प्रोजेक्ट की Podfile में, एफ़सीएम डिपेंडेंसी जोड़ें:
pod 'FirebaseMessaging'
- Firebase C++ SDK टूल से,
firebase.frameworkऔरfirebase_messaging.frameworkफ़्रेमवर्क को अपने Xcode प्रोजेक्ट में खींचें.
- अपने प्रोजेक्ट की Podfile में, एफ़सीएम डिपेंडेंसी जोड़ें:
APNs की पुष्टि करने वाली कुंजी को Firebase पर अपलोड करें. अगर आपके पास पहले से APNs की पुष्टि करने वाली कुंजी नहीं है, तो Apple Developer Member Center में एक कुंजी बनाएं.
-
Firebase कंसोल में, सेटिंग पर जाएं
सेटिंग > सामान्य. इसके बाद, क्लाउड मैसेजिंग टैब पर क्लिक करें. - iOS ऐप्लिकेशन कॉन्फ़िगरेशन में मौजूद APNs की पुष्टि करने वाली कुंजी में जाकर, डेवलपमेंट की पुष्टि करने वाली कुंजी, प्रोडक्शन की पुष्टि करने वाली कुंजी या दोनों को अपलोड करने के लिए, अपलोड करें पर क्लिक करें. कम से कम एक कुंजी होनी चाहिए.
- उस जगह पर जाएं जहां आपने अपनी कुंजी सेव की है. इसके बाद, उसे चुनें और खोलें पर क्लिक करें. कुंजी के लिए कुंजी आईडी जोड़ें. यह आईडी, Apple Developer Member Center) में उपलब्ध होता है. इसके बाद, अपलोड करें पर क्लिक करें.
-
Firebase कंसोल में, सेटिंग पर जाएं
पुश नोटिफ़िकेशन की सुविधा चालू करने के लिए, अपने Xcode प्रोजेक्ट को कॉन्फ़िगर करें:
- नेविगेटर एरिया से प्रोजेक्ट चुनें.
- एडिटर एरिया से प्रोजेक्ट टारगेट चुनें.
एडिटर एरिया से सामान्य टैब चुनें.
- लिंक किए गए फ़्रेमवर्क और लाइब्रेरी पर स्क्रोल करें. इसके बाद, फ़्रेमवर्क जोड़ने के लिए, + बटन पर क्लिक करें.
इसके बाद, जो विंडो खुलेगी उसमें UserNotifications.framework पर स्क्रोल करें. इसके बाद, एंट्री पर क्लिक करें और जोड़ें पर क्लिक करें.
यह फ़्रेमवर्क, Xcode के सिर्फ़ v8 और इसके बाद के वर्शन में दिखता है. साथ ही, इस लाइब्रेरी के लिए यह ज़रूरी है.
एडिटर एरिया से कैपेबिलिटी टैब चुनें.
- पुश नोटिफ़िकेशन को चालू पर स्विच करें.
- **बैकग्राउंड मोड** पर स्क्रोल करें. इसके बाद, इसे **चालू** पर स्विच करें.
- बैकग्राउंड मोड में जाकर, रिमोट नोटिफ़िकेशन चुनें.
Firebase ऐप्लिकेशन ऑब्जेक्ट बनाएं:
app = ::firebase::App::Create(::firebase::AppOptions());
firebase::messaging::Listenerइंटरफ़ेस को लागू करने वाली क्लास तय करें.ऐप्लिकेशन और बनाए गए लिसनर को पास करके, Firebase क्लाउड मैसेजिंग को शुरू करें:
::firebase::messaging::Initialize(app, listener);
FCM रजिस्ट्रेशन टोकन ऐक्सेस करना
Firebase क्लाउड मैसेजिंग लाइब्रेरी को शुरू करने पर, क्लाइंट ऐप्लिकेशन इंस्टेंस के लिए रजिस्ट्रेशन टोकन का अनुरोध किया जाता है. ऐप्लिकेशन को OnTokenReceived कॉलबैक के साथ टोकन मिलेगा. इसे firebase::messaging::Listener को लागू करने वाली क्लास में तय किया जाना चाहिए.
अगर आपको उस खास ऐप्लिकेशन इंस्टेंस को टारगेट करना है, तो आपको इस टोकन का ऐक्सेस चाहिए.
Android पर मैसेज डिलीवरी के बारे में जानकारी
अगर ऐप्लिकेशन बिलकुल भी नहीं चल रहा है और कोई उपयोगकर्ता किसी सूचना पर टैप करता है,
तो डिफ़ॉल्ट रूप से मैसेज को FCM's बिल्ट-इन
कॉलबैक के ज़रिए रूट नहीं किया जाता है. इस मामले में, मैसेज पेलोड, ऐप्लिकेशन शुरू करने के लिए इस्तेमाल किए गए Intent के ज़रिए मिलते हैं. इन आने वाले
मैसेज को C++ लाइब्रेरी कॉलबैक पर फ़ॉरवर्ड कराने के लिए, आपको अपनी ऐक्टिविटी में onNewIntent तरीके को बदलना होगा. साथ ही, Intent को
MessageForwardingService पर पास करना होगा.FCM
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's
डिफ़ॉल्ट 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's डिफ़ॉल्ट 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 ऐप्लिकेशन इंस्टेंस को टारगेट करने के लिए, रजिस्ट्रेशन टोकन जनरेट करता है.
टोकन जनरेट होने पर, लाइब्रेरी, आइडेंटिफ़ायर और कॉन्फ़िगरेशन डेटा को Firebase पर अपलोड करती है. अगर आपको टोकन का इस्तेमाल करने से पहले, साफ़ तौर पर ऑप्ट-इन पाना है, तो कॉन्फ़िगरेशन के दौरान एफ़सीएम (और Android पर, Analytics) को बंद करके, टोकन जनरेट होने से रोका जा सकता है. इसके लिए, Apple प्लैटफ़ॉर्म पर
अपने Info.plist (न कि GoogleService-Info.plist) या Android पर
अपने 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>
Swift
FirebaseMessagingAutoInitEnabled = NO
एफ़सीएम को फिर से चालू करने के लिए, रनटाइम कॉल किया जा सकता है:
::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>
जब उपयोगकर्ता, आपकी तय की गई स्कीम और होस्ट के लिंक वाली किसी सूचना पर टैप करते हैं, तो आपका ऐप्लिकेशन, लिंक को हैंडल करने के लिए इस इंटेंट फ़िल्टर के साथ ऐक्टिविटी शुरू करेगा.
अगले चरण
सेटअप के चरण पूरे करने के बाद, C++ के लिए FCM का इस्तेमाल जारी रखने के कुछ विकल्प यहां दिए गए हैं: