অ্যাপ-মধ্যস্থ আপডেট সমর্থন করুন (ইউনিটি)

এই নির্দেশিকাটি বর্ণনা করে যে কীভাবে ইউনিটি ব্যবহার করে আপনার অ্যাপে অ্যাপ-মধ্যস্থ আপডেট সমর্থন করবেন। যে ক্ষেত্রে আপনার বাস্তবায়ন কোটলিন প্রোগ্রামিং ভাষা বা জাভা প্রোগ্রামিং ভাষা ব্যবহার করে, এবং যেখানে আপনার বাস্তবায়ন নেটিভ কোড (C/C++) ব্যবহার করে তার জন্য আলাদা নির্দেশিকা রয়েছে।

আপনার উন্নয়ন পরিবেশ সেট আপ করুন

ইউনিটির জন্য Google প্যাকেজগুলি থেকে প্লে ইন-অ্যাপ আপডেট ইউনিটি প্লাগইন-এর সর্বশেষ রিলিজটি ডাউনলোড করুন।

ইউনিটি SDK ওভারভিউ

প্লে ইন-অ্যাপ আপডেট API হল Play Core SDK পরিবারের অংশ। ইউনিটি প্লাগইন আপনার অ্যাপ এবং প্লে API-এর মধ্যে যোগাযোগ পরিচালনা করতে একটি AppUpdateManager ক্লাস অফার করে। অ্যাপ-মধ্যস্থ আপডেটগুলি পরিচালনা করতে এটি ব্যবহার করার আগে আপনাকে অবশ্যই এই ক্লাসটি ইনস্ট্যান্টিয়েট করতে হবে:

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 উদাহরণে আপডেট উপলব্ধতার স্থিতি রয়েছে। যদি একটি ইন-অ্যাপ আপডেট ইতিমধ্যেই প্রগতিতে থাকে, তাহলে ইনস্ট্যান্সটি ইন-প্রোগ্রেস আপডেটের অবস্থাও রিপোর্ট করে।

আপডেট অচলতা পরীক্ষা করুন

একটি আপডেট উপলব্ধ কিনা তা পরীক্ষা করার পাশাপাশি, আপনি প্লে স্টোরের মাধ্যমে ব্যবহারকারীকে সর্বশেষ আপডেটের বিষয়ে জানানোর পর থেকে কত সময় অতিবাহিত হয়েছে তাও পরীক্ষা করতে চাইতে পারেন। এটি আপনাকে সিদ্ধান্ত নিতে সাহায্য করতে পারে যে আপনি একটি নমনীয় আপডেট শুরু করবেন নাকি অবিলম্বে আপডেট করবেন। উদাহরণস্বরূপ, আপনি একটি নমনীয় আপডেটের সাথে ব্যবহারকারীকে অবহিত করার আগে কয়েক দিন অপেক্ষা করতে পারেন, এবং তার কয়েকদিন পরে একটি তাত্ক্ষণিক আপডেটের প্রয়োজন হওয়ার আগে।

প্লে স্টোরের মাধ্যমে আপডেটটি উপলব্ধ হওয়ার পর থেকে কত দিনের সংখ্যা পরীক্ষা করতে ClientVersionStalenessDays ব্যবহার করুন:

var stalenessDays = appUpdateInfoOperation.ClientVersionStalenessDays;

আপডেট অগ্রাধিকার চেক করুন

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 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 অবজেক্টটি নির্দেশ করে যে নির্বাচিত আপডেট প্রকারটি অনুমোদিত কিনা তা পরীক্ষা করুন।

পরবর্তী পদক্ষেপ

আপনার ইন্টিগ্রেশন সঠিকভাবে কাজ করছে কিনা তা যাচাই করতে আপনার অ্যাপের ইন-অ্যাপ আপডেট পরীক্ষা করুন