এই নির্দেশিকাটি বর্ণনা করে কিভাবে আপনার অ্যাপে Kotlin অথবা Java ব্যবহার করে ইন-অ্যাপ আপডেটগুলি সমর্থন করবেন। যেখানে আপনার বাস্তবায়ন নেটিভ কোড (C/C++) ব্যবহার করে এবং যেখানে আপনার বাস্তবায়ন ইউনিটি অথবা আনরিয়াল ইঞ্জিন ব্যবহার করে, সেগুলির জন্য আলাদা নির্দেশিকা রয়েছে।
আপনার উন্নয়ন পরিবেশ সেট আপ করুন
প্লে ইন-অ্যাপ আপডেট লাইব্রেরি হল গুগল প্লে কোর লাইব্রেরির একটি অংশ। প্লে ইন-অ্যাপ আপডেট লাইব্রেরি সংহত করতে নিম্নলিখিত গ্রেডল নির্ভরতা অন্তর্ভুক্ত করুন।
খাঁজকাটা
// 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' ... }
কোটলিন
// 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 ব্যবহার করুন:
কোটলিন
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 ইনস্ট্যান্সে আপডেটের উপলব্ধতার স্থিতি থাকে। আপডেটের স্থিতির উপর নির্ভর করে, ইনস্ট্যান্সে নিম্নলিখিতগুলিও থাকে:
- যদি কোনও আপডেট উপলব্ধ থাকে এবং আপডেটটি অনুমোদিত হয়, তাহলে ইনস্ট্যান্সটিতে আপডেটটি শুরু করার একটি উদ্দেশ্যও রয়েছে।
- যদি কোনও ইন-অ্যাপ আপডেট ইতিমধ্যেই প্রগতিতে থাকে, তাহলে ইনস্ট্যান্সটি প্রগতিতে থাকা আপডেটের অবস্থাও রিপোর্ট করে।
আপডেটের অচলতা পরীক্ষা করুন
কোনও আপডেট উপলব্ধ কিনা তা পরীক্ষা করার পাশাপাশি, আপনি প্লে স্টোরের মাধ্যমে ব্যবহারকারীকে সর্বশেষ আপডেট সম্পর্কে অবহিত করার পর থেকে কত সময় অতিবাহিত হয়েছে তাও পরীক্ষা করতে পারেন। এটি আপনাকে একটি নমনীয় আপডেট শুরু করা উচিত নাকি তাৎক্ষণিক আপডেট শুরু করা উচিত তা সিদ্ধান্ত নিতে সাহায্য করতে পারে। উদাহরণস্বরূপ, ব্যবহারকারীকে একটি নমনীয় আপডেট সম্পর্কে অবহিত করার আগে আপনি কয়েক দিন অপেক্ষা করতে পারেন এবং তার কয়েক দিন পরে তাৎক্ষণিক আপডেটের প্রয়োজন হওয়ার আগে।
প্লে স্টোরে আপডেটটি উপলব্ধ হওয়ার পর থেকে কত দিন পর পর আপডেটটি পাওয়া যাচ্ছে তা পরীক্ষা করতে clientVersionStalenessDays() ব্যবহার করুন:
কোটলিন
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 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 বিবেচনা করে ফেরত আসা অগ্রাধিকার। উদাহরণস্বরূপ, নিম্নলিখিত পরিস্থিতি বিবেচনা করুন:
- আপনি কোনও অগ্রাধিকার ছাড়াই একটি প্রোডাকশন ট্র্যাকে সংস্করণ ১ প্রকাশ করেন।
- আপনি অগ্রাধিকার ৫ সহ একটি অভ্যন্তরীণ পরীক্ষামূলক ট্র্যাকে সংস্করণ ২ প্রকাশ করেন।
- আপনি কোনও অগ্রাধিকার ছাড়াই একটি প্রোডাকশন ট্র্যাকে সংস্করণ 3 প্রকাশ করেন।
যখন প্রোডাকশন ব্যবহারকারীরা ভার্সন ১ থেকে ভার্সন ৩ এ আপডেট করবেন, তখন তারা অগ্রাধিকার ৫ পাবেন, যদিও ভার্সন ২ ভিন্ন ট্র্যাকে প্রকাশিত হয়েছিল।
কোটলিন
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() ব্যবহার করে আপডেটের জন্য অনুরোধ করতে পারেন:
কোটলিন
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 এ সেট করা থাকে, তবে আপনি setAllowAssetPackDeletion() পদ্ধতি ব্যবহার করে এটিকে true তে সেট করতে পারেন:
কোটলিন
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());
আপডেট স্ট্যাটাসের জন্য কলব্যাক পান
একটি আপডেট শুরু করার পরে, নিবন্ধিত কার্যকলাপ ফলাফল লঞ্চার কলব্যাক নিশ্চিতকরণ ডায়ালগ ফলাফল পায়:
কোটলিন
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-তে একটি অগ্রগতি বারও প্রদান করতে পারেন।
কোটলিন
// 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 ইঙ্গিত) প্রদান করার পরামর্শ দেওয়া হচ্ছে এবং অ্যাপটি পুনরায় চালু করার আগে নিশ্চিতকরণের অনুরোধ করুন।
নিম্নলিখিত উদাহরণটি একটি ম্যাটেরিয়াল ডিজাইন স্ন্যাকবার বাস্তবায়নের বিষয়টি দেখায় যা ব্যবহারকারীর কাছ থেকে অ্যাপটি পুনরায় চালু করার জন্য নিশ্চিতকরণের অনুরোধ করে:
কোটলিন
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 অবস্থায় থাকে, তাহলে ব্যবহারকারীকে আপডেটটি ইনস্টল করতে বলুন। অন্যথায়, আপডেট ডেটা ব্যবহারকারীর ডিভাইস স্টোরেজ দখল করতে থাকবে।
কোটলিন
// 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 অবস্থায় স্থগিত নেই। যদি এই অবস্থায় আপডেটটি স্থগিত থাকে, তাহলে আপডেটটি পুনরায় শুরু করুন:
কোটলিন
// 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 বন্ধ হয়ে যায়। আপনার অ্যাপটি এগিয়ে যাওয়ার সর্বোত্তম উপায় নির্ধারণ করবে।
যদি সম্ভব হয়, তাহলে ব্যবহারকারীকে আপডেট ছাড়াই চালিয়ে যেতে দিন এবং পরে আবার অনুরোধ করুন। যদি আপনার অ্যাপটি আপডেট ছাড়া কাজ করতে না পারে, তাহলে আপডেট ফ্লো পুনরায় চালু করার আগে বা ব্যবহারকারীকে অ্যাপটি বন্ধ করার জন্য অনুরোধ করার আগে একটি তথ্যপূর্ণ বার্তা প্রদর্শন করার কথা বিবেচনা করুন। এইভাবে, ব্যবহারকারী বুঝতে পারবেন যে প্রয়োজনীয় আপডেট ইনস্টল করার জন্য প্রস্তুত হলে তারা আপনার অ্যাপটি পুনরায় চালু করতে পারবেন।
পরবর্তী পদক্ষেপ
আপনার ইন্টিগ্রেশন সঠিকভাবে কাজ করছে কিনা তা যাচাই করতে আপনার অ্যাপের ইন-অ্যাপ আপডেটগুলি পরীক্ষা করুন ।