Check out what’s new from Firebase at Google I/O 2022. Learn more

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

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

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

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

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

  • (केवल आईओएस) निम्नलिखित स्थापित करें:

    • एक्सकोड 12.5 या उच्चतर
    • CocoaPods 1.10.0 या उच्चतर
  • सुनिश्चित करें कि आपकी एकता परियोजना इन आवश्यकताओं को पूरा करती है:

    • IOS के लिए - iOS 10 या उच्चतर को लक्षित करता है
    • Android के लिए — API स्तर 19 (किटकैट) या उच्चतर को लक्षित करता है

  • अपने यूनिटी प्रोजेक्ट को चलाने के लिए डिवाइस सेट करें या एमुलेटर का उपयोग करें।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • आप किसी भी समय Firebase Unity SDK को फिर से डाउनलोड कर सकते हैं।

    • फायरबेस यूनिटी एसडीके प्लेटफॉर्म-विशिष्ट नहीं है।

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

  3. अनज़िप किए गए SDK से, समर्थित Firebase उत्पादों को चुनें जिन्हें आप अपने ऐप्लिकेशन में उपयोग करना चाहते हैं।

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

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

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

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

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

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

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

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

Android के लिए Firebase Unity SDK के लिए Google Play सेवाओं की आवश्यकता होती है, जो SDK के उपयोग से पहले अप-टू-डेट होनी चाहिए।

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

Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(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.
  }
});

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

चरण 7: उपयोगकर्ता सूचना ढांचा जोड़ें

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

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

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

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

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

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

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

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

फायरबेस क्लाउड मैसेजिंग को इनिशियलाइज़ करें

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 प्रवेश बिंदु गतिविधि को कॉन्फ़िगर करना

एंड्रॉइड पर, फायरबेस क्लाउड मैसेजिंग एक कस्टम एंट्री पॉइंट गतिविधि के साथ आता है जो डिफ़ॉल्ट 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);
}

फायरबेस सी ++ एसडीके (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 पर) को अक्षम करके कॉन्फ़िगर समय पर पीढ़ी को रोक सकते हैं। ऐसा करने के लिए, ऐप्पल पर अपनी 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

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>

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

अगले कदम

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

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

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