Unity के साथ 'Google Play इंस्टैंट' का इस्तेमाल करें

चेतावनी: Google Play इंस्टैंट अब उपलब्ध नहीं होगा. दिसंबर 2025 से, इंस्टैंट ऐप्लिकेशन को Google Play से पब्लिश नहीं किया जा सकेगा और Google Play services के इंस्टैंट एपीआई काम नहीं करेंगे. उपयोगकर्ताओं को अब Play के ज़रिए, किसी भी तरीके से इंस्टैंट ऐप्लिकेशन नहीं दिखाए जाएंगे.

हम यह बदलाव, डेवलपर के सुझाव के आधार पर कर रहे हैं. साथ ही, Google Play इंस्टैंट की शुरुआत के बाद से, हम इसके इकोसिस्टम को बेहतर बनाने के लिए लगातार निवेश कर रहे हैं.

उपयोगकर्ताओं की संख्या बढ़ाने के लिए, हम डेवलपर को अपने रेगुलर ऐप्लिकेशन या गेम पर उपयोगकर्ताओं को भेजने का सुझाव देते हैं. इसके लिए, डीपलिंक का इस्तेमाल करके, उपयोगकर्ताओं को ज़रूरत के हिसाब से किसी खास प्रोसेस या सुविधा पर रीडायरेक्ट करें.

Unity के लिए Google Play इंस्टैंट प्लगिन, आपके Unity प्रोजेक्ट को कॉन्फ़िगर करता है, ताकि आपके गेम का इंस्टैंट ऐप्लिकेशन वर्शन बनाया जा सके. इस गाइड में, इस प्लगिन को इंस्टॉल और इस्तेमाल करने का तरीका बताया गया है.

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

यह प्लगिन, Unity के लिए Google Play प्लगिन का हिस्सा है. प्लगिन इंपोर्ट करने के लिए, यह तरीका अपनाएं:

  1. Unity के लिए Google Play प्लगिन की रिलीज़ से, नया वर्शन डाउनलोड करें.
  2. .unitypackage फ़ाइल को इंपोर्ट करने के लिए, Unity IDE मेन्यू का विकल्प चुनें Assets > Import package > Custom Package और सभी आइटम इंपोर्ट करें.

Unity Editor की सुविधाएं

Unity में Google > Play Instant सब-मेन्यू जोड़ने के लिए, प्लगिन इंपोर्ट करें. इस सब-मेन्यू में ये विकल्प मिलते हैं.

Build Settings

इससे एक विंडो खुलती है. इसकी मदद से, Installed और Instant डेवलपमेंट मोड के बीच स्विच किया जा सकता है. Instant पर स्विच करने से, ये बदलाव होते हैं:

  • PLAY_INSTANT नाम का एक स्क्रिप्टिंग डिफ़ाइन सिंबल बनता है. इसका इस्तेमाल, स्क्रिप्टिंग के लिए #if PLAY_INSTANT और #endif के साथ किया जा सकता है.
  • AndroidManifest.xml में ज़रूरी बदलावों के लिए अपडेट मैनेज किए जाते हैं. जैसे कि android:targetSandboxVersion.

Player Settings

Player Settings डायलॉग, पहली इमेज में दिखाया गया है. इसमें आपको Google Play इंस्टैंट के लिए ऑप्टिमाइज़ करने, ज़्यादा संगत ग्राफ़िक्स एपीआई के साथ डेवलपमेंट करने, और अपने APK का साइज़ कम करने में मदद करने के लिए सुझाव दिखते हैं.

खास सुझावों में, सिर्फ़ OpenGL ES 2.0 का इस्तेमाल करना और मल्टीथ्रेड रेंडरिंग को बंद करना शामिल है.
पहली इमेज. Player Settings डायलॉग

Player Settings को ज़रूरी और सुझाए गए सेटिंग में बांटा गया है. अगर किसी सेटिंग के लिए अपडेट करें बटन मौजूद है, तो सेटिंग को अपनी पसंद के मुताबिक बदलने के लिए, उस पर क्लिक करें.

APK का साइज़ और कम करने के लिए, Unity Package Manager खोलें और इस्तेमाल न किए गए पैकेज हटाएं.

Quick Deploy

Quick Deploy की मदद से, Unity पर बने इंस्टैंट ऐप्लिकेशन का साइज़ कम किया जा सकता है. इसके लिए, कुछ ऐसेट को AssetBundle में पैकेज किया जाता है. Quick Deploy का इस्तेमाल करने पर, Unity गेम इंजन और लोडिंग स्क्रीन को इंस्टैंट ऐप्लिकेशन APK में पैकेज किया जाता है. इसके बाद, इंस्टैंट ऐप्लिकेशन शुरू होने पर, यह किसी सर्वर से AssetBundle को वापस लाता है.

इंस्टॉल करने के वर्कफ़्लो के लिए सहायता

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

इंस्टॉल करने का प्रॉम्प्ट दिखाना

Install बटन वाला इंस्टैंट ऐप्लिकेशन, इंस्टॉल बटन के क्लिक हैंडलर से, Play Store पर इंस्टॉल करने का डायलॉग दिखा सकता है. इसके लिए, उसे यह कॉल करना होगा:

Google.Play.Instant.InstallLauncher.ShowInstallPrompt();

ShowInstallPrompt() तरीके में एक ओवरलोड होता है. इसकी मदद से, इनमें से एक या एक से ज़्यादा काम किए जा सकते हैं:

  • यह पता लगाना कि उपयोगकर्ता ने इंस्टॉल करने की प्रोसेस रद्द की है या नहीं. इंस्टैंट ऐप्लिकेशन की मुख्य गतिविधि में onActivityResult() को बदलें और तय किए गए requestCode पर RESULT_CANCELED की जांच करें.
  • referrer पैरामीटर के ज़रिए, इंस्टॉल रेफ़रर स्ट्रिंग पास करना.
  • PutPostInstallIntentStringExtra() के ज़रिए, मौजूदा गेम सेशन के बारे में स्टेट पास करना.

इन्हें इस उदाहरण में दिखाया गया है:

using Google.Play.Instant;
...
const int requestCode = 123;
var sessionInfo = /* Object serialized as a string representing player's current location, etc. */;
using (var activity = UnityPlayerHelper.GetCurrentActivity())
using (var postInstallIntent = InstallLauncher.CreatePostInstallIntent(activity))
{
    InstallLauncher.PutPostInstallIntentStringExtra(postInstallIntent, "sessionInfo", sessionInfo);
    InstallLauncher.ShowInstallPrompt(activity, requestCode, postInstallIntent, "test-referrer");
}

अगर उपयोगकर्ता ऐप्लिकेशन इंस्टॉल कर लेता है, तो Play Store, दिए गए postInstallIntent का इस्तेमाल करके, ऐप्लिकेशन को फिर से लॉन्च करेगा. इंस्टॉल किया गया ऐप्लिकेशन, postInstallIntent में सेट की गई वैल्यू को इस तरीके से वापस ला सकता है:

var sessionInfo = InstallLauncher.GetPostInstallIntentStringExtra("sessionInfo");

ध्यान दें:

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

कुकी एपीआई, इंस्टैंट ऐप्लिकेशन से इंस्टॉल किए गए ऐप्लिकेशन में कुकी (जैसे, प्लेयर आईडी या लेवल पूरा होने का डेटा) पास करने के तरीके उपलब्ध कराता है. postInstallIntent एक्स्ट्रा के उलट, कुकी स्टेट तब भी उपलब्ध होती है, जब उपयोगकर्ता इंस्टॉल किए गए ऐप्लिकेशन को तुरंत लॉन्च नहीं करता. उदाहरण के लिए, कोई इंस्टैंट ऐप्लिकेशन, इंस्टॉल बटन के क्लिक हैंडलर से यह कोड कॉल कर सकता है:

using Google.Play.Instant;
...
var playerInfo = /* Object serialized as a string representing game levels completed, etc. */;
var cookieBytes = System.Text.Encoding.UTF8.GetBytes(playerInfo);
try
{
    var maxCookieSize = CookieApi.GetInstantAppCookieMaxSize();
    if (cookieBytes.Length > maxCookieSize)
    {
        UnityEngine.Debug.LogErrorFormat("Cookie length {0} exceeds limit {1}.", cookieBytes.Length, maxCookieSize);
    }
    else if (CookieApi.SetInstantAppCookie(cookieBytes))
    {
        UnityEngine.Debug.Log("Successfully set cookie. Now display the app install dialog...");
        InstallLauncher.ShowInstallPrompt();
    }
    else
    {
        UnityEngine.Debug.LogError("Failed to set cookie.");
    }
}
catch (CookieApi.InstantAppCookieException ex)
{
    UnityEngine.Debug.LogErrorFormat("Failed to set cookie: {0}", ex);
}

अगर उपयोगकर्ता ऐप्लिकेशन इंस्टॉल कर लेता है, तो इंस्टॉल किया गया ऐप्लिकेशन, इस कोड का इस्तेमाल करके कुकी डेटा वापस ला सकता है:

var cookieBytes = CookieApi.GetInstantAppCookie();
var playerInfoString = System.Text.Encoding.UTF8.GetString(cookieBytes);
if (!string.IsNullOrEmpty(playerInfoString))
{
    // Initialize game state based on the cookie, e.g. skip tutorial level completed in instant app.
}