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

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 डेवलपर खाते के लिए, Apple Push Notification Authentication Key पाएं.
      • XCode में, ऐप्लिकेशन > क्षमताएं में जाकर, पुश नोटिफ़िकेशन की सुविधा चालू करें.
    • Android के लिएएम्युलेटर को Google Play के साथ एम्युलेटर इमेज का इस्तेमाल करना होगा.

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

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

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

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

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

  1. Firebase console पर जाएं.

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

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

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

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

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

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

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

  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 Unity SDK टूल, किसी खास प्लैटफ़ॉर्म के लिए नहीं है.

  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. Unity पैकेज इंपोर्ट करें विंडो में, इंपोर्ट करें पर क्लिक करें.

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

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

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

अपने ऐप्लिकेशन की शुरुआत में, यहां दिया गया 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 की सहायता पाने के लिए, APNs की पुष्टि करने वाली कुंजी अपलोड करना

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

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

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

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

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

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

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

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

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

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

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

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

  3. नीचे की ओर स्क्रोल करके, बैकग्राउंड मोड पर जाएं. इसके बाद, इसे चालू करें पर स्विच करें.

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

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 एंट्री पॉइंट गतिविधि को कॉन्फ़िगर करना

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

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 के लिए, इनका इस्तेमाल करना ज़रूरी है, ताकि वह आने वाले मैसेज को सही तरीके से मैनेज कर सके.

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

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

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

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