इस गाइड में, Unity का इस्तेमाल करके अपने ऐप्लिकेशन में इन-ऐप्लिकेशन अपडेट की सुविधा को चालू करने का तरीका बताया गया है. Kotlin प्रोग्रामिंग भाषा या Java प्रोग्रामिंग भाषा का इस्तेमाल करने पर, अलग से गाइड उपलब्ध हैं. साथ ही, नेटिव कोड (C/C++) का इस्तेमाल करने पर भी अलग से गाइड उपलब्ध हैं.
Unity SDK टूल के बारे में खास जानकारी
Play का इन-ऐप्लिकेशन अपडेट एपीआई, Play Core SDK फ़ैमिली का हिस्सा है. Unity प्लग इन में AppUpdateManager
क्लास उपलब्ध होती है. इसकी मदद से, आपके ऐप्लिकेशन और Google Play API के बीच होने वाले कम्यूनिकेशन को मैनेज किया जा सकता है. इन-ऐप्लिकेशन अपडेट मैनेज करने के लिए, इस क्लास का इस्तेमाल करने से पहले आपको इसे इंस्टैंशिएट करना होगा:
AppUpdateManager appUpdateManager = new AppUpdateManager();
डेवलपमेंट एनवायरमेंट सेट अप करना
OpenUPM-CLI
अगर आपने OpenUPM CLI इंस्टॉल किया है, तो इस कमांड का इस्तेमाल करके OpenUPM रजिस्ट्री इंस्टॉल की जा सकती है:
openupm add com.google.play.appupdate
OpenUPM
Unity मेन्यू विकल्प बदलाव करें > प्रोजेक्ट सेटिंग > पैकेज मैनेजर चुनकर, पैकेज मैनेजर की सेटिंग खोलें.
Package Manager विंडो में, OpenUPM को स्कोप वाली रजिस्ट्री के तौर पर जोड़ें:
Name: package.openupm.com URL: https://package.openupm.com Scopes: com.google.external-dependency-manager com.google.play.common com.google.play.core com.google.play.appupdate
Unity के मेन्यू विकल्प विंडो > पैकेज मैनेजर को चुनकर, पैकेज मैनेजर मेन्यू खोलें.
मेरी रजिस्ट्री चुनने के लिए, मैनेजर स्कोप ड्रॉप-डाउन सेट करें.
पैकेज की सूची से, Unity के लिए Google Play इंटिग्रिटी प्लग इन पैकेज चुनें और इंस्टॉल करें दबाएं.
GitHub से इंपोर्ट करना
GitHub से
.unitypackage
का सबसे नया वर्शन डाउनलोड करें.Unity मेन्यू विकल्प ऐसेट > पैकेज इंपोर्ट करें > कस्टम पैकेज चुनकर,
.unitypackage
फ़ाइल इंपोर्ट करें और सभी आइटम इंपोर्ट करें.
देखना कि अपडेट उपलब्ध है या नहीं
अपडेट का अनुरोध करने से पहले, देखें कि आपके ऐप्लिकेशन के लिए कोई अपडेट उपलब्ध है या नहीं. क्रोटीन में अपडेट देखने के लिए, AppUpdateManager
का इस्तेमाल करें:
IEnumerator CheckForUpdate()
{
PlayAsyncOperation<AppUpdateInfo, AppUpdateErrorCode> appUpdateInfoOperation =
appUpdateManager.GetAppUpdateInfo();
// Wait until the asynchronous operation completes.
yield return appUpdateInfoOperation;
if (appUpdateInfoOperation.IsSuccessful)
{
var appUpdateInfoResult = appUpdateInfoOperation.GetResult();
// Check AppUpdateInfo's UpdateAvailability, UpdatePriority,
// IsUpdateTypeAllowed(), ... and decide whether to ask the user
// to start an in-app update.
}
else
{
// Log appUpdateInfoOperation.Error.
}
}
दिखाए गए AppUpdateInfo
इंस्टेंस में, अपडेट की उपलब्धता का स्टेटस होता है. अगर कोई इन-ऐप्लिकेशन अपडेट पहले से ही चल रहा है, तो इंस्टेंस, चल रहे अपडेट के स्टेटस की भी जानकारी देता है.
देखें कि अपडेट पुराना है या नहीं
यह देखने के अलावा कि अपडेट उपलब्ध है या नहीं, यह भी देखा जा सकता है कि उपयोगकर्ता को पिछली बार Play Store से अपडेट की सूचना कब मिली थी. इससे आपको यह तय करने में मदद मिलती है कि आपको ज़रूरत के हिसाब से अपडेट करना है या तुरंत अपडेट करना है. उदाहरण के लिए, उपयोगकर्ता को किसी अपडेट के बारे में बताने से पहले, कुछ दिन इंतज़ार किया जा सकता है. इसके बाद, कुछ दिन बाद ही उसे तुरंत अपडेट करने के लिए कहा जा सकता है.
Play Store पर अपडेट उपलब्ध होने के बाद से, कितने दिन हो गए हैं, यह देखने के लिए ClientVersionStalenessDays
का इस्तेमाल करें:
var stalenessDays = appUpdateInfoOperation.ClientVersionStalenessDays;
अपडेट की प्राथमिकता देखना
Google Play Developer API की मदद से, हर अपडेट की प्राथमिकता सेट की जा सकती है. इससे, आपके ऐप्लिकेशन को यह तय करने में मदद मिलती है कि उपयोगकर्ता को अपडेट का सुझाव कितना ज़ोरदार तरीके से देना है. उदाहरण के लिए, अपडेट की प्राथमिकता सेट करने के लिए, यह रणनीति अपनाएं:
- यूज़र इंटरफ़ेस (यूआई) में छोटे सुधार: कम प्राथमिकता वाला अपडेट; न तो ज़रूरत के मुताबिक अपडेट का अनुरोध करें और न ही तुरंत अपडेट का.
- परफ़ॉर्मेंस में सुधार: मध्यम प्राथमिकता वाला अपडेट; ज़रूरत के मुताबिक अपडेट का अनुरोध करें.
- सुरक्षा से जुड़ा अहम अपडेट: ज़्यादा प्राथमिकता वाला अपडेट; तुरंत अपडेट करने का अनुरोध करें.
प्राथमिकता तय करने के लिए, Google Play 0 से 5 के बीच की किसी पूर्णांक वैल्यू का इस्तेमाल करता है. इसमें 0 डिफ़ॉल्ट वैल्यू होती है और 5 सबसे ज़्यादा प्राथमिकता होती है. किसी अपडेट की प्राथमिकता सेट करने के लिए, Google Play Developer API में Edits.tracks.releases
में मौजूद inAppUpdatePriority
फ़ील्ड का इस्तेमाल करें. रिलीज़ में जोड़े गए सभी नए वर्शन को, रिलीज़ के बराबर प्राथमिकता दी जाती है. प्राथमिकता सिर्फ़ नई रिलीज़ को रोल आउट करते समय सेट की जा सकती है. इसे बाद में बदला नहीं जा सकता.
Play Developer API के दस्तावेज़ में बताए गए तरीके के मुताबिक, Google Play Developer API का इस्तेमाल करके प्राथमिकता सेट करें. इन-ऐप्लिकेशन अपडेट की प्राथमिकता, Edit.tracks: update
तरीके में पास किए गए Edit.tracks
संसाधन में बताई जानी चाहिए. यहां दिए गए उदाहरण में, वर्शन कोड 88 और inAppUpdatePriority
5 वाले ऐप्लिकेशन को रिलीज़ करने का तरीका बताया गया है:
{ "releases": [{ "versionCodes": ["88"], "inAppUpdatePriority": 5, "status": "completed" }] }
अपने ऐप्लिकेशन के कोड में, किसी अपडेट के लिए प्राथमिकता का लेवल देखने के लिए, UpdatePriority
का इस्तेमाल करें:
var priority = appUpdateInfoOperation.UpdatePriority;
अपडेट शुरू करना
यह पक्का करने के बाद कि कोई अपडेट उपलब्ध है, AppUpdateManager.StartUpdate()
का इस्तेमाल करके अपडेट का अनुरोध किया जा सकता है. अपडेट का अनुरोध करने से पहले, पक्का करें कि आपके पास अप-टू-डेट AppUpdateInfo
ऑब्जेक्ट हो. अपडेट फ़्लो को कॉन्फ़िगर करने के लिए, आपको एक AppUpdateOptions
ऑब्जेक्ट भी बनाना होगा.
यहां दिए गए उदाहरण में, तुरंत अपडेट होने वाले फ़्लो के लिए AppUpdateOptions
ऑब्जेक्ट बनाया गया है:
// Creates an AppUpdateOptions defining an immediate in-app
// update flow and its parameters.
var appUpdateOptions = AppUpdateOptions.ImmediateAppUpdateOptions();
नीचे दिए गए उदाहरण में, अपडेट के फ़्लो को आसान बनाने के लिए AppUpdateOptions
ऑब्जेक्ट बनाया गया है:
// Creates an AppUpdateOptions defining a flexible in-app
// update flow and its parameters.
var appUpdateOptions = AppUpdateOptions.FlexibleAppUpdateOptions();
AppUpdateOptions
ऑब्जेक्ट में एक AllowAssetPackDeletion
फ़ील्ड भी होता है, जिससे यह तय होता है कि डिवाइस के स्टोरेज के सीमित होने पर, अपडेट को एसेट पैक मिटाने की अनुमति है या नहीं. यह फ़ील्ड डिफ़ॉल्ट रूप से false
पर सेट होता है. हालांकि, इसे true
पर सेट करने के लिए, allowAssetPackDeletion
के वैकल्पिक आर्ग्युमेंट को ImmediateAppUpdateOptions()
या FlexibleAppUpdateOptions()
पर पास किया जा सकता है:
// Creates an AppUpdateOptions for an immediate flow that allows
// asset pack deletion.
var appUpdateOptions =
AppUpdateOptions.ImmediateAppUpdateOptions(allowAssetPackDeletion: true);
// Creates an AppUpdateOptions for a flexible flow that allows asset
// pack deletion.
var appUpdateOptions =
AppUpdateOptions.FlexibleAppUpdateOptions(allowAssetPackDeletion: true);
आगे की कार्रवाई इस बात पर निर्भर करती है कि आपने ज़रूरत के हिसाब से अपडेट का अनुरोध किया है या तुरंत अपडेट का.
ज़रूरत के हिसाब से अपडेट मैनेज करना
अप-टू-डेट AppUpdateInfo
ऑब्जेक्ट और सही तरीके से कॉन्फ़िगर किया गया AppUpdateOptions
ऑब्जेक्ट मिलने के बाद, अपडेट फ़्लो का अनुरोध करने के लिए, एसिंक्रोनस तरीके से AppUpdateManager.StartUpdate()
को कॉल किया जा सकता है.
IEnumerator StartFlexibleUpdate()
{
// Creates an AppUpdateRequest that can be used to monitor the
// requested in-app update flow.
var startUpdateRequest = appUpdateManager.StartUpdate(
// The result returned by PlayAsyncOperation.GetResult().
appUpdateInfoResult,
// The AppUpdateOptions created defining the requested in-app update
// and its parameters.
appUpdateOptions);
while (!startUpdateRequest.IsDone)
{
// For flexible flow,the user can continue to use the app while
// the update downloads in the background. You can implement a
// progress bar showing the download status during this time.
yield return null;
}
}
अपडेट करने के लिए, आपको डाउनलोड पूरा होने के बाद, ऐप्लिकेशन के अपडेट को इंस्टॉल करना होगा. ऐसा करने के लिए, AppUpdateManager.CompleteUpdate()
को कॉल करें, जैसा कि इस उदाहरण में दिखाया गया है:
IEnumerator CompleteFlexibleUpdate()
{
var result = appUpdateManager.CompleteUpdate();
yield return result;
// If the update completes successfully, then the app restarts and this line
// is never reached. If this line is reached, then handle the failure (e.g. by
// logging result.Error or by displaying a message to the user).
}
तुरंत अपडेट मैनेज करना
अप-टू-डेट AppUpdateInfo
ऑब्जेक्ट और सही तरीके से कॉन्फ़िगर किया गया AppUpdateOptions
ऑब्जेक्ट मिलने के बाद, अपडेट फ़्लो का अनुरोध करने के लिए, एसिंक्रोनस तरीके से AppUpdateManager.StartUpdate()
को कॉल किया जा सकता है.
IEnumerator StartImmediateUpdate()
{
// Creates an AppUpdateRequest that can be used to monitor the
// requested in-app update flow.
var startUpdateRequest = appUpdateManager.StartUpdate(
// The result returned by PlayAsyncOperation.GetResult().
appUpdateInfoResult,
// The AppUpdateOptions created defining the requested in-app update
// and its parameters.
appUpdateOptions);
yield return startUpdateRequest;
// If the update completes successfully, then the app restarts and this line
// is never reached. If this line is reached, then handle the failure (for
// example, by logging result.Error or by displaying a message to the user).
}
तुरंत अपडेट करने के लिए, Google Play उपयोगकर्ता को पुष्टि करने वाला डायलॉग दिखाता है. जब उपयोगकर्ता अनुरोध स्वीकार करता है, तो Google Play अपडेट को अपने-आप डाउनलोड और इंस्टॉल करता है. इसके बाद, अगर इंस्टॉलेशन पूरा हो जाता है, तो ऐप्लिकेशन को अपडेट किए गए वर्शन पर रीस्टार्ट करता है.
गड़बड़ी ठीक करना
इस सेक्शन में, आम तौर पर होने वाली गड़बड़ियों को ठीक करने के तरीके बताए गए हैं.
- अगर
StartUpdate()
सेArgumentNullException
मिलता है, तो इसका मतलब है किAppUpdateInfo
शून्य है. अपडेट फ़्लो शुरू करने से पहले, पक्का करें किGetAppUpdateInfo()
से दिखाया गयाAppUpdateInfo
ऑब्जेक्ट, शून्य न हो. - अगर
PlayAsyncOperation
,ErrorUpdateUnavailable
गड़बड़ी कोड दिखाता है, तो पक्का करें कि ऐप्लिकेशन का अपडेट किया गया वर्शन उपलब्ध हो. साथ ही, उसमें वही ऐप्लिकेशन आईडी और साइनिंग पासकोड हो. - अगर
PlayAsyncOperation
,ErrorUpdateNotAllowed
गड़बड़ी कोड दिखाता है, तो इसका मतलब है किAppUpdateOptions
ऑब्जेक्ट, अपडेट के ऐसे टाइप के बारे में बताता है जिसकी अनुमति उपलब्ध अपडेट के लिए नहीं है. अपडेट फ़्लो शुरू करने से पहले, देखें किAppUpdateInfo
ऑब्जेक्ट से यह पता चलता है कि चुने गए अपडेट टाइप की अनुमति है या नहीं.
अगले चरण
अपने ऐप्लिकेशन के इन-ऐप्लिकेशन अपडेट की जांच करें, ताकि यह पुष्टि की जा सके कि आपका इंटिग्रेशन सही तरीके से काम कर रहा है या नहीं.