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 Developer खाते के लिए, Apple Push Notification Authentication Key पाएं.
- App > Capabilities में जाकर, XCode में पुश नोटिफ़िकेशन चालू करें.
Android के लिए — एम्युलेटर को Google Play के साथ एम्युलेटर इमेज का इस्तेमाल करना होगा.
- अपने Google खाते का इस्तेमाल करके, Firebase में साइन इन करें.
अगर आपके पास पहले से कोई Unity प्रोजेक्ट नहीं है और आपको सिर्फ़ Firebase प्रॉडक्ट आज़माना है, तो हमारे क्विकस्टार्ट सैंपल में से कोई एक डाउनलोड करें.
पहला चरण: Firebase प्रोजेक्ट बनाना
अपने Unity प्रोजेक्ट में Firebase जोड़ने से पहले, आपको एक Firebase प्रोजेक्ट बनाना होगा, ताकि उसे अपने Unity प्रोजेक्ट से कनेक्ट किया जा सके. Firebase प्रोजेक्ट के बारे में ज़्यादा जानने के लिए, Firebase प्रोजेक्ट के बारे में जानकारी पर जाएं.
दूसरा चरण: अपने ऐप्लिकेशन को Firebase में रजिस्टर करना
अपने Firebase प्रोजेक्ट से कनेक्ट करने के लिए, एक या उससे ज़्यादा ऐप्लिकेशन या गेम रजिस्टर किए जा सकते हैं.
Firebase कंसोल पर जाएं.
सेटअप वर्कफ़्लो लॉन्च करने के लिए, प्रोजेक्ट की खास जानकारी वाले पेज के बीच में मौजूद Unity आइकॉन (
) पर क्लिक करें.अगर आपने पहले ही अपने Firebase प्रोजेक्ट में कोई ऐप्लिकेशन जोड़ लिया है, तो प्लैटफ़ॉर्म के विकल्प देखने के लिए, ऐप्लिकेशन जोड़ें पर क्लिक करें.
अपने Unity प्रोजेक्ट का वह बिल्ड टारगेट चुनें जिसे आपको रजिस्टर करना है. इसके अलावा, दोनों टारगेट को एक साथ रजिस्टर करने का विकल्प भी चुना जा सकता है.
अपने Unity प्रोजेक्ट के प्लैटफ़ॉर्म के हिसाब से आईडी डालें.
iOS के लिए — iOS बंडल आईडी फ़ील्ड में, अपने Unity प्रोजेक्ट का iOS आईडी डालें.
Android के लिए — Android पैकेज का नाम फ़ील्ड में, अपने Unity प्रोजेक्ट का Android आईडी डालें.
पैकेज का नाम और ऐप्लिकेशन आईडी शब्दों का इस्तेमाल अक्सर एक-दूसरे की जगह पर किया जाता है.
(ज़रूरी नहीं) अपने Unity प्रोजेक्ट के प्लैटफ़ॉर्म के हिसाब से निकनेम डालें.
ये निकनेम, इंटरनल तौर पर इस्तेमाल किए जाते हैं. साथ ही, ये सिर्फ़ Firebase कंसोल में आपको दिखते हैं.ऐप्लिकेशन रजिस्टर करें पर क्लिक करें.
तीसरा चरण: Firebase कॉन्फ़िगरेशन फ़ाइलें जोड़ना
Firebase कंसोल सेटअप वर्कफ़्लो में, अपने प्लैटफ़ॉर्म के हिसाब से Firebase कॉन्फ़िगरेशन फ़ाइलें पाएं.
iOS के लिए — GoogleService-Info.plist डाउनलोड करें पर क्लिक करें.
Android के लिए — google-services.json डाउनलोड करें पर क्लिक करें.
अपने यूनिटी प्रोजेक्ट की प्रोजेक्ट विंडो खोलें. इसके बाद, कॉन्फ़िगरेशन फ़ाइलें
Assets
फ़ोल्डर में ले जाएं.Firebase कंसोल में वापस जाकर, सेटअप वर्कफ़्लो में आगे बढ़ें पर क्लिक करें.
चौथा चरण: Firebase Unity SDK टूल जोड़ना
Firebase Console में, Firebase Unity SDK डाउनलोड करें पर क्लिक करें. इसके बाद, एसडीके को किसी सुविधाजनक जगह पर अनज़िप करें.
Firebase Unity एसडीके को किसी भी समय फिर से डाउनलोड किया जा सकता है.
Firebase Unity एसडीके टूल, प्लैटफ़ॉर्म के हिसाब से नहीं होता.
खुले हुए यूनिटी प्रोजेक्ट में, ऐसेट > पैकेज इंपोर्ट करें > कस्टम पैकेज पर जाएं.
अनज़िप किए गए 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
- Google Analytics के लिए Firebase पैकेज जोड़ें:
Import Unity Package विंडो में, Import पर क्लिक करें.
Firebase कंसोल में वापस जाकर, सेटअप वर्कफ़्लो में आगे बढ़ें पर क्लिक करें.
पांचवां चरण: Google Play services के वर्शन की ज़रूरी शर्तों की पुष्टि करना
Android के लिए Firebase Unity SDK टूल के कुछ प्रॉडक्ट के लिए, Google Play services की ज़रूरत होती है. जानें कि किन प्रॉडक्ट के लिए यह डिपेंडेंसी ज़रूरी है. उन प्रॉडक्ट का इस्तेमाल करने से पहले, Google Play services को अपडेट करना ज़रूरी है.
अपने ऐप्लिकेशन की शुरुआत में, यहां दिया गया using
स्टेटमेंट और इनीशियलाइज़ेशन कोड जोड़ें. एसडीके में मौजूद किसी भी अन्य तरीके को कॉल करने से पहले, Google Play services के ज़रूरी वर्शन की जांच की जा सकती है. साथ ही, इसे अपडेट भी किया जा सकता है.
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 की पुष्टि करने वाली कुंजी अपलोड करना
APNs की पुष्टि करने वाली कुंजी को Firebase पर अपलोड करें. अगर आपके पास पहले से APNs की पुष्टि करने वाला कोई कुंजी नहीं है, तो Apple Developer Member Center में जाकर, एक कुंजी बनाएं.
-
Firebase कंसोल में अपने प्रोजेक्ट में जाकर, गियर आइकॉन चुनें. इसके बाद, प्रोजेक्ट की सेटिंग चुनें. इसके बाद, Cloud Messaging टैब चुनें.
-
iOS ऐप्लिकेशन कॉन्फ़िगरेशन में जाकर, APNs ऑथेंटिकेशन कुंजी में मौजूद, अपलोड करें बटन पर क्लिक करें.
-
उस जगह पर जाएं जहां आपने अपनी कुंजी सेव की है. उसे चुनें और खोलें पर क्लिक करें. कुंजी के लिए कुंजी आईडी जोड़ें. यह Apple Developer Member Center में उपलब्ध है. इसके बाद, अपलोड करें पर क्लिक करें.
Apple प्लैटफ़ॉर्म पर पुश नोटिफ़िकेशन चालू करना
पहला चरण: उपयोगकर्ता को सूचनाएं दिखाने वाला फ़्रेमवर्क जोड़ना
Xcode में प्रोजेक्ट पर क्लिक करें. इसके बाद, एडिटर एरिया से सामान्य टैब चुनें.
नीचे की ओर स्क्रोल करके, लिंक किए गए फ़्रेमवर्क और लाइब्रेरी पर जाएं. इसके बाद, फ़्रेमवर्क जोड़ने के लिए, + बटन पर क्लिक करें.
इसके बाद, जो विंडो खुलेगी उसमें UserNotifications.framework तक स्क्रोल करें. उस एंट्री पर क्लिक करें. इसके बाद, जोड़ें पर क्लिक करें.
दूसरा चरण: पुश नोटिफ़िकेशन की सुविधा चालू करना
Xcode में प्रोजेक्ट पर क्लिक करें. इसके बाद, एडिटर एरिया से Capabilities टैब चुनें.
पुश नोटिफ़िकेशन को चालू करें पर स्विच करें.
नीचे की ओर स्क्रोल करके, बैकग्राउंड मोड पर जाएं. इसके बाद, इसे चालू पर स्विच करें.
बैकग्राउंड मोड में जाकर, रिमोट सूचनाएं चेकबॉक्स को चुनें.
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
को लागू नहीं करता है. onNewIntent
, Firebase Cloud Messaging के लिए ज़रूरी है, ताकि वह आने वाले मैसेज को सही तरीके से हैंडल कर सके.
कस्टम एंट्री पॉइंट गतिविधि को कॉन्फ़िगर करना
अगर आपका ऐप्लिकेशन डिफ़ॉल्ट UnityPlayerActivity
का इस्तेमाल नहीं करता है, तो आपको दिए गए UnityPlayerActivity
को हटाना होगा. साथ ही, यह पक्का करना होगा कि आपकी कस्टम ऐक्टिविटी, Android ऐक्टिविटी लाइफ़साइकल के सभी ट्रांज़िशन को सही तरीके से हैंडल करती हो. इसे कैसे किया जाता है, इसका उदाहरण यहां दिया गया है.AndroidManifest.xml
अगर आपकी कस्टम गतिविधि 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="true" > </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;
एक बार सेट होने के बाद, ऐप्लिकेशन को रीस्टार्ट करने पर भी यह वैल्यू बनी रहती है.
Android पर डीप लिंक वाले मैसेज मैनेज करना
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 की मदद से डाउनस्ट्रीम और विषय के हिसाब से मैसेज भेजे जा सकते हैं. ज़्यादा जानने के लिए, क्विकस्टार्ट सैंपल देखें. इसमें इस सुविधा के बारे में बताया गया है.
अपने ऐप्लिकेशन में अन्य, ज़्यादा बेहतर सुविधाएं जोड़ने के लिए, ऐप्लिकेशन सर्वर से मैसेज भेजने से जुड़ी गाइड देखें:
ध्यान रखें कि इन सुविधाओं का इस्तेमाल करने के लिए, आपको सर्वर साइड ट्रैकिंग की ज़रूरत होगी.