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

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

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

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

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

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

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

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

    • iOS या tvOS के लिए — कोई डिवाइस सेट अप करें ऐप पर जाएं और इन कामों को पूरा करें:

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

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

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

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

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

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

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

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

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

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

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

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

    • Android के लिए — इसमें अपने Unity प्रोजेक्ट का Android आईडी डालें 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 टूल डाउनलोड करें पर क्लिक करें. इसके बाद, अनज़िप करें इस्तेमाल किया जा सकता है.

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

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

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

  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 टूल इस्तेमाल किया जा सके.

अपनेusing का इस्तेमाल करें. 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 की सहायता टीम के लिए, अपने एपीएन की पुष्टि करने वाली कुंजी अपलोड करें

अपनी एपीएन की पुष्टि करने वाली कुंजी को Firebase पर अपलोड करें. अगर आपके पास पहले से एपीएन की पुष्टि करने वाली कुंजी नहीं है, तो पक्का करें कि आपने Apple Developer सदस्य केंद्र.

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

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

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

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

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

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

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

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

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

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

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

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

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

Firebase Cloud Messaging शुरू करें

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

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

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

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