इस गाइड में, Unity का इस्तेमाल करके अपने ऐप्लिकेशन में इन-ऐप्लिकेशन अपडेट की सुविधा को चालू करने का तरीका बताया गया है. Kotlin प्रोग्रामिंग लैंग्वेज या Java प्रोग्रामिंग लैंग्वेज का इस्तेमाल करने पर, लागू करने के तरीके के लिए अलग-अलग गाइड उपलब्ध हैं. इसके अलावा, नेटिव कोड (C/C++) का इस्तेमाल करने पर भी, लागू करने के तरीके के लिए अलग-अलग गाइड उपलब्ध हैं.
डेवलपमेंट एनवायरमेंट सेट अप करना
OpenUPM-CLI
अगर आपने OpenUPM CLI इंस्टॉल किया है, तो इस कमांड का इस्तेमाल करके OpenUPM रजिस्ट्री इंस्टॉल की जा सकती है:
openupm add com.google.play.appupdate
OpenUPM
Unity मेन्यू विकल्प बदलाव करें > प्रोजेक्ट सेटिंग > पैकेज मैनेजर चुनकर, पैकेज मैनेजर की सेटिंग खोलें.
पैकेज मैनेजर विंडो में, 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 के लिए Google Play इंटिग्रिटी प्लगिन पैकेज चुनें और इंस्टॉल करें दबाएं.
GitHub से इंपोर्ट करना
GitHub से
.unitypackage
की सबसे नई रिलीज़ डाउनलोड करें..unitypackage
फ़ाइल को इंपोर्ट करने के लिए, यूनिटी मेन्यू का विकल्प चुनें ऐसेट > पैकेज इंपोर्ट करें > कस्टम पैकेज और सभी आइटम इंपोर्ट करें.
Unity SDK टूल के बारे में खास जानकारी
Play में ऐप्लिकेशन के अपडेट से जुड़ा एपीआई, Play Core SDK टूल फ़ैमिली का हिस्सा है. Unity प्लग इन में एक AppUpdateManager
क्लास होती है. इसकी मदद से, आपके ऐप्लिकेशन और Play API के बीच होने वाले कम्यूनिकेशन को मैनेज किया जा सकता है. इन-ऐप्लिकेशन अपडेट को मैनेज करने के लिए, इस क्लास का इस्तेमाल करने से पहले आपको इसे इंस्टैंशिएट करना होगा:
AppUpdateManager appUpdateManager = new AppUpdateManager();
यह देखना कि कार के लिए कोई सिस्टम अपडेट उपलब्ध है या नहीं
अपडेट का अनुरोध करने से पहले, देखें कि आपके ऐप्लिकेशन के लिए कोई अपडेट उपलब्ध है या नहीं. क्रोटीन में अपडेट देखने के लिए, 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(), etc. 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
ऑब्जेक्ट से यह पता चलता है कि चुने गए अपडेट टाइप की अनुमति है या नहीं.
अगले चरण
अपने ऐप्लिकेशन के इन-ऐप्लिकेशन अपडेट की जांच करें, ताकि यह पुष्टि की जा सके कि आपका इंटिग्रेशन सही तरीके से काम कर रहा है.