इन-ऐप्लिकेशन अपडेट के साथ काम करता है (Kotlin या Java)

इस गाइड में, Kotlin या Java का इस्तेमाल करके, अपने ऐप्लिकेशन में ऐप्लिकेशन में अपडेट की सुविधा देने का तरीका बताया गया है. अगर आपके ऐप्लिकेशन में नेटिव कोड (C/C++) का इस्तेमाल किया जाता है, तो इसके लिए अलग गाइड उपलब्ध हैं. इसके अलावा, अगर आपके ऐप्लिकेशन में Unity या Unreal Engine का इस्तेमाल किया जाता है, तो इसके लिए भी अलग गाइड उपलब्ध हैं.

अपना डेवलपमेंट एनवायरमेंट सेट अप करना

Play इन-ऐप्लिकेशन अपडेट लाइब्रेरी, Google Play Core लाइब्रेरी का हिस्सा है. Play In-App Update लाइब्रेरी को इंटिग्रेट करने के लिए, यह Gradle डिपेंडेंसी शामिल करें.

Groovy

// In your app's build.gradle file:
...
dependencies {
    // This dependency is downloaded from the Google's Maven repository.
    // So, make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.play:app-update:2.1.0'

    // For Kotlin users also add the Kotlin extensions library for Play In-App Update:
    implementation 'com.google.android.play:app-update-ktx:2.1.0'
    ...
}

Kotlin

// In your app's build.gradle.kts file:
...
dependencies {
    // This dependency is downloaded from the Google's Maven repository.
    // So, make sure you also include that repository in your project's build.gradle file.
    implementation("com.google.android.play:app-update:2.1.0")

    // For Kotlin users also import the Kotlin extensions library for Play In-App Update:
    implementation("com.google.android.play:app-update-ktx:2.1.0")
    ...
}

यह देखना कि अपडेट उपलब्ध है या नहीं

अपडेट का अनुरोध करने से पहले, देखें कि आपके ऐप्लिकेशन के लिए कोई अपडेट उपलब्ध है या नहीं. अपडेट देखने के लिए, AppUpdateManager का इस्तेमाल करें:

Kotlin

val appUpdateManager = AppUpdateManagerFactory.create(context)

// Returns an intent object that you use to check for an update.
val appUpdateInfoTask = appUpdateManager.appUpdateInfo

// Checks that the platform will allow the specified type of update.
appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
    if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
        // This example applies an immediate update. To apply a flexible update
        // instead, pass in AppUpdateType.FLEXIBLE
        && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)
    ) {
        // Request the update.
    }
}

Java

AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(context);

// Returns an intent object that you use to check for an update.
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

// Checks that the platform will allow the specified type of update.
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
    if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
          // This example applies an immediate update. To apply a flexible update
          // instead, pass in AppUpdateType.FLEXIBLE
          && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
              // Request the update.
    }
});

लौटाए गए AppUpdateInfo इंस्टेंस में, अपडेट की उपलब्धता की स्थिति शामिल होती है. अपडेट की स्थिति के आधार पर, इंस्टेंस में यह जानकारी भी शामिल होती है:

  • अगर कोई अपडेट उपलब्ध है और उसे इंस्टॉल करने की अनुमति है, तो इंस्टेंस में अपडेट शुरू करने का इंटेंट भी शामिल होता है.
  • अगर इन-ऐप्लिकेशन अपडेट पहले से ही चल रहा है, तो इंस्टेंस, अपडेट की स्थिति की जानकारी भी देता है.

अपडेट कितना पुराना है देखना

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

clientVersionStalenessDays() का इस्तेमाल करके देखें कि Play Store पर अपडेट उपलब्ध होने के बाद से कितने दिन हो गए हैं:

Kotlin

val appUpdateManager = AppUpdateManagerFactory.create(context)

// Returns an intent object that you use to check for an update.
val appUpdateInfoTask = appUpdateManager.appUpdateInfo

// Checks whether the platform allows the specified type of update,
// and current version staleness.
appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
    if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
          && (appUpdateInfo.clientVersionStalenessDays() ?: -1) >= DAYS_FOR_FLEXIBLE_UPDATE
          && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
              // Request the update.
    }
}

Java

AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(context);

// Returns an intent object that you use to check for an update.
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

// Checks whether the platform allows the specified type of update,
// and current version staleness.
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
    if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
          && appUpdateInfo.clientVersionStalenessDays() != null
          && appUpdateInfo.clientVersionStalenessDays() >= DAYS_FOR_FLEXIBLE_UPDATE
          && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
              // Request the update.
    }
});

अपडेट की प्राथमिकता देखना

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() का इस्तेमाल करके, किसी अपडेट के लिए प्राथमिकता का लेवल देखा जा सकता है. लौटाई गई प्राथमिकता, इंस्टॉल किए गए वर्शन और उपलब्ध नए वर्शन के बीच के सभी ऐप्लिकेशन वर्शन कोड के लिए, inAppUpdatePriority को ध्यान में रखती है. इससे कोई फ़र्क़ नहीं पड़ता कि रिलीज़ ट्रैक कौनसा है. उदाहरण के लिए, इस स्थिति पर विचार करें:

  • आपने वर्शन 1 को बिना किसी प्राथमिकता के प्रोडक्शन ट्रैक पर रिलीज़ किया.
  • आपने वर्शन 2 को 5 की प्राथमिकता के साथ ऐप्लिकेशन के इंटरनल टेस्ट ट्रैक पर रिलीज़ किया.
  • आपने वर्शन 3 को बिना किसी प्राथमिकता के प्रोडक्शन ट्रैक पर रिलीज़ किया.

जब प्रोडक्शन ट्रैक के उपयोगकर्ता, वर्शन 1 से वर्शन 3 पर अपडेट करेंगे, तो उन्हें प्राथमिकता 5 मिलेगी. भले ही, वर्शन 2 को किसी दूसरे ट्रैक पर पब्लिश किया गया हो.

Kotlin

val appUpdateManager = AppUpdateManagerFactory.create(context)

// Returns an intent object that you use to check for an update.
val appUpdateInfoTask = appUpdateManager.appUpdateInfo

// Checks whether the platform allows the specified type of update,
// and checks the update priority.
appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
    if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
          && appUpdateInfo.updatePriority() >= 4 /* high priority */
          && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
              // Request an immediate update.
    }
}

Java

AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(context);

// Returns an intent object that you use to check for an update.
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();

// Checks whether the platform allows the specified type of update,
// and checks the update priority.
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
    if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
          && appUpdateInfo.updatePriority() >= 4 /* high priority */
          && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
              // Request an immediate update.
    }
});

अपडेट करना

यह पुष्टि करने के बाद कि कोई अपडेट उपलब्ध है, AppUpdateManager.startUpdateFlowForResult() का इस्तेमाल करके अपडेट का अनुरोध किया जा सकता है:

Kotlin

appUpdateManager.startUpdateFlowForResult(
    // Pass the intent that is returned by 'getAppUpdateInfo()'.
    appUpdateInfo,
    // an activity result launcher registered via registerForActivityResult
    activityResultLauncher,
    // Or pass 'AppUpdateType.FLEXIBLE' to newBuilder() for
    // flexible updates.
    AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE).build())

Java

appUpdateManager.startUpdateFlowForResult(
    // Pass the intent that is returned by 'getAppUpdateInfo()'.
    appUpdateInfo,
    // an activity result launcher registered via registerForActivityResult
    activityResultLauncher,
    // Or pass 'AppUpdateType.FLEXIBLE' to newBuilder() for
    // flexible updates.
    AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE).build());

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

पहले से मौजूद ActivityResultContracts.StartIntentSenderForResult कॉन्ट्रैक्ट का इस्तेमाल करके, गतिविधि के नतीजे का लॉन्चर रजिस्टर किया जा सकता है. अपडेट की स्थिति के लिए कॉलबैक पाने के बारे में सेक्शन देखें.

अगले चरण इस बात पर निर्भर करते हैं कि आपने फ़्लेक्सिबल अपडेट का अनुरोध किया है या तुरंत अपडेट का.

AppUpdateOptions की मदद से, अपडेट को कॉन्फ़िगर करना

AppUpdateOptions में एक AllowAssetPackDeletion फ़ील्ड होता है. इससे यह तय होता है कि डिवाइस का स्टोरेज कम होने पर, अपडेट के दौरान ऐसेट पैक को मिटाया जा सकता है या नहीं. यह फ़ील्ड डिफ़ॉल्ट रूप से false पर सेट होता है. हालांकि, इसे true पर सेट करने के लिए, setAllowAssetPackDeletion() तरीके का इस्तेमाल किया जा सकता है:

Kotlin

appUpdateManager.startUpdateFlowForResult(
    // Pass the intent that is returned by 'getAppUpdateInfo()'.
    appUpdateInfo,
    // an activity result launcher registered via registerForActivityResult
    activityResultLauncher,
    // Or pass 'AppUpdateType.FLEXIBLE' to newBuilder() for
    // flexible updates.
    AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE)
        .setAllowAssetPackDeletion(true)
        .build())

Java

appUpdateManager.startUpdateFlowForResult(
    // Pass the intent that is returned by 'getAppUpdateInfo()'.
    appUpdateInfo,
    // an activity result launcher registered via registerForActivityResult
    activityResultLauncher,
    // Or pass 'AppUpdateType.FLEXIBLE' to newBuilder() for
    // flexible updates.
    AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE)
        .setAllowAssetPackDeletion(true)
        .build());

अपडेट की स्थिति जानने के लिए, कॉलबैक का अनुरोध करना

अपडेट शुरू होने के बाद, रजिस्टर की गई गतिविधि के नतीजे के लॉन्चर कॉलबैक को पुष्टि करने वाले डायलॉग बॉक्स का नतीजा मिलता है:

Kotlin

registerForActivityResult(StartIntentSenderForResult()) { result: ActivityResult ->
    // handle callback
    if (result.resultCode != RESULT_OK) {
        log("Update flow failed! Result code: " + result.resultCode);
        // If the update is canceled or fails,
        // you can request to start the update again.
    }
}

Java

registerForActivityResult(
    new ActivityResultContracts.StartIntentSenderForResult(),
    new ActivityResultCallback<ActivityResult>() {
        @Override
        public void onActivityResult(ActivityResult result) {
            // handle callback
            if (result.getResultCode() != RESULT_OK) {
                log("Update flow failed! Result code: " + result.getResultCode());
                // If the update is canceled or fails,
                // you can request to start the update again.
            }
        }
    });

onActivityResult() कॉलबैक से आपको कई वैल्यू मिल सकती हैं:

  • RESULT_OK: उपयोगकर्ता ने अपडेट स्वीकार कर लिया है. तुरंत अपडेट करने के लिए, हो सकता है कि आपको यह कॉलबैक न मिले. ऐसा इसलिए, क्योंकि आपके ऐप्लिकेशन को कंट्रोल वापस मिलने तक, अपडेट पहले ही पूरा हो जाना चाहिए.
  • RESULT_CANCELED: उपयोगकर्ता ने अपडेट को अस्वीकार या रद्द कर दिया है.
  • ActivityResult.RESULT_IN_APP_UPDATE_FAILED: किसी अन्य गड़बड़ी की वजह से, उपयोगकर्ता सहमति नहीं दे पाया या अपडेट की प्रोसेस आगे नहीं बढ़ पाई.

फ़्लेक्सिबल अपडेट को मैनेज करना

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

फ़्लेक्सिबल अपडेट की स्थिति को मॉनिटर करना

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

इंस्टॉल करने की स्थिति के अपडेट के लिए, लिसनर को रजिस्टर करके, अपडेट की स्थिति को मॉनिटर किया जा सकता है. ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) में प्रोग्रेस बार भी दिया जा सकता है, ताकि उपयोगकर्ताओं को डाउनलोड की प्रोग्रेस के बारे में जानकारी दी जा सके.

Kotlin

// Create a listener to track request state updates.
val listener = InstallStateUpdatedListener { state ->
    // (Optional) Provide a download progress bar.
    if (state.installStatus() == InstallStatus.DOWNLOADING) {
      val bytesDownloaded = state.bytesDownloaded()
      val totalBytesToDownload = state.totalBytesToDownload()
      // Show update progress bar.
    }
    // Log state or install the update.
}

// Before starting an update, register a listener for updates.
appUpdateManager.registerListener(listener)

// Start an update.

// When status updates are no longer needed, unregister the listener.
appUpdateManager.unregisterListener(listener)

Java

// Create a listener to track request state updates.
InstallStateUpdatedListener listener = state -> {
  // (Optional) Provide a download progress bar.
  if (state.installStatus() == InstallStatus.DOWNLOADING) {
      long bytesDownloaded = state.bytesDownloaded();
      long totalBytesToDownload = state.totalBytesToDownload();
      // Implement progress bar.
  }
  // Log state or install the update.
};

// Before starting an update, register a listener for updates.
appUpdateManager.registerListener(listener);

// Start an update.

// When status updates are no longer needed, unregister the listener.
appUpdateManager.unregisterListener(listener);

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

InstallStatus.DOWNLOADED स्टेटस दिखने पर, अपडेट इंस्टॉल करने के लिए आपको ऐप्लिकेशन को रीस्टार्ट करना होगा.

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

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

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

Kotlin

val listener = { state ->
    if (state.installStatus() == InstallStatus.DOWNLOADED) {
        // After the update is downloaded, show a notification
        // and request user confirmation to restart the app.
        popupSnackbarForCompleteUpdate()
    }
    ...
}

// Displays the snackbar notification and call to action.
fun popupSnackbarForCompleteUpdate() {
    Snackbar.make(
        findViewById(R.id.activity_main_layout),
        "An update has just been downloaded.",
        Snackbar.LENGTH_INDEFINITE
    ).apply {
        setAction("RESTART") { appUpdateManager.completeUpdate() }
        setActionTextColor(resources.getColor(R.color.snackbar_action_text_color))
        show()
    }
}

Java

InstallStateUpdatedListener listener = state -> {
    if (state.installStatus() == InstallStatus.DOWNLOADED) {
        // After the update is downloaded, show a notification
        // and request user confirmation to restart the app.
        popupSnackbarForCompleteUpdate();
    }
    ...
};

// Displays the snackbar notification and call to action.
private void popupSnackbarForCompleteUpdate() {
  Snackbar snackbar =
      Snackbar.make(
          findViewById(R.id.activity_main_layout),
          "An update has just been downloaded.",
          Snackbar.LENGTH_INDEFINITE);
  snackbar.setAction("RESTART", view -> appUpdateManager.completeUpdate());
  snackbar.setActionTextColor(
      getResources().getColor(R.color.snackbar_action_text_color));
  snackbar.show();
}

फ़ोरग्राउंड में appUpdateManager.completeUpdate() को कॉल करने पर, प्लैटफ़ॉर्म एक फ़ुल-स्क्रीन यूज़र इंटरफ़ेस (यूआई) दिखाता है. यह यूज़र इंटरफ़ेस (यूआई), ऐप्लिकेशन को बैकग्राउंड में रीस्टार्ट करता है. अपडेट इंस्टॉल होने के बाद, ऐप्लिकेशन रीस्टार्ट हो जाता है और अपनी मुख्य गतिविधि पर वापस आ जाता है.

अगर ऐप्लिकेशन के बैकग्राउंड में होने पर completeUpdate() को कॉल किया जाता है, तो अपडेट बिना किसी सूचना के इंस्टॉल हो जाता है. इससे डिवाइस के यूज़र इंटरफ़ेस (यूआई) पर कोई असर नहीं पड़ता.

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

Kotlin

// Checks that the update is not stalled during 'onResume()'.
// However, you should execute this check at all app entry points.
override fun onResume() {
    super.onResume()

    appUpdateManager
        .appUpdateInfo
        .addOnSuccessListener { appUpdateInfo ->
            ...
            // If the update is downloaded but not installed,
            // notify the user to complete the update.
            if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
                popupSnackbarForCompleteUpdate()
            }
        }
}

Java

// Checks that the update is not stalled during 'onResume()'.
// However, you should execute this check at all app entry points.
@Override
protected void onResume() {
  super.onResume();

  appUpdateManager
      .getAppUpdateInfo()
      .addOnSuccessListener(appUpdateInfo -> {
              ...
              // If the update is downloaded but not installed,
              // notify the user to complete the update.
              if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
                  popupSnackbarForCompleteUpdate();
              }
          });
}

तुरंत अपडेट करने की सुविधा को मैनेज करना

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

हालांकि, जब आपका ऐप्लिकेशन फ़ोरग्राउंड में वापस आता है, तो आपको यह पुष्टि करनी चाहिए कि अपडेट, UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS स्थिति में रुका हुआ न हो. अगर अपडेट इस स्थिति में रुक गया है, तो उसे फिर से शुरू करें:

Kotlin

// Checks that the update is not stalled during 'onResume()'.
// However, you should execute this check at all entry points into the app.
override fun onResume() {
    super.onResume()

    appUpdateManager
        .appUpdateInfo
        .addOnSuccessListener { appUpdateInfo ->
            ...
            if (appUpdateInfo.updateAvailability()
                == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS
            ) {
                // If an in-app update is already running, resume the update.
                appUpdateManager.startUpdateFlowForResult(
                  appUpdateInfo,
                  activityResultLauncher,
                  AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE).build())
            }
        }
}

Java

// Checks that the update is not stalled during 'onResume()'.
// However, you should execute this check at all entry points into the app.
@Override
protected void onResume() {
  super.onResume();

  appUpdateManager
      .getAppUpdateInfo()
      .addOnSuccessListener(
          appUpdateInfo -> {
            ...
            if (appUpdateInfo.updateAvailability()
                == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
                // If an in-app update is already running, resume the update.
                appUpdateManager.startUpdateFlowForResult(
                  appUpdateInfo,
                  activityResultLauncher,
                  AppUpdateOptions.newBuilder(AppUpdateType.IMMEDIATE).build());
            }
          });
}

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

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

अगले चरण

अपने ऐप्लिकेशन में होने वाले अपडेट की जांच करें, ताकि यह पुष्टि की जा सके कि आपका इंटिग्रेशन सही तरीके से काम कर रहा है.