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

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

वेब कंटेनर इंस्टॉल करने से पहले

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

  • Unity 2019.1 या इसके बाद का वर्शन इंस्टॉल करें. पुराने वर्शन भी काम कर सकते हैं, लेकिन वे काम नहीं करेंगे. Unity 2019.1 के लिए यह सुविधा अब बंद कर दी गई है और यह अगली बड़ी रिलीज़ के बाद काम नहीं करेगी.

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

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

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

    • iOS या tvOS के लिए — अपना ऐप्लिकेशन चलाने के लिए, एक डिवाइस सेट अप करें और ये काम करें:

      • अपने Apple Developer खाते के लिए, Apple पुश नोटिफ़िकेशन से पुष्टि करने वाली कुंजी पाएं.
      • ऐप्लिकेशन > क्षमताएं में जाकर, XCode में पुश नोटिफ़िकेशन चालू करें.
    • Android के लिएएम्युलेटर को Google Play में एम्युलेटर इमेज का इस्तेमाल करना चाहिए.

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

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

Firebase को अपने Unity प्रोजेक्ट में जोड़ने से पहले, आपको अपने Unity प्रोजेक्ट से कनेक्ट करने के लिए एक Firebase प्रोजेक्ट बनाना होगा. 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. अपने Unity प्रोजेक्ट की प्रोजेक्ट विंडो खोलें, फिर अपनी कॉन्फ़िगरेशन फ़ाइल(फ़ाइलों) को Assets फ़ोल्डर में ले जाएं.

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

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

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

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

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

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

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

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

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

    • Google Analytics के लिए Firebase पैकेज जोड़ें: FirebaseAnalytics.unitypackage
    • 'Firebase क्लाउड से मैसेज' के लिए पैकेज जोड़ें: FirebaseMessaging.unitypackage

    Analytics चालू नहीं है

    'Firebase क्लाउड से मैसेज' के लिए पैकेज जोड़ें: FirebaseMessaging.unitypackage

  4. Unity पैकेज को इंपोर्ट करें विंडो में, इंपोर्ट करें पर क्लिक करें.

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

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

Android के लिए, Firebase Unity SDK

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

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 प्लैटफ़ॉर्म पर पुश नोटिफ़िकेशन चालू करें

पहला चरण: उपयोगकर्ता के लिए सूचनाओं का फ़्रेमवर्क जोड़ना

  1. Xcode में प्रोजेक्ट पर क्लिक करें. इसके बाद, एडिटर एरिया में जाकर सामान्य टैब चुनें.

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

  3. इसके बाद दिखने वाली विंडो में, स्क्रोल करके UserNotifications.framework पर जाएं और फिर उस एंट्री पर क्लिक करें. इसके बाद, जोड़ें पर क्लिक करें.

दूसरा चरण: पुश नोटिफ़िकेशन चालू करें

  1. Xcode में प्रोजेक्ट पर क्लिक करें. इसके बाद, एडिटर की जगह से क्षमताएं टैब चुनें.

  2. पुश नोटिफ़िकेशन को चालू करें.

  3. नीचे बैकग्राउंड मोड पर स्क्रोल करें, फिर उसे चालू करें.

  4. बैकग्राउंड मोड में, रिमोट सूचनाएं चेकबॉक्स को चुनें.

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

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

शुरू करने के बाद, क्लाइंट ऐप्लिकेशन इंस्टेंस के लिए रजिस्ट्रेशन टोकन का अनुरोध किया जाता है. ऐप्लिकेशन को 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 एंट्री पॉइंट गतिविधि को कॉन्फ़िगर करना

Android पर, 'Firebase क्लाउड से मैसेज', कस्टम एंट्री पॉइंट गतिविधि के साथ आता है जो डिफ़ॉल्ट UnityPlayerActivity की जगह ले लेता है. अगर आपने कस्टम एंट्री पॉइंट का इस्तेमाल नहीं किया है, तो यह बदलाव अपने-आप हो जाएगा. इसके लिए, आपको कोई और कार्रवाई करने की ज़रूरत नहीं होगी. जो ऐप्लिकेशन डिफ़ॉल्ट एंट्री पॉइंट ऐक्टिविटी का इस्तेमाल नहीं करते या जो अपनी Assets/Plugins/AndroidManifest.xml उपलब्ध कराते हैं उन्हें अतिरिक्त कॉन्फ़िगरेशन की ज़रूरत होगी.

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

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

ये फ़ाइलें इसलिए दी जाती हैं, क्योंकि डिफ़ॉल्ट UnityPlayerActivity, onStop, onRestart गतिविधि की लाइफ़साइकल ट्रांज़िशन को हैंडल नहीं करता है. इसके अलावा, 'onNewIntent' लागू नहीं करता है. यह 'Firebase क्लाउड से मैसेज', इनकमिंग मैसेज को सही तरीके से हैंडल करने के लिए ज़रूरी है.

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

अगर आपका ऐप्लिकेशन डिफ़ॉल्ट UnityPlayerActivity का इस्तेमाल नहीं करता है, तो आपको दिए गए AndroidManifest.xml को हटाना होगा. साथ ही, यह पक्का करना होगा कि आपकी पसंद के मुताबिक की गई गतिविधि, Android पर की गई गतिविधि की लाइफ़साइकल के सभी ट्रांज़िशन को सही तरीके से मैनेज करती हो. इसे करने के तरीके का उदाहरण नीचे दिया गया है. अगर आपकी पसंद के मुताबिक गतिविधि, 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 older 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 ensures 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, डिवाइस टारगेटिंग के लिए रजिस्ट्रेशन टोकन जनरेट करता है. जब कोई टोकन जनरेट होता है, तब लाइब्रेरी, 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;

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

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 की मदद से डाउनस्ट्रीम और विषय मैसेज भेजे जा सकते हैं. ज़्यादा जानने के लिए, क्विकस्टार्ट सैंपल देखें. इसमें इस फ़ंक्शन के बारे में बताया गया है.

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

ध्यान रखें कि इन सुविधाओं का इस्तेमाल करने के लिए, आपको सर्वर लागू करना होगा.