Firebase क्लाउड से मैसेज भेजने की सुविधा का इस्तेमाल शुरू करना


इस क्विकस्टार्ट में, मोबाइल और वेब क्लाइंट ऐप्लिकेशन में Firebase Cloud Messaging सेट अप करने का तरीका बताया गया है, ताकि आपको मैसेज भेजने में कोई परेशानी न हो. सर्वर एनवायरमेंट के लिए, आपका सर्वर एनवायरमेंट और FCM देखें.

Unity के साथ Firebase Cloud Messaging क्लाइंट ऐप्लिकेशन सेट अप करना

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

शुरू करने से पहले

ज़रूरी शर्तें

  • Unity 2021 LTS या इसके बाद का वर्शन इंस्टॉल करें. Unity 2020 के लिए सहायता को बंद कर दिया गया है. अगली मुख्य रिलीज़ के बाद, इसे सक्रिय रूप से सहायता नहीं दी जाएगी. ऐसा हो सकता है कि पहले के वर्शन भी काम करें, लेकिन उन्हें सक्रिय रूप से सपोर्ट नहीं किया जाएगा.

  • (सिर्फ़ Apple प्लैटफ़ॉर्म के लिए) इन्हें इंस्टॉल करें:

    • Xcode 13.3.1 या इसके बाद का वर्शन
    • CocoaPods 1.12.0 या इसके बाद का वर्शन
  • पक्का करें कि आपका Unity प्रोजेक्ट इन ज़रूरी शर्तों को पूरा करता हो:

    • iOS के लिए — iOS 13 या उसके बाद के वर्शन को टारगेट करता है
    • tvOS के लिए - tvOS 13 या इसके बाद के वर्शन को टारगेट करता है
    • Android के लिए — एपीआई लेवल 21 (Lollipop) या इसके बाद के वर्शन को टारगेट करता हो
  • अपने Unity प्रोजेक्ट को चलाने के लिए, कोई डिवाइस सेट अप करें या एम्युलेटर का इस्तेमाल करें.

    • iOS या tvOS के लिए — अपना ऐप्लिकेशन चलाने के लिए, फ़िज़िकल डिवाइस सेट अप करें. इसके बाद, ये टास्क पूरे करें:

      • अपने Apple Developer खाते के लिए, Apple Push Notification Authentication Key पाएं.
      • App > Capabilities में जाकर, XCode में पुश नोटिफ़िकेशन चालू करें.
    • Android के लिएएम्युलेटर को Google Play के साथ एम्युलेटर इमेज का इस्तेमाल करना होगा.

अगर आपके पास पहले से कोई Unity प्रोजेक्ट नहीं है और आपको सिर्फ़ Firebase प्रॉडक्ट आज़माना है, तो हमारे क्विकस्टार्ट सैंपल में से कोई एक डाउनलोड करें.

पहला चरण: Firebase प्रोजेक्ट बनाना

अपने Unity प्रोजेक्ट में Firebase जोड़ने से पहले, आपको एक Firebase प्रोजेक्ट बनाना होगा, ताकि उसे अपने Unity प्रोजेक्ट से कनेक्ट किया जा सके. Firebase प्रोजेक्ट के बारे में ज़्यादा जानने के लिए, Firebase प्रोजेक्ट के बारे में जानकारी पर जाएं.

दूसरा चरण: अपने ऐप्लिकेशन को Firebase में रजिस्टर करना

अपने Firebase प्रोजेक्ट से कनेक्ट करने के लिए, एक या उससे ज़्यादा ऐप्लिकेशन या गेम रजिस्टर किए जा सकते हैं.

  1. Firebase कंसोल पर जाएं.

  2. सेटअप वर्कफ़्लो लॉन्च करने के लिए, प्रोजेक्ट की खास जानकारी वाले पेज के बीच में मौजूद Unity आइकॉन () पर क्लिक करें.

    अगर आपने पहले से ही अपने Firebase प्रोजेक्ट में कोई ऐप्लिकेशन जोड़ा है, तो प्लैटफ़ॉर्म के विकल्प देखने के लिए, ऐप्लिकेशन जोड़ें पर क्लिक करें.

  3. अपने Unity प्रोजेक्ट का वह बिल्ड टारगेट चुनें जिसे आपको रजिस्टर करना है. इसके अलावा, दोनों टारगेट को एक साथ रजिस्टर करने का विकल्प भी चुना जा सकता है.

  4. अपने Unity प्रोजेक्ट के प्लैटफ़ॉर्म के हिसाब से आईडी डालें.

    • iOS के लिएiOS बंडल आईडी फ़ील्ड में, अपने Unity प्रोजेक्ट का iOS आईडी डालें.

    • Android के लिएAndroid पैकेज का नाम फ़ील्ड में, अपने Unity प्रोजेक्ट का Android आईडी डालें.
      पैकेज का नाम और ऐप्लिकेशन आईडी शब्दों का इस्तेमाल अक्सर एक-दूसरे की जगह किया जाता है.

  5. (ज़रूरी नहीं) अपने Unity प्रोजेक्ट के प्लैटफ़ॉर्म के हिसाब से निकनेम डालें.
    ये निकनेम इंटरनल होते हैं. इन्हें आसानी से पहचाना जा सकता है. ये सिर्फ़ आपको Firebase कंसोल में दिखते हैं.

  6. ऐप्लिकेशन रजिस्टर करें पर क्लिक करें.

तीसरा चरण: Firebase कॉन्फ़िगरेशन फ़ाइलें जोड़ना

  1. Firebase कंसोल सेटअप वर्कफ़्लो में, अपने प्लैटफ़ॉर्म के हिसाब से Firebase कॉन्फ़िगरेशन फ़ाइलें पाएं.

    • iOS के लिएGoogleService-Info.plist डाउनलोड करें पर क्लिक करें.

    • Android के लिएgoogle-services.json डाउनलोड करें पर क्लिक करें.

  2. अपने यूनिटी प्रोजेक्ट की प्रोजेक्ट विंडो खोलें. इसके बाद, अपनी कॉन्फ़िगरेशन फ़ाइलें Assets फ़ोल्डर में ले जाएं.

  3. Firebase कंसोल में वापस जाकर, सेटअप वर्कफ़्लो में आगे बढ़ें पर क्लिक करें.

चौथा चरण: Firebase Unity SDK टूल जोड़ना

  1. Firebase Console में, Firebase Unity SDK डाउनलोड करें पर क्लिक करें. इसके बाद, एसडीके को किसी सुविधाजनक जगह पर अनज़िप करें.

    • Firebase Unity एसडीके को किसी भी समय फिर से डाउनलोड किया जा सकता है.

    • Firebase Unity एसडीके टूल, प्लैटफ़ॉर्म के हिसाब से नहीं होता.

  2. खुले हुए यूनिटी प्रोजेक्ट में, ऐसेट > पैकेज इंपोर्ट करें > कस्टम पैकेज पर जाएं.

  3. अनज़िप किए गए SDK टूल से, Firebase के उन प्रॉडक्ट को चुनें जिन्हें आपको अपने ऐप्लिकेशन में इस्तेमाल करना है.

    Firebase Cloud Messaging का बेहतर अनुभव पाने के लिए, हमारा सुझाव है कि आप अपने प्रोजेक्ट में Google Analytics चालू करें. साथ ही, Analytics को सेट अप करने के लिए, आपको अपने ऐप्लिकेशन में Analytics के लिए Firebase पैकेज जोड़ना होगा.

    Analytics चालू किया गया

    • Google Analytics के लिए Firebase पैकेज जोड़ें: FirebaseAnalytics.unitypackage
    • Firebase Cloud Messaging के लिए पैकेज जोड़ें: FirebaseMessaging.unitypackage

    Analytics चालू नहीं है

    Firebase Cloud Messaging के लिए पैकेज जोड़ें: FirebaseMessaging.unitypackage

  4. Import Unity Package विंडो में, Import पर क्लिक करें.

  5. Firebase कंसोल में वापस जाकर, सेटअप वर्कफ़्लो में आगे बढ़ें पर क्लिक करें.

पांचवां चरण: Google Play services के वर्शन की ज़रूरी शर्तों की पुष्टि करना

Android के लिए Firebase Unity SDK टूल के कुछ प्रॉडक्ट के लिए, Google Play services की ज़रूरत होती है. जानें कि किन प्रॉडक्ट के लिए यह डिपेंडेंसी ज़रूरी है. उन प्रॉडक्ट का इस्तेमाल करने से पहले, Google Play services को अपडेट करना ज़रूरी है.

अपने ऐप्लिकेशन की शुरुआत में, यहां दिया गया using स्टेटमेंट और इनीशियलाइज़ेशन कोड जोड़ें. एसडीके में मौजूद किसी भी अन्य तरीके को कॉल करने से पहले, Google Play services के ज़रूरी वर्शन की जांच की जा सकती है. साथ ही, इसे अपडेट भी किया जा सकता है.

using Firebase.Extensions;
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
  var dependencyStatus = task.Result;
  if (dependencyStatus == Firebase.DependencyStatus.Available) {
    // Create and hold a reference to your FirebaseApp,
    // where app is a Firebase.FirebaseApp property of your application class.
       app = Firebase.FirebaseApp.DefaultInstance;

    // Set a flag here to indicate whether Firebase is ready to use by your app.
  } else {
    UnityEngine.Debug.LogError(System.String.Format(
      "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
    // Firebase Unity SDK is not safe to use here.
  }
});

आपका Unity प्रोजेक्ट, Firebase का इस्तेमाल करने के लिए रजिस्टर और कॉन्फ़िगर किया गया हो.

Apple प्लैटफ़ॉर्म के साथ सेटअप करना

Unity और Apple प्लैटफ़ॉर्म के साथ FCM को सेट अप करने के लिए, इन निर्देशों का पालन करें.

APNs की पुष्टि करने वाली कुंजी अपलोड करना

APNs की पुष्टि करने वाली कुंजी को Firebase पर अपलोड करें. अगर आपके पास पहले से APNs की पुष्टि करने वाला कोई कुंजी नहीं है, तो Apple Developer Member Center में जाकर, एक कुंजी बनाएं.

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

  2. iOS ऐप्लिकेशन कॉन्फ़िगरेशन में जाकर, APNs की पुष्टि करने वाली कुंजी में, अपलोड करें बटन पर क्लिक करें. इससे, डेवलपमेंट की पुष्टि करने वाली कुंजी या प्रोडक्शन की पुष्टि करने वाली कुंजी या दोनों को अपलोड किया जा सकता है. कम से कम एक इमेज होनी चाहिए.

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

Apple प्लैटफ़ॉर्म पर पुश नोटिफ़िकेशन चालू करना

  1. Xcode में अपने प्रोजेक्ट पर क्लिक करें. इसके बाद, एडिटर एरिया से General टैब चुनें.
  2. लिंक किए गए फ़्रेमवर्क और लाइब्रेरी तक स्क्रोल करें. इसके बाद, फ़्रेमवर्क जोड़ने के लिए + बटन पर क्लिक करें.
  3. इसके बाद, जो विंडो खुलेगी उसमें UserNotifications.framework तक स्क्रोल करें. उस एंट्री पर क्लिक करें. इसके बाद, जोड़ें पर क्लिक करें.
  4. Xcode में अपने प्रोजेक्ट पर क्लिक करें. इसके बाद, एडिटर एरिया में जाकर Capabilities टैब चुनें.
  5. पुश नोटिफ़िकेशन को चालू करें पर स्विच करें.
  6. स्क्रोल करके बैकग्राउंड मोड पर जाएं. इसके बाद, इसे चालू है पर स्विच करें.
  7. बैकग्राउंड मोड में जाकर, रिमोट सूचनाएं चेकबॉक्स को चुनें.

Firebase Cloud Messaging शुरू करें

TokenReceived या MessageReceived इवेंट के लिए हैंडलर जोड़ते समय, Firebase Cloud Message लाइब्रेरी को शुरू किया जाएगा.

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

इसके अलावा, अगर आपको आने वाले मैसेज पाने हैं, तो आपको OnMessageReceived इवेंट के लिए रजिस्टर करना होगा.

सेटअप कुछ ऐसा दिखेगा:

public void Start() {
  Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
  Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
  UnityEngine.Debug.Log("Received Registration Token: " + token.Token);
}

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
  UnityEngine.Debug.Log("Received a new message from: " + e.Message.From);
}

Android प्लैटफ़ॉर्म के साथ सेटअप करना

Unity और Android प्लैटफ़ॉर्म के साथ FCM को सेट अप करने के लिए, यहां दिए गए निर्देशों का पालन करें.

Android एंट्री पॉइंट ऐक्टिविटी को कॉन्फ़िगर करना

Firebase Cloud Messaging में कस्टम एंट्री पॉइंट ऐक्टिविटी शामिल होती है, जो डिफ़ॉल्ट UnityPlayerActivity की जगह लेती है. अगर कस्टम एंट्री पॉइंट का इस्तेमाल नहीं किया जा रहा है, तो यह बदलाव अपने-आप हो जाता है. आपको कोई अतिरिक्त कार्रवाई करने की ज़रूरत नहीं है.

Android पर Firebase Cloud Messaging Unity प्लगिन के साथ दो अतिरिक्त फ़ाइलें बंडल की जाती हैं:

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar में MessagingUnityPlayerActivity नाम की एक गतिविधि शामिल है. यह गतिविधि, स्टैंडर्ड UnityPlayerActivity की जगह लेती है.
  • Assets/Plugins/Android/AndroidManifest.xml, ऐप्लिकेशन को MessagingUnityPlayerActivity को ऐप्लिकेशन के एंट्री पॉइंट के तौर पर इस्तेमाल करने का निर्देश देता है.

ये फ़ाइलें इसलिए उपलब्ध कराई जाती हैं, क्योंकि डिफ़ॉल्ट UnityPlayerActivity, onStop और onRestart की गतिविधि के लाइफ़साइकल ट्रांज़िशन को मैनेज नहीं करता है. साथ ही, यह onNewIntent को लागू नहीं करता है. Firebase Cloud Messaging के लिए onNewIntent को लागू करना ज़रूरी है, ताकि वह आने वाले मैसेज को सही तरीके से मैनेज कर सके.

कस्टम एंट्री पॉइंट गतिविधि कॉन्फ़िगर करना

अगर आपका ऐप्लिकेशन डिफ़ॉल्ट UnityPlayerActivity का इस्तेमाल नहीं करता है, तो आपको दिए गए UnityPlayerActivity को हटाना होगा. साथ ही, यह पक्का करना होगा कि आपकी कस्टम गतिविधि, Android ऐक्टिविटी के लाइफ़साइकल के सभी ट्रांज़िशन को सही तरीके से हैंडल करती हो. इसे कैसे किया जाता है, इसका उदाहरण यहां दिया गया है.AndroidManifest.xml अगर आपकी कस्टम गतिविधि UnityPlayerActivity से आगे बढ़ती है, तो इसके बजाय com.google.firebase.MessagingUnityPlayerActivity को बढ़ाया जा सकता है. यह सभी ज़रूरी तरीकों को लागू करता है.

अगर कस्टम गतिविधि का इस्तेमाल किया जा रहा है और com.google.firebase.MessagingUnityPlayerActivity को नहीं बढ़ाया जा रहा है, तो आपको अपनी गतिविधि में यहां दिए गए स्निपेट शामिल करने चाहिए.

/**
 * Workaround for when a message is sent containing both a Data and Notification payload.
 *
 * When the app is in the background, if a message with both a data and notification payload is
 * received the data payload is stored on the Intent passed to onNewIntent. By default, that
 * intent does not get set as the Intent that started the app, so when the app comes back online
 * it doesn't see a new FCM message to respond to. As a workaround, we override onNewIntent so
 * that it sends the intent to the MessageForwardingService which forwards the message to the
 * FirebaseMessagingService which in turn sends the message to the application.
 */
@Override
protected void onNewIntent(Intent intent) {
  Intent message = new Intent(this, MessageForwardingService.class);
  message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
  message.putExtras(intent);
  message.setData(intent.getData());
  // For earlier versions of Firebase C++ SDK (< 7.1.0), use `startService`.
  // startService(message);
  MessageForwardingService.enqueueWork(this, message);
}

/**
 * Dispose of the mUnityPlayer when restarting the app.
 *
 * This makes sure that when the app starts up again it does not start with stale data.
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
  if (mUnityPlayer != null) {
    mUnityPlayer.quit();
    mUnityPlayer = null;
  }
  super.onCreate(savedInstanceState);
}

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>

Android पर मैसेज डिलीवर करने की सुविधा

जब ऐप्लिकेशन पूरी तरह से बंद हो और कोई उपयोगकर्ता सूचना पर टैप करता है, तो मैसेज डिफ़ॉल्ट रूप से FCM के बिल्ट-इन कॉलबैक के ज़रिए रूट नहीं होता है. इस मामले में, मैसेज पेलोड को Intent के ज़रिए ऐक्सेस किया जाता है. इसका इस्तेमाल ऐप्लिकेशन को शुरू करने के लिए किया जाता है.

जब ऐप्लिकेशन बैकग्राउंड में चल रहा होता है, तब मिले मैसेज के सूचना फ़ील्ड के कॉन्टेंट का इस्तेमाल, सिस्टम ट्रे की सूचना को भरने के लिए किया जाता है. हालांकि, सूचना के इस कॉन्टेंट को FCM के साथ शेयर नहीं किया जाएगा. इसका मतलब है कि FirebaseMessage.Notification शून्य होगा.

सारांश में:

ऐप्लिकेशन का स्टेटस सूचना डेटा दोनों
फ़ोरग्राउंड Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
बैकग्राउंड सिस्टम ट्रे Firebase.Messaging.FirebaseMessaging.MessageReceived सूचना: सिस्टम ट्रे
डेटा: इंटेंट के एक्स्ट्रा में.

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>

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

अपने-आप शुरू होने की सुविधा को रोकना

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.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

एक बार सेट होने के बाद, ऐप्लिकेशन को रीस्टार्ट करने पर भी यह वैल्यू बनी रहती है.

अगले चरण

सेटअप के चरण पूरे करने के बाद, Unity के लिए FCM का इस्तेमाल करने के लिए, यहां कुछ विकल्प दिए गए हैं: