Google is committed to advancing racial equity for Black communities. See how.
इस पेज का अनुवाद Cloud Translation API से किया गया है.
Switch to English

C ++ के साथ फायरबेस क्लाउड मैसेजिंग क्लाइंट ऐप सेट करें

C ++ के साथ अपने क्रॉस-प्लेटफॉर्म फायरबेस क्लाउड मैसेजिंग क्लाइंट ऐप को लिखने के लिए, फायरबेस क्लाउड मैसेजिंग एपीआई का उपयोग करें। C ++ SDK एंड्रॉइड और iOS दोनों के लिए काम करता है, प्रत्येक प्लेटफॉर्म के लिए कुछ अतिरिक्त सेटअप की आवश्यकता होती है।

फायरबेस और एफसीएम एसडीके की स्थापना करें

एंड्रॉयड

  1. यदि आप पहले से ही नहीं है, तो अपने C ++ प्रोजेक्ट में Firebase जोड़ें

    • लिंक किए गए सेटअप निर्देशों में, Firebase C ++ SDK का उपयोग करने के लिए डिवाइस और ऐप आवश्यकताओं की समीक्षा करें, जिसमें अपने ऐप को बनाने के लिए CMake का उपयोग करने की सिफारिश भी शामिल है।

    • अपने प्रोजेक्ट-लेवल build.gradle फ़ाइल में, अपने buildscript और allprojects दोनों वर्गों में Google के buildscript रिपॉजिटरी को शामिल करना सुनिश्चित करें।

  2. JNI पर्यावरण और गतिविधि में पासिंग: एक Firebase App ऑब्जेक्ट बनाएं, 3D9f6dbb61

  3. एक वर्ग को परिभाषित करें जो firebase::messaging::Listener लागू करता है firebase::messaging::Listener इंटरफ़ेस।

  4. एफसीएम को प्रारंभ करें, ऐप में पास करना और एक निर्मित श्रोता:

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

  5. Google Play सेवाओं पर भरोसा करने वाले ऐप्स SDK को सुविधाओं तक पहुंचने से पहले डिवाइस को संगत Google Play सेवाओं के लिए APK की जांच करनी चाहिए। अधिक जानने के लिए, Google Play सेवाओं की एपीके के लिए जाँच करें

आईओएस

  1. आपको एक मान्य APNs प्रमाणपत्र की आवश्यकता है। यदि आपके पास पहले से एक नहीं है, तो प्रावधान APNs SSL प्रमाणपत्र देखें
  2. यदि आप पहले से ही नहीं है, तो अपने C ++ प्रोजेक्ट में Firebase जोड़ें । फिर, FCM के लिए अपनी परियोजना स्थापित करने के लिए:
    1. अपनी परियोजना के पोडफाइल में, एफसीएम निर्भरता जोड़ें:
      pod 'Firebase/Messaging'
    2. Firebase C ++ SDK से अपने Xcode प्रोजेक्ट में firebase.framework और firebase_messaging.framework चौखटे खींचें।
  3. पुश सूचनाएं सक्षम करने के लिए अपने Xcode प्रोजेक्ट को कॉन्फ़िगर करें:

    1. नेविगेटर क्षेत्र से प्रोजेक्ट का चयन करें।
    2. संपादक क्षेत्र से परियोजना लक्ष्य चुनें।
    3. संपादक क्षेत्र से सामान्य टैब चुनें।

      1. लिंक्ड फ्रेमवर्क और लाइब्रेरी तक स्क्रॉल करें, फिर फ्रेमवर्क जोड़ने के लिए + बटन पर क्लिक करें।
      2. दिखाई देने वाली विंडो में, UserNotifications.framework पर स्क्रॉल करें, उस प्रविष्टि पर क्लिक करें, फिर Add पर क्लिक करें।

        यह ढांचा केवल Xcode v8 और बाद में दिखाई देता है और इस पुस्तकालय द्वारा आवश्यक है।

    4. संपादक क्षेत्र से क्षमताओं टैब का चयन करें।

      1. पुश सूचनाओं को चालू करें
      2. बैकग्राउंड मोड्स पर स्क्रॉल करें, फिर इसे ऑन करें
      3. बैकग्राउंड मोड के तहत रिमोट नोटिफ़िकेशन चुनें।
  4. Firebase App ऑब्जेक्ट बनाएं:

    app = ::firebase::App::Create(::firebase::AppOptions());

  5. एक वर्ग को परिभाषित करें जो firebase::messaging::Listener लागू करता है firebase::messaging::Listener इंटरफ़ेस।

  6. फायरबेस क्लाउड मेसेजिंग, ऐप में पास करना और एक निर्मित श्रोता:

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

डिवाइस पंजीकरण टोकन एक्सेस करें

फायरबेस क्लाउड मैसेजिंग लाइब्रेरी को शुरू करने पर, क्लाइंट ऐप इंस्टेंट के लिए एक पंजीकरण टोकन का अनुरोध किया जाता है। एप्लिकेशन को OnTokenReceived कॉलबैक के साथ एक टोकन प्राप्त होगा, जिसे उस वर्ग में परिभाषित किया जाना चाहिए जो OnTokenReceived firebase::messaging::Listener लागू करता है।

यदि आप उस विशिष्ट उपकरण को लक्षित करना चाहते हैं, तो आपको इस टोकन तक पहुंच की आवश्यकता होगी।

Android पर संदेश वितरण के बारे में ध्यान दें

जब ऐप बिल्कुल नहीं चल रहा है और उपयोगकर्ता अधिसूचना पर टैप करता है, तो संदेश, डिफ़ॉल्ट रूप से, एफसीएम द्वारा निर्मित कॉलबैक में रूट नहीं किया जाता है। इस मामले में, एप्लिकेशन शुरू करने के लिए उपयोग किए गए एक Intent माध्यम से संदेश पेलोड प्राप्त होता है। एफसीएम को इन आवक संदेशों को सी ++ लाइब्रेरी कॉलबैक के लिए अग्रेषित करने के लिए, आपको अपनी गतिविधि में onNewIntent विधि को ओवरराइड करने और MessageForwardingService के 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 को पास कर दी ::firebase::messaging::Listener::OnMessageReceived , लेकिन कुछ मामलों में आप डिफ़ॉल्ट व्यवहार को ओवरराइड कर सकते हैं। एंड्रॉइड पर ऐसा करने के लिए आपको कस्टम क्लासेस लिखना होगा जो com.google.firebase.messaging.cpp.ListenerService विस्तार करने के साथ-साथ आपके प्रोजेक्ट के AndroidManifest.xml को अपडेट करें।

ओवरराइड लिसनर्स ListenerService तरीके।

ListenerService जावा वर्ग है जो ऐप में भेजे गए आने वाले संदेशों को स्वीकार करता है और उन्हें 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 फ़ाइल है जो FCM के डिफ़ॉल्ट ListenerService की घोषणा करती है। इस प्रकटन को आम तौर पर प्रोजेक्ट विशिष्ट मेनिफ़ेस्ट के साथ 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 पर अपलोड करेगी। यदि आप इंस्टेंस आईडी का उपयोग करने से पहले एक स्पष्ट ऑप्ट-इन प्राप्त करना चाहते हैं, तो आप FCM (और Android, Analytics पर) को अक्षम करके पीढ़ी को कॉन्फ़िगर समय पर रोक सकते हैं। । ऐसा करने के लिए, iOS पर अपने Info.plist (अपने GoogleService-Info.plist ) या अपने 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);

यह मान एक बार सेट होने पर ऐप पुनरारंभ होता है।

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>

जब उपयोगकर्ता योजना के लिंक वाली एक अधिसूचना पर टैप करते हैं और आपके द्वारा निर्दिष्ट होस्ट करते हैं, तो आपका ऐप लिंक को संभालने के लिए इस इरादे फ़िल्टर के साथ गतिविधि शुरू करेगा।

अगला कदम

क्लाइंट ऐप को सेट करने के बाद, आप फायरबेस के साथ डाउनस्ट्रीम और विषय संदेश भेजने के लिए तैयार हैं। अधिक जानने के लिए, इस कार्यक्षमता को क्विकस्टार्ट नमूने में दिखाया गया है जिसे आप डाउनलोड कर सकते हैं, चला सकते हैं और समीक्षा कर सकते हैं।

अपने ऐप में अन्य उन्नत व्यवहार जोड़ने के लिए, ऐप सर्वर से संदेश भेजने के लिए गाइड देखें:

ध्यान रखें कि इन सुविधाओं का उपयोग करने के लिए आपको सर्वर कार्यान्वयन की आवश्यकता होगी।