Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

फायरबेस और एफसीएम एसडीके सेट करें

एंड्रॉयड

  1. आप पहले से ही नहीं है, तो आपके सी ++ परियोजना के लिए Firebase जोड़ने

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

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

  2. एक Firebase अनुप्रयोग वस्तु बनाएँ, JNI पर्यावरण और गतिविधि में गुजर:

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

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

  4. प्रारंभ FCM, अनुप्रयोग और एक का निर्माण किया श्रोता में निधन:

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

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

आईओएस+

  1. आपको एक मान्य जरूरत APN के प्रमाण पत्र। आप पहले से ही एक नहीं है, तो सुनिश्चित करें में बनाने के लिए बनाने के Apple डेवलपर सदस्य केंद्र
  2. आप पहले से ही नहीं है, तो आपके सी ++ परियोजना के लिए Firebase जोड़ने । फिर, FCM के लिए अपना प्रोजेक्ट सेट करने के लिए:
    1. अपने प्रोजेक्ट की Podfile में, FCM निर्भरता जोड़ें:
      pod 'Firebase/Messaging'
    2. खींचें firebase.framework और firebase_messaging.framework से अपने Xcode प्रोजेक्ट में चौखटे Firebase सी ++ एसडीके
  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);

डिवाइस पंजीकरण टोकन तक पहुंचें

फायरबेस क्लाउड मैसेजिंग लाइब्रेरी को इनिशियलाइज़ करने पर, क्लाइंट ऐप इंस्टेंस के लिए एक पंजीकरण टोकन का अनुरोध किया जाता है। अनुप्रयोग के साथ टोकन प्राप्त होगा 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 , लेकिन कुछ मामलों में आप डिफ़ॉल्ट व्यवहार को ओवरराइड कर सकते हैं। एंड्रॉयड पर ऐसा करने के लिए आपको लगता है कि विस्तार कस्टम वर्गों लिखने के लिए की आवश्यकता होगी 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 Cusom श्रोता सेवा के साथ प्रतिस्थापित करने की आवश्यकता है। यही कारण है कि डिफ़ॉल्ट को हटाने के द्वारा पूरा किया है 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 सी ++ एसडीके (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 पर) को अक्षम करके कॉन्फ़िगर समय पर पीढ़ी को रोक सकते हैं। ऐसा करने के लिए, अपने लिए एक मेटाडाटा मूल्य जोड़ने Info.plist (आपका नहीं GoogleService-Info.plist ) एप्पल प्लेटफार्मों पर, या अपने 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>

तीव्र

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>

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

अगला कदम

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

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

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