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