C++ के साथ Firebase क्लाउड से मैसेज वाला क्लाइंट ऐप्लिकेशन सेट अप करना

C++ के साथ अपना क्रॉस-प्लैटफ़ॉर्म Firebase Cloud Messaging क्लाइंट ऐप्लिकेशन लिखने के लिए, Firebase Cloud Messaging API. C++ SDK टूल, Android और Apple, दोनों प्लैटफ़ॉर्म पर काम करता है. इसके लिए, आपको कुछ अतिरिक्त सेटअप करने की ज़रूरत होती है हर प्लैटफ़ॉर्म के लिए.

Firebase और FCM SDK टूल सेट अप करें

Android

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

    • लिंक किए गए सेटअप निर्देशों में, डिवाइस और ऐप्लिकेशन की समीक्षा करें Firebase C++ SDK टूल का इस्तेमाल करने की ज़रूरी शर्तें. इनमें, आपको अपना ऐप्लिकेशन बनाने के लिए CMake का इस्तेमाल करने का सुझाव मिलेगा.

    • अपनी प्रोजेक्ट-लेवल की build.gradle फ़ाइल में, यह पक्का करें कि आपके buildscript और, दोनों में Google की Maven रिपॉज़िटरी allprojects सेक्शन.

  2. Firebase ऐप्लिकेशन ऑब्जेक्ट बनाएं. साथ ही, जेएनआई एनवायरमेंट में पास करें और गतिविधि:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);

  3. firebase::messaging::Listener को लागू करने वाली क्लास तय करें इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है.

  4. ऐप्लिकेशन में पास करते हुए और बिल्ट-इन लिसनर के साथ, FCM को शुरू करें:

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

  5. Google Play services SDK टूल का इस्तेमाल करने वाले ऐप्लिकेशन को डिवाइस की जांच करनी चाहिए Google Play services के किसी APK के साथ काम करता है. ज़्यादा जानकारी के लिए, यह लेख पढ़ें Google Play services APK देखें.

iOS और उसके बाद के वर्शन

  1. अगर आपने अब तक ऐसा नहीं किया है, तो अपने C++ प्रोजेक्ट में Firebase जोड़ें. इसके बाद, FCM के लिए अपना प्रोजेक्ट सेट अप करने के लिए:
    1. अपने प्रोजेक्ट की Podfile में, FCM डिपेंडेंसी जोड़ें:
      pod 'FirebaseMessaging'
    2. firebase.framework और firebase_messaging.framework को खींचें और छोड़ें Firebase C++ SDK टूल से आपके Xcode प्रोजेक्ट के फ़्रेमवर्क के तौर पर शामिल होना चाहिए.
  2. अपनी एपीएन की पुष्टि करने वाली कुंजी को Firebase पर अपलोड करें. अगर आपके पास पहले से एपीएन की पुष्टि करने वाली कुंजी नहीं है, तो पक्का करें कि आपने Apple Developer सदस्य केंद्र.

    1. Firebase कंसोल में अपने प्रोजेक्ट के अंदर, गियर आइकॉन, चुनें प्रोजेक्ट सेटिंग पर क्लिक करें और फिर क्लाउड से मैसेज टैब.

    2. iOS ऐप्लिकेशन कॉन्फ़िगरेशन में, APNs पुष्टि कुंजी में, अपलोड करें पर क्लिक करें बटन.

    3. उस जगह ब्राउज़ करें जहां आपने सुरक्षा कुंजी सेव की है. इसके बाद, उसे चुनें और खोलें. कुंजी के लिए कुंजी आईडी जोड़ें (यहां उपलब्ध है Apple Developer Member Center) और क्लिक करें अपलोड करें.

  3. पुश नोटिफ़िकेशन चालू करने के लिए, अपना Xcode प्रोजेक्ट कॉन्फ़िगर करें:

    1. नेविगेटर एरिया से प्रोजेक्ट चुनें.
    2. एडिटर एरिया से प्रोजेक्ट टारगेट चुनें.
    3. एडिटर एरिया से सामान्य टैब चुनें.

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

        यह फ़्रेमवर्क सिर्फ़ Xcode v8 और उसके बाद के वर्शन में दिखता है और यह इस लाइब्रेरी के लिए आवश्यक है.

    4. एडिटर एरिया से क्षमताएं टैब चुनें.

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

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

  5. firebase::messaging::Listener को लागू करने वाली क्लास तय करें इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है.

  6. Firebase क्लाउड से मैसेज भेजने की सुविधा शुरू करें, ऐप्लिकेशन में पास करें, और श्रोता:

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

डिवाइस रजिस्ट्रेशन टोकन को ऐक्सेस करना

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

अगर आपको उस डिवाइस को टारगेट करना है, तो आपके पास इस टोकन का ऐक्सेस होना चाहिए.

Android पर मैसेज डिलीवरी के बारे में नोट

जब ऐप्लिकेशन बिलकुल न चल रहा हो और उपयोगकर्ता किसी सूचना पर टैप करता हो, मैसेज को डिफ़ॉल्ट रूप से, FCM के बिल्ट-इन की मदद से रूट नहीं किया जाता है कॉलबैक. इस मामले में, मैसेज पेलोड Intent से भेजे जाते हैं का इस्तेमाल ऐप्लिकेशन को शुरू करने के लिए किया जाता है. इन इनकमिंग कॉल को FCM फ़ॉरवर्ड करने के लिए रखता है, तो आपको यह तरीका ओवरराइड करना होगा 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 तरीके को बदलकर, ये काम किए जा सकते हैं मिलने वाले डेटा के आधार पर कार्रवाई करना रिमोट मैसेज ऑब्जेक्ट और संदेश डेटा पाएं:

@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, डिवाइस टारगेटिंग के लिए रजिस्ट्रेशन टोकन जनरेट करता है. जब कोई टोकन जनरेट होता है, तब लाइब्रेरी Firebase में आइडेंटिफ़ायर और कॉन्फ़िगरेशन डेटा जोड़ा गया है. अगर आपको अश्लील कॉन्टेंट अगर आपको टोकन का इस्तेमाल करने से पहले ऑप्ट-इन करना है, तो कॉन्फ़िगर करते समय जनरेट होने से रोकने के लिए ऐसा किया जा सकता है: FCM (और 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

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>

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

अगले चरण

क्लाइंट ऐप्लिकेशन सेट अप करने के बाद, डाउनस्ट्रीम और विषय Firebase से मैसेज की संख्या बढ़ाएं. ज़्यादा जानने के लिए, यह सुविधा देखें में क्विकस्टार्ट सैंपल जिसे डाउनलोड, चलाया, और देखा जा सकता है.

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

ध्यान रखें कि आपको इसकी ज़रूरत होगी सर्वर को लागू करने की प्रोसेस के दौरान सुविधाएँ.