Unity के साथ Google Play Billing Library का इस्तेमाल करना

Google Play Billing प्लगिन, इन-ऐप्लिकेशन खरीदारी के लिए Unity की बिल्ट-इन सेवाओं और ऐसेट को बढ़ाता है. इसे Unity IAP कहा जाता है. इससे आपके गेम को Google Play Billing Library की सभी नई सुविधाएं मिलती हैं. इस गाइड में, प्लगिन का इस्तेमाल करने के लिए अपने प्रोजेक्ट को सेट अप करने का तरीका बताया गया है. इस गाइड में, Unity में अपने गेम में Google Play Billing Library की सुविधाएं लागू करने का तरीका भी बताया गया है.

Google Play Billing प्लगिन सेट अप करना

प्लगिन सेट अप करने के लिए, लिंक किए गए इन सभी सेक्शन में दिए गए चरणों को पूरा करें:

  1. Unity IAP के ऐब्स्ट्रैक्शन लेयर को चालू करें.
  2. प्लगिन डाउनलोड और इंपोर्ट करें.
  3. प्लगिन की बिल्ड सेटिंग कॉन्फ़िगर करें.
  4. प्लगिन चालू करें.

Unity IAP के ऐब्स्ट्रैक्शन लेयर को चालू करना

Google Play Billing प्लगिन, Unity IAP के साथ शामिल ऐब्स्ट्रैक्शन लेयर पर बनाया गया है. इसलिए, प्लगिन डाउनलोड और इंपोर्ट करने से पहले, आपको इस ऐब्स्ट्रैक्शन लेयर को चालू करना होगा. Unity IAP के ऐब्स्ट्रैक्शन लेयर को चालू करने के लिए, यह तरीका अपनाएं:

  1. Unity के इस ट्यूटोरियल में दिए गए सभी चरण पूरे करें: अपना प्रोजेक्ट सेट अप करना Unity की सेवाओं के लिए.
  2. Unity के इस ट्यूटोरियल में दिए गए सभी चरण पूरे करें: Unity IAP सेवा चालू करना.

प्लगिन डाउनलोड और इंपोर्ट करना

प्लगिन, .unitypackage फ़ॉर्मैट में Unity पैकेज के तौर पर शिप किया जाता है. प्लगिन डाउनलोड और इंपोर्ट करने के लिए, यह तरीका अपनाएं:

  1. GitHub पर मौजूद डेटाबेस के रिलीज़ पेज से, Unity के लिए Google Play प्लगिन का नया वर्शन डाउनलोड करें.
  2. Unity के मेन्यू बार में, ऐसेट > पैकेज इंपोर्ट करें > कस्टम पैकेज पर क्लिक करें.

  3. .unitypackage फ़ाइल को डाउनलोड की गई जगह पर ढूंढें और उसे चुनें.

  4. Unity पैकेज इंपोर्ट करें डायलॉग में, सभी ऐसेट को चुना हुआ छोड़ दें और इंपोर्ट करें पर क्लिक करें.

पैकेज इंपोर्ट होने के बाद, आपके प्रोजेक्ट की ऐसेट में GooglePlayPlugins नाम का एक नया फ़ोल्डर जुड़ जाता है. यह फ़ोल्डर, ऐसेट फ़ोल्डर के रूट में होता है. इस फ़ोल्डर में, प्लगिन के लिए Google Play Billing Library की सभी ऐसेट होती हैं.

बिल्ड सेटिंग कॉन्फ़िगर करना

प्लगिन, Unity IAP को बढ़ाता है. इसलिए, Unity में टकराव होगा और Android APK नहीं बनाया जा सकेगा. ऐसा तब तक होगा, जब तक Unity IAP में मौजूद कुछ पुरानी और ओवरलैप होने वाली डिपेंडेंसी को बिल्ड से नहीं हटाया जाता. प्लगिन, आपके प्रोजेक्ट से टकराव वाली लाइब्रेरी को अपने-आप हटाने का तरीका उपलब्ध कराता है. इन टकरावों को ठीक करने के लिए, यह तरीका अपनाएं:

  1. Unity के मेन्यू बार में, Google > Play Billing > बिल्ड सेटिंग चुनें.

  2. Play Billing की बिल्ड सेटिंग विंडो में, ठीक करें पर क्लिक करें. इससे टकराव ठीक हो जाता है और Unity IAP की टकराव वाली फ़ाइलें, बैकअप डायरेक्ट्री में चली जाती हैं. ठीक करें पर क्लिक करने के बाद, बटन रीस्टोर करें में बदल जाता है. इस पर क्लिक करके, टकराव वाली ओरिजनल फ़ाइलें रीस्टोर की जा सकती हैं.

प्लगिन चालू करना

प्लगिन चालू करने के लिए, Google Play के लिए Unity IAP के लागू करने के तरीके को, Google Play Billing प्लगिन से बदलें. उदाहरण के लिए, Unity IAP Purchaser Script का इस्तेमाल करते समय, आपको IAP बिल्डर में पास किए गए StandardPurchaseModule को बदलकर, Google.Play.Billing.GooglePlayStoreModule का इस्तेमाल करना होगा:

// Create a builder using the GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());

अगर आपका गेम, एक से ज़्यादा प्लैटफ़ॉर्म के लिए एक ही Purchaser Script का इस्तेमाल करता है, तो आपको प्लैटफ़ॉर्म की जांच करनी चाहिए. इससे यह पक्का किया जा सकेगा कि Unity, अन्य प्लैटफ़ॉर्म के लिए अपने IAP समाधान का इस्तेमाल जारी रखेगा:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

अगर आपने अपने गेम को Google Play Store के अलावा, Android के अन्य ऐप्लिकेशन स्टोर पर भी पब्लिश किया है, तो आपको Unity IAP को लागू करने के डिफ़ॉल्ट तरीके को सिर्फ़ तब बदलना चाहिए, जब आपने Google Play Store चुना हो:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android
       && SelectedAndoidAppStore == AppStore.GooglePlay)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

अपने गेम में Google Play Billing Library की सुविधाएं लागू करना

Google Play Billing प्लगिन, Unity IAP की सेवाओं को बढ़ाता है. इसलिए, खरीदारी के सामान्य वर्कफ़्लो को मैनेज करने के लिए, Unity के एक ही एपीआई का इस्तेमाल किया जा सकता है. ध्यान दें कि Google Play Billing Library और अन्य ऐप्लिकेशन स्टोर के लिए Unity IAP को लागू करने के स्टैंडर्ड तरीके में अंतर होने की वजह से, एपीआई के व्यवहार में कुछ मामूली बदलाव हुए हैं. अगर आपने Unity IAP के एपीआई का इस्तेमाल पहले कभी नहीं किया है, तो खरीदारी के बुनियादी फ़्लो को लागू करने का तरीका जानने के लिए, Unity IAP ट्यूटोरियल में "खरीदारी का स्क्रिप्ट बनाना" सेक्शन देखें.

Google Play Billing Library में, Google Play Store के लिए कुछ खास सुविधाएं भी शामिल हैं. इन सुविधाओं को, बढ़े हुए इंटरफ़ेस के ज़रिए ऐक्सेस किया जा सकता है. इस सेक्शन के बाकी हिस्से में, अपने गेम में Google Play Billing Library की इन खास सुविधाओं को लागू करने का तरीका बताया गया है.

खरीदारी को बाद में पूरा करने की सुविधा चालू करना

Google Play, खरीदारी को बाद में पूरा करने की सुविधा देता है. इसे, लंबित लेन-देन या लंबित खरीदारी भी कहा जाता है. इसमें उपयोगकर्ता, खरीदारी कर सकते हैं और उसे बाद में दुकानों में जाकर नकद पैसे देकर पूरा कर सकते हैं.

खरीदारी को बाद में पूरा करने की सुविधा चालू करने के लिए, अपने IAP बिल्डर का इस्तेमाल करके, EnableDeferredPurchase() तरीके को कॉल करके अपने मॉड्यूल का कॉन्फ़िगरेशन बदलें:

// Create a builder using a GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
// Enable deferred purchases
configurationBuilder.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
    .EnableDeferredPurchase();

इसके बाद, Play Store के एक्सटेंशन का इस्तेमाल करके, खरीदारी को बाद में पूरा करने की सुविधा के लिए कॉलबैक लागू करें:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Set the deferred purchases callback.
_playStoreExtensions.SetDeferredPurchaseListener(
    delegate(Product product)
    {
        // Do not grant the item here. Instead, record the purchase and remind
        // the user to complete the transaction in the Play Store.
    });

Google Play को, खाते के आईडी को धुंधला करके भेजना

उपयोगकर्ता के खाते के आईडी को धुंधला करके, Google Play को भेजा जा सकता है. इससे, गलत इस्तेमाल का पता लगाने में मदद मिलती है. जैसे, यह पता लगाना कि कम समय में, एक ही खाते से कई डिवाइसों पर खरीदारी की जा रही है या नहीं.

खाते के आईडी को धुंधला करके भेजने के लिए, एक्सटेंशन एपीआई से SetObfuscatedAccountId() तरीके को कॉल करें:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated account ID.
_playStoreExtensions.SetObfuscatedAccountId(obfuscatedAccountId);

Google Play को, प्रोफ़ाइल के आईडी को धुंधला करके भेजना

प्रोफ़ाइल के आईडी को धुंधला करके, Google Play को भेजा जा सकता है. इससे, धोखाधड़ी का पता लगाने में मदद मिलती है. जैसे, यह पता लगाना कि कम समय में, एक ही खाते से कई डिवाइसों पर खरीदारी की जा रही है या नहीं. यह, उपयोगकर्ता के खाते के आईडी को धुंधला करके भेजने जैसा ही है. दोनों ही मामलों में, आईडी एक ही उपयोगकर्ता को दिखाता है. हालांकि, प्रोफ़ाइल आईडी की मदद से, एक ही ऐप्लिकेशन में मौजूद एक से ज़्यादा प्रोफ़ाइल वाले किसी एक उपयोगकर्ता की यूनीक पहचान की जा सकती है. Google Play को, प्रोफ़ाइल के आईडी को धुंधला करके भेजने के बाद, खरीदारी की रसीद में उस आईडी को बाद में वापस पाया जा सकता है.

प्रोफ़ाइल के आईडी को धुंधला करके भेजने के लिए, अपने IAP बिल्डर का इस्तेमाल करके, SetObfuscatedProfileId() तरीके को कॉल करके अपने मॉड्यूल का कॉन्फ़िगरेशन बदलें:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated profile ID.
_playStoreExtensions.SetObfuscatedProfileId(obfuscatedProfileId);

सदस्यताओं के लिए कीमत में हुए बदलावों की पुष्टि करना

Google Play, चालू सदस्यता की कीमत बदलने की सुविधा देता है. कीमत में बदलाव लागू होने से पहले, आपके गेम के उपयोगकर्ताओं को इसकी पुष्टि करनी होगी. उपयोगकर्ताओं से उनकी सदस्यता की कीमत में हुए बदलाव की पुष्टि कराने के लिए, ConfirmSubscriptionPriceChange() तरीके को कॉल करें:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

_playStoreExtensions.ConfirmSubscriptionPriceChange(productId,
    delegate (bool success)
    {
        // Returns whether the user has accepted the new price or not.
    });

Unity API के व्यवहार में बदलाव

Google Play Billing प्लगिन का इस्तेमाल करते समय, ज़्यादातर एपीआई उसी तरह काम करते हैं जैसे अन्य ऐप्लिकेशन स्टोर के लिए Unity IAP को लागू करने का स्टैंडर्ड तरीका. हालांकि, कुछ मामलों में एपीआई अलग तरीके से काम करेंगे. इस सेक्शन में, व्यवहार में होने वाले इन अंतरों के बारे में बताया गया है.

डेवलपर पेलोड मौजूद नहीं है

Google Play ने डेवलपर पेलोड की सुविधा बंद कर दी है. इसकी जगह, ज़्यादा काम के और कॉन्टेक्चुअल विकल्प उपलब्ध कराए जा रहे हैं. इस वजह से, डेवलपर पेलोड की सुविधा काम नहीं करती. विकल्पों के बारे में ज़्यादा जानकारी पाने के लिए, डेवलपर पेलोड के बारे में जानकारी वाला पेज देखें.

अन्य ऐप्लिकेशन स्टोर के लिए Unity IAP को लागू करने के स्टैंडर्ड तरीके से तय किए गए इंटरफ़ेस का इस्तेमाल जारी रखा जा सकता है. इनमें IStoreController भी शामिल है. खरीदारी शुरू करते समय, IStoreController का इस्तेमाल किया जा सकता है और InitiatePurchase() तरीके को कॉल किया जा सकता है:

public void InitiatePurchase(Purchasing.Product product, string payload);

हालांकि, इसमें पास किया गया कोई भी पेलोड काम नहीं करेगा. यह फ़ाइनल रसीद में नहीं दिखेगा.

SubscriptionManager की सुविधा काम नहीं करती

Unity IAP, सदस्यताओं को मैनेज करने के लिए SubscriptionManager क्लास उपलब्ध कराता है. इस क्लास को लागू करने के लिए, Unity IAP के स्टैंडर्ड तरीके में डेवलपर पेलोड का इस्तेमाल किया जाता है. इसलिए, यह क्लास मौजूद नहीं है. इस क्लास को अब भी बनाया जा सकता है. हालांकि, क्लास के किसी भी गेटर तरीके का इस्तेमाल करने पर, आपको गलत डेटा मिल सकता है.

UpdateSubscription में एपीआई में मामूली बदलाव हुए हैं

Google Play Billing प्लगिन, आपकी सदस्यताओं को अपग्रेड और डाउनग्रेड करने के लिए, SubscriptionManager.UpdateSubscription() और SubscriptionManager.UpdateSubscriptionInGooglePlayStore() तरीकों का इस्तेमाल करने की सुविधा नहीं देता. अगर आपका गेम इन तरीकों को कॉल करता है, तो GooglePlayStoreUnsupportedException दिखता है.

Google Play Billing Library, इन तरीकों के बजाय इस्तेमाल करने के लिए एक अन्य एपीआई उपलब्ध कराती है. सदस्यता को अपग्रेड या डाउनग्रेड करने के लिए, प्रोरेशन मोड का इस्तेमाल करके UpdateSubscription() तरीके को कॉल करें:

void UpdateSubscription(Product oldProduct, Product newProduct,
           GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);

इस तरीके को कॉल करने के लिए, प्लैटफ़ॉर्म की जांच की जा सकती है या GooglePlayStoreUnsupportedException दिखने पर, कैच ब्लॉक में किया जा सकता है.

प्रोरेशन मोड का इस्तेमाल करने के बारे में ज़्यादा जानकारी और उदाहरणों के लिए, प्रोरेशन मोड सेट करना लेख देखें.