यूनिटी के साथ फायरबेस क्लाउड मैसेजिंग क्लाइंट ऐप सेट करें

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

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

आवश्यक शर्तें

  • यूनिटी 2019.1 या बाद का संस्करण स्थापित करें। पुराने संस्करण भी संगत हो सकते हैं लेकिन सक्रिय रूप से समर्थित नहीं होंगे। यूनिटी 2019.1 के लिए समर्थन को अप्रचलित माना जाता है, और अगली बड़ी रिलीज़ के बाद इसे सक्रिय रूप से समर्थित नहीं किया जाएगा।

  • (केवल Apple प्लेटफ़ॉर्म) निम्नलिखित इंस्टॉल करें:

    • Xcode 13.3.1 या उच्चतर
    • कोकोपोड्स 1.12.0 या उच्चतर
  • सुनिश्चित करें कि आपका यूनिटी प्रोजेक्ट इन आवश्यकताओं को पूरा करता है:

    • iOS के लिए - iOS 11 या उच्चतर को लक्षित करता है
    • टीवीओएस के लिए - टीवीओएस 12 या उच्चतर को लक्षित करता है
    • एंड्रॉइड के लिए - एपीआई स्तर 19 (किटकैट) या उच्चतर लक्ष्य
  • अपने यूनिटी प्रोजेक्ट को चलाने के लिए एक डिवाइस सेट करें या एक एमुलेटर का उपयोग करें।

    • iOS या tvOS के लिए - अपना ऐप चलाने के लिए एक भौतिक उपकरण सेट करें, और इन कार्यों को पूरा करें:

      • अपने Apple डेवलपर खाते के लिए Apple पुश अधिसूचना प्रमाणीकरण कुंजी प्राप्त करें।
      • ऐप > क्षमताओं के अंतर्गत XCode में पुश नोटिफिकेशन सक्षम करें।
    • एंड्रॉइड के लिए - एमुलेटर्स को Google Play के साथ एक एमुलेटर छवि का उपयोग करना होगा।

यदि आपके पास पहले से कोई यूनिटी प्रोजेक्ट नहीं है और आप केवल फायरबेस उत्पाद आज़माना चाहते हैं, तो आप हमारे क्विकस्टार्ट नमूनों में से एक डाउनलोड कर सकते हैं।

चरण 1: एक फायरबेस प्रोजेक्ट बनाएं

इससे पहले कि आप अपने यूनिटी प्रोजेक्ट में फायरबेस जोड़ सकें, आपको अपने यूनिटी प्रोजेक्ट से जुड़ने के लिए एक फायरबेस प्रोजेक्ट बनाना होगा। फायरबेस प्रोजेक्ट्स के बारे में अधिक जानने के लिए फायरबेस प्रोजेक्ट्स को समझें पर जाएँ।

चरण 2: अपने ऐप को फायरबेस के साथ पंजीकृत करें

आप अपने फायरबेस प्रोजेक्ट से जुड़ने के लिए एक या अधिक ऐप्स या गेम पंजीकृत कर सकते हैं।

  1. फायरबेस कंसोल पर जाएं।

  2. प्रोजेक्ट अवलोकन पृष्ठ के केंद्र में, सेटअप वर्कफ़्लो लॉन्च करने के लिए यूनिटी आइकन ( ) पर क्लिक करें।

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

  3. चुनें कि आपके यूनिटी प्रोजेक्ट का कौन सा निर्माण लक्ष्य आप पंजीकृत करना चाहते हैं, या आप एक ही समय में दोनों लक्ष्यों को पंजीकृत करने का चयन भी कर सकते हैं।

  4. अपने यूनिटी प्रोजेक्ट की प्लेटफ़ॉर्म-विशिष्ट आईडी दर्ज करें।

    • आईओएस के लिए - आईओएस बंडल आईडी फ़ील्ड में अपने यूनिटी प्रोजेक्ट की आईओएस आईडी दर्ज करें।

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

  5. (वैकल्पिक) अपने यूनिटी प्रोजेक्ट के प्लेटफ़ॉर्म-विशिष्ट उपनाम दर्ज करें।
    ये उपनाम आंतरिक, सुविधा पहचानकर्ता हैं और केवल फायरबेस कंसोल में आपको दिखाई देते हैं।

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

चरण 3: फायरबेस कॉन्फ़िगरेशन फ़ाइलें जोड़ें

  1. फ़ायरबेस कंसोल सेटअप वर्कफ़्लो में अपनी प्लेटफ़ॉर्म-विशिष्ट फ़ायरबेस कॉन्फ़िगरेशन फ़ाइल प्राप्त करें।

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

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

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

  3. फ़ायरबेस कंसोल में वापस, सेटअप वर्कफ़्लो में, अगला क्लिक करें।

चरण 4: फायरबेस यूनिटी एसडीके जोड़ें

  1. फ़ायरबेस कंसोल में, डाउनलोड फ़ायरबेस यूनिटी एसडीके पर क्लिक करें, फिर एसडीके को किसी सुविधाजनक स्थान पर अनज़िप करें।

  2. अपने खुले यूनिटी प्रोजेक्ट में, एसेट्स > इंपोर्ट पैकेज > कस्टम पैकेज पर नेविगेट करें।

  3. अनज़िप्ड एसडीके से, समर्थित फायरबेस उत्पादों का चयन करें जिन्हें आप अपने ऐप में उपयोग करना चाहते हैं।

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

    एनालिटिक्स सक्षम

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

    एनालिटिक्स सक्षम नहीं है

    फायरबेस क्लाउड मैसेजिंग के लिए पैकेज जोड़ें: FirebaseMessaging.unitypackage

  4. आयात एकता पैकेज विंडो में, आयात पर क्लिक करें।

  5. फ़ायरबेस कंसोल में वापस, सेटअप वर्कफ़्लो में, अगला क्लिक करें।

चरण 5: Google Play सेवाओं की संस्करण आवश्यकताओं की पुष्टि करें

एंड्रॉइड के लिए फायरबेस यूनिटी एसडीके के लिए Google Play सेवाओं की आवश्यकता होती है, जो एसडीके का उपयोग करने से पहले अद्यतित होनी चाहिए।

अपने एप्लिकेशन की शुरुआत में निम्नलिखित स्टेटमेंट और इनिशियलाइज़ेशन कोड का using जोड़ें। आप एसडीके में किसी भी अन्य तरीके को कॉल करने से पहले Google Play सेवाओं की जांच कर सकते हैं और वैकल्पिक रूप से उस संस्करण में अपडेट कर सकते हैं जो फायरबेस यूनिटी एसडीके के लिए आवश्यक है।

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.
  }
});

आपका यूनिटी प्रोजेक्ट फायरबेस का उपयोग करने के लिए पंजीकृत और कॉन्फ़िगर किया गया है।

Apple प्लेटफ़ॉर्म पर पुश सूचनाएँ सक्षम करें

चरण 1: उपयोगकर्ता अधिसूचना ढाँचा जोड़ें

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

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

  3. दिखाई देने वाली विंडो में, UserNotifications.framework तक स्क्रॉल करें, उस प्रविष्टि पर क्लिक करें, फिर जोड़ें पर क्लिक करें।

चरण 2: पुश सूचनाएँ सक्षम करें

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

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

  3. पृष्ठभूमि मोड तक नीचे स्क्रॉल करें, फिर इसे चालू पर स्विच करें।

  4. बैकग्राउंड मोड के अंतर्गत रिमोट नोटिफिकेशन चेकबॉक्स का चयन करें।

फायरबेस क्लाउड मैसेजिंग प्रारंभ करें

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);
}

एंड्रॉइड प्रवेश बिंदु गतिविधि को कॉन्फ़िगर करना

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

एंड्रॉइड पर फायरबेस क्लाउड मैसेजिंग यूनिटी प्लगइन दो अतिरिक्त फाइलों के साथ आता है:

  • 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);
}

फायरबेस 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 पर संदेश वितरण के बारे में ध्यान दें

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

ऐप के पृष्ठभूमि में होने पर प्राप्त संदेशों में उनके अधिसूचना फ़ील्ड की सामग्री होती है जिसका उपयोग सिस्टम ट्रे अधिसूचना को पॉप्युलेट करने के लिए किया जाता है, लेकिन उस अधिसूचना सामग्री को एफसीएम को संचारित नहीं किया जाएगा। अर्थात्, FirebaseMessage.Notification शून्य हो जाएगा।

सारांश:

ऐप स्थिति अधिसूचना डेटा दोनों
अग्रभूमि Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
पृष्ठभूमि सिस्टम ट्रे Firebase.Messaging.FirebaseMessaging.MessageReceived अधिसूचना: सिस्टम ट्रे
डेटा: आशय के अतिरिक्त में.

स्वतः आरंभीकरण रोकें

FCM डिवाइस लक्ष्यीकरण के लिए एक पंजीकरण टोकन उत्पन्न करता है। जब एक टोकन उत्पन्न होता है, तो लाइब्रेरी पहचानकर्ता और कॉन्फ़िगरेशन डेटा को फायरबेस पर अपलोड करती है। यदि आप टोकन का उपयोग करने से पहले एक स्पष्ट ऑप्ट-इन प्राप्त करना चाहते हैं, तो आप एफसीएम (और एंड्रॉइड, एनालिटिक्स पर) को अक्षम करके कॉन्फ़िगर समय पर पीढ़ी को रोक सकते हैं। ऐसा करने के लिए, Apple पर अपनी Info.plist (आपकी GoogleService-Info.plist नहीं) या Android पर अपने AndroidManifest.xml में एक मेटाडेटा मान जोड़ें:

एंड्रॉयड

<?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

एफसीएम को पुनः सक्षम करने के लिए, आप रनटाइम कॉल कर सकते हैं:

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

एक बार सेट होने पर यह मान ऐप पुनरारंभ होने पर बना रहता है।

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

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

अगले कदम

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

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

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