Kotlin বা Java ব্যবহার করে আপনার অ্যাপে কীভাবে অ্যাপ-মধ্যস্থ আপডেট সংক্রান্ত সহায়তা প্রদান করবেন তা এই নির্দেশিকায় বর্ণনা করা হয়েছে। আপনার ইমপ্লিমেন্টেশন নেটিভ কোড (C/C++) ব্যবহার করলে এবং আপনার ইমপ্লিমেন্টেশন Unity বা Unreal Engine ব্যবহার করলে, তার জন্য আলাদা আলাদা নির্দেশিকা আছে।
আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সেট-আপ করুন
Play অ্যাপ-মধ্যস্থ আপডেট লাইব্রেরি হল Google Play Core লাইব্রেরির অংশ। Play In-App Update Library ইন্টিগ্রেট করতে নিম্নলিখিত Gradle ডিপেন্ডেন্সি অন্তর্ভুক্ত করুন।
গ্ৰুভি
// 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. } }
জাভা
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-এর মাধ্যমে ব্যবহারকারীকে শেষবার আপডেট সম্পর্কে জানানোর পর থেকে কত সময় পেরিয়ে গেছে। এটি আপনাকে সিদ্ধান্ত নিতে সাহায্য করতে পারে যে আপনার একটি ফ্লেক্সিবল আপডেট নাকি অবিলম্বে আপডেট শুরু করা উচিত। যেমন, আপনি হয়ত ব্যবহারকারীকে ফ্লেক্সিবল আপডেট সম্পর্কে জানানোর আগে কয়েক দিন অপেক্ষা করতে পারেন এবং তার কয়েক দিন পরে অবিলম্বে আপডেট করার জন্য বলতে পারেন।
Play Store-এ আপডেট উপলভ্য হওয়ার পর থেকে কত দিন কেটে গেছে তা চেক করতে
clientVersionStalenessDays() ব্যবহার করুন:
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. } }
জাভা
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 Developer API আপনাকে প্রতিটি আপডেটের অগ্রাধিকার সেট করতে দেয়। এটি আপনার অ্যাপকে ব্যবহারকারীর কাছে কোনও আপডেট কতটা জোরালোভাবে সাজেস্ট করতে হবে তা সিদ্ধান্ত নিতে দেয়। যেমন, আপডেট প্রায়োরিটি সেট করার জন্য নিম্নলিখিত স্ট্র্যাটেজি বিবেচনা করুন:
- UI-তে ছোটখাটো উন্নতি: কম-অগ্রাধিকার আপডেট; ফ্লেক্সিবল আপডেট বা অবিলম্বে আপডেট করার অনুরোধ করে না। ব্যবহারকারী আপনার অ্যাপের সাথে ইন্টার্যাক্ট না করলে তবেই আপডেট করুন।
- পারফর্ম্যান্সের উন্নতি: মাঝারি-অগ্রাধিকার আপডেট; একটি নমনীয় আপডেটের অনুরোধ করুন।
- গুরুত্বপূর্ণ নিরাপত্তা আপডেট: উচ্চ-অগ্রাধিকার আপডেট; অবিলম্বে আপডেট করার অনুরোধ করুন।
অগ্রাধিকার নির্ধারণ করতে, Google Play ০ থেকে ৫-এর মধ্যে একটি পূর্ণসংখ্যা ব্যবহার করে, যেখানে ০
ডিফল্ট এবং ৫ হল সর্বোচ্চ অগ্রাধিকার। আপডেটের জন্য অগ্রাধিকার সেট করতে, Google Play Developer API-তে Edits.tracks.releases-এর অধীনে
inAppUpdatePriority ফিল্ড ব্যবহার করুন। রিলিজে নতুন যোগ করা সব ভার্সনকে
রিলিজের মতোই একই অগ্রাধিকার দেওয়া হয়। নতুন রিলিজ রোল-আউট করার সময়
অগ্রাধিকার সেট করা যায় এবং পরে তা পরিবর্তন করা যায় না।
Play Developer API ডকুমেন্টেশনে যেভাবে বর্ণনা করা হয়েছে সেই অনুযায়ী Google Play Developer API ব্যবহার করে অগ্রাধিকার সেট করুন। অ্যাপ-মধ্যস্থ আপডেট সংক্রান্ত অগ্রাধিকার Edit.tracks: update পদ্ধতিতে পাস করা
Edit.tracks রিসোর্সে
উল্লেখ করতে হবে। নিম্নলিখিত উদাহরণে ভার্সন কোড ৮৮ এবং inAppUpdatePriority ৫ সহ অ্যাপ রিলিজ করার
প্রক্রিয়া দেখানো হয়েছে:
{ "releases": [{ "versionCodes": ["88"], "inAppUpdatePriority": 5, "status": "completed" }] }
আপনার অ্যাপের কোডে, আপনি
updatePriority() ব্যবহার করে কোনও নির্দিষ্ট আপডেটের জন্য অগ্রাধিকার লেভেল চেক করতে পারেন। ফেরত দেওয়া প্রায়োরিটি, রিলিজ ট্র্যাক নির্বিশেষে, ইনস্টল করা ভার্সন
এবং লেটেস্ট উপলভ্য ভার্সনের মধ্যে সব অ্যাপ ভার্সন কোডের জন্য
inAppUpdatePriority বিবেচনা করে। যেমন,
নিম্নলিখিত পরিস্থিতি বিবেচনা করুন:
- আপনি কোনও অগ্রাধিকার ছাড়াই প্রোডাকশন ট্র্যাকে ভার্সন ১ রিলিজ করেছেন।
- আপনি ৫ প্রায়োরিটি সহ ইন্টার্নাল টেস্ট ট্র্যাকে ভার্সন ২ রিলিজ করেছেন।
- আপনি কোনও অগ্রাধিকার ছাড়াই প্রোডাকশন ট্র্যাকে ভার্সন ৩ রিলিজ করেছেন।
প্রোডাকশন ব্যবহারকারীরা ভার্সন ১ থেকে ভার্সন ৩-এ আপডেট করলে, তারা অগ্রাধিকার ৫ পাবেন, যদিও ভার্সন ২ অন্য ট্র্যাকে প্রকাশ করা হয়েছে।
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. } }
জাভা
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())
জাভা
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())
জাভা
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. } }
জাভা
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: অন্য কোনও সমস্যার কারণে ব্যবহারকারী সম্মতি দিতে পারেননি অথবা আপডেট প্রক্রিয়া সম্পূর্ণ হয়নি।
ফ্লেক্সিবল আপডেট ম্যানেজ করা
আপনি কোনও ফ্লেক্সিবল আপডেট শুরু করলে, ব্যবহারকারীর সম্মতি চাওয়ার জন্য প্রথমে একটি ডায়ালগ দেখানো হয়। ব্যবহারকারী সম্মতি দিলে, ব্যাকগ্রাউন্ডে ডাউনলোড শুরু হয় এবং ব্যবহারকারী আপনার অ্যাপের সাথে ইন্টার্যাক্ট করা চালিয়ে যেতে পারেন। এই বিভাগে, কীভাবে ফ্লেক্সিবল ইন-অ্যাপ আপডেট মনিটর ও সম্পূর্ণ করতে হয় তা বর্ণনা করা হয়েছে।
ফ্লেক্সিবল আপডেট স্ট্যাটাস মনিটর করা
ফ্লেক্সিবল আপডেটের জন্য ডাউনলোড শুরু হওয়ার পরে, আপডেট কখন ইনস্টল করা যাবে তা জানতে এবং আপনার অ্যাপের UI-তে প্রগ্রেস দেখাতে, আপনার অ্যাপকে আপডেটের স্ট্যাটাস মনিটর করতে হবে।
ইনস্টল স্ট্যাটাস আপডেটের জন্য লিসেনার রেজিস্টার করে আপনি প্রোগ্রেসে থাকা আপডেটের স্ট্যাটাস মনিটর করতে পারবেন। এছাড়াও, আপনি অ্যাপের UI-তে প্রোগ্রেস বার দেখাতে পারেন যাতে ব্যবহারকারীরা ডাউনলোডের প্রোগ্রেস সম্পর্কে জানতে পারেন।
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)
জাভা
// 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 অটোমেটিক অ্যাপ রিস্টার্ট করে না। কারণ, ফ্লেক্সিবল আপডেট চলাকালীন, ব্যবহারকারী আপডেট ইনস্টল করার সিদ্ধান্ত না নেওয়া পর্যন্ত অ্যাপের সাথে ইন্টার্যাক্ট করা চালিয়ে যেতে চান।
আপডেট ইনস্টল করার জন্য প্রস্তুত এবং অ্যাপ রিস্টার্ট করার আগে কনফার্মেশন প্রয়োজন, এই বিষয়ে ব্যবহারকারীকে জানানোর জন্য বিজ্ঞপ্তি (বা অন্য কোনও UI ইঙ্গিত) প্রদান করার সাজেশন দেওয়া হয়।
নিম্নলিখিত উদাহরণে দেখানো হয়েছে যে কীভাবে মেটেরিয়াল ডিজাইন স্ন্যাকবার প্রয়োগ করতে হয় যা অ্যাপ রিস্টার্ট করার জন্য ব্যবহারকারীর থেকে কনফার্মেশন চায়:
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() } }
জাভা
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() কল করলে, প্ল্যাটফর্মটি একটি ফুল-স্ক্রিন UI দেখায় যা ব্যাকগ্রাউন্ডে অ্যাপটি রিস্টার্ট করে।
প্ল্যাটফর্ম আপডেট ইনস্টল করার পরে, আপনার অ্যাপটি তার প্রধান অ্যাক্টিভিটিতে
রিস্টার্ট হয়।
আপনার অ্যাপ ব্যাকগ্রাউন্ডে চলাকালীন আপনি যদি completeUpdate() কল করেন,
তাহলে ডিভাইসের UI-তে কোনও বাধা না দিয়ে আপডেটটি সাইলেন্টলি ইনস্টল করা হয়।
ব্যবহারকারী যখনই আপনার অ্যাপ ফোরগ্রাউন্ডে আনবেন, তখনই চেক করে দেখুন যে আপনার অ্যাপের কোনও আপডেট
ইনস্টল হওয়ার জন্য অপেক্ষা করছে কিনা। আপনার অ্যাপের কোনও আপডেট 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() } } }
জাভা
// 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 আপনার অ্যাপের UI-এর উপরে আপডেট করার পুরো সময় জুড়ে আপডেটের প্রোগ্রেস দেখায়। আপডেট চলাকালীন ব্যবহারকারী আপনার অ্যাপ বন্ধ বা শেষ করে দিলে, ব্যবহারকারীর থেকে অতিরিক্ত কনফার্মেশন ছাড়াই ব্যাকগ্রাউন্ডে আপডেট ডাউনলোড ও ইনস্টল করা চালিয়ে যেতে হবে।
তবে, আপনার অ্যাপ ফোরগ্রাউন্ডে ফিরে এলে, আপনাকে কনফার্ম করতে হবে যে আপডেটটি
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()) } } }
জাভা
// 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 UI বন্ধ হয়ে যায়। আপনার অ্যাপ
কীভাবে এগোতে হবে তা নির্ধারণ করবে।
সম্ভব হলে, ব্যবহারকারীকে আপডেট না করেই চালিয়ে যেতে দিন এবং পরে আবার প্রম্পট করুন। আপডেট না করলে আপনার অ্যাপ কাজ না করলে, আপডেট ফ্লো রিস্টার্ট করার আগে বা ব্যবহারকারীকে অ্যাপ বন্ধ করার প্রম্পট দেখানোর আগে একটি তথ্যমূলক মেসেজ দেখানোর কথা বিবেচনা করুন। এইভাবে, ব্যবহারকারী বুঝতে পারবেন যে প্রয়োজনীয় আপডেট ইনস্টল করার জন্য প্রস্তুত হলে তিনি আপনার অ্যাপ আবার চালু করতে পারবেন।
পরবর্তী ধাপ
আপনার ইন্টিগ্রেশন সঠিকভাবে কাজ করছে কিনা তা যাচাই করতে আপনার অ্যাপের ইন-অ্যাপ আপডেট টেস্ট করুন।