این راهنما نحوه پشتیبانی از بهروزرسانیهای درون برنامهای در برنامه خود را با استفاده از Unreal Engine توضیح میدهد. راهنماهای جداگانه ای برای مواردی وجود دارد که پیاده سازی شما از زبان برنامه نویسی Kotlin یا زبان برنامه نویسی جاوا استفاده می کند و مواردی که پیاده سازی شما از کد بومی (C/C++) یا Unity استفاده می کند.
نمای کلی Unreal Engine SDK
Play In-App Updates API بخشی از خانواده Play Core SDK است. API برای Unreal Engine یک کلاس UInAppUpdatesManager
برای مدیریت ارتباط بین برنامه شما و Play API ارائه می دهد. پس از درخواست، برنامه شما میتواند وضعیت درخواست را با استفاده از EAppUpdateErrorCode
بررسی کند.
پشتیبانی از نسخه های Unreal Engine
این افزونه از Unreal Engine 5.0 و تمامی نسخه های بعدی پشتیبانی می کند.
محیط توسعه خود را تنظیم کنید
راه اندازی
افزونه Play Unreal Engine را از مخزن GitHub دانلود کنید.
پوشه
GooglePlay
را در داخل پوشهPlugins
خود در پروژه Unreal Engine خود کپی کنید.پروژه Unreal Engine خود را باز کنید و روی Edit → Plugins کلیک کنید.
Google Play را جستجو کنید و چک باکس Enabled را علامت بزنید.
پروژه بازی را دوباره راه اندازی کنید و یک ساخت را راه اندازی کنید.
فایل
Build.cs
پروژه خود را باز کنید و ماژولPlayInAppUpdates
را بهPublicDependencyModuleNames
اضافه کنید:using UnrealBuildTool; public class MyGame : ModuleRules { public MyGame(ReadOnlyTargetRules Target) : base(Target) { // ... PublicDependencyModuleNames.Add("PlayInAppUpdates"); // ... } }
در دسترس بودن بهروزرسانی را بررسی کنید
قبل از درخواست بهروزرسانی، بررسی کنید که آیا بهروزرسانی برای برنامه شما موجود است یا خیر. از UInAppUpdatesManager::RequestInfo
برای بررسی بهروزرسانی استفاده کنید:
void MyClass::OnRequestInfoOperationCompleted(
EAppUpdateErrorCode ErrorCode,
UAppUpdateInfo* UpdateInfo)
{
// Check the resulting error code.
if (ErrorCode == EAppUpdateErrorCode::AppUpdate_NO_ERROR)
{
// Check AppUpdateInfo's UpdateAvailability, UpdatePriority,
// IsUpdateTypeAllowed(), ... and decide whether to ask the user
// to start an in-app update.
}
}
void MyClass::CheckForUpdateAvailability()
{
// Create a delegate to bind the callback function.
FRequestInfoOperationCompletedDelegate Delegate;
// Bind the completion handler (OnRequestInfoOperationCompleted) to the delegate.
Delegate.BindDynamic(this, &MyClass::OnRequestInfoOperationCompleted);
// Initiate the request info operation, passing the delegate to handle the result.
GetGameInstance()
->GetSubsystem<UInAppUpdatesManager>()
->RequestInfo(Delegate);
}
نمونه UAppUpdateInfo
برگشتی حاوی وضعیت در دسترس بودن بهروزرسانی است. اگر یک بهروزرسانی درونبرنامه از قبل در حال انجام است، نمونه وضعیت بهروزرسانی در حال انجام را نیز گزارش میکند.
بیات بودن بهروزرسانی را بررسی کنید
علاوه بر بررسی اینکه آیا یک بهروزرسانی در دسترس است، ممکن است بخواهید بررسی کنید که از آخرین باری که کاربر از یک بهروزرسانی از طریق فروشگاه Play اطلاع داده شده است، چقدر زمان گذشته است. این می تواند به شما کمک کند تصمیم بگیرید که آیا باید یک به روز رسانی انعطاف پذیر را شروع کنید یا یک به روز رسانی فوری. برای مثال، ممکن است چند روز قبل از اطلاع دادن به کاربر با یک بهروزرسانی انعطافپذیر، و چند روز پس از آن قبل از نیاز به بهروزرسانی فوری صبر کنید.
از UAppUpdateInfo:GetClientVersionStalenessDays
برای بررسی تعداد روزهایی که بهروزرسانی از طریق فروشگاه Play در دسترس قرار گرفته است، استفاده کنید:
int32 ClientVersionStalenessDays = UpdateInfo->GetClientVersionStalenessDays();
اولویت بهروزرسانی را بررسی کنید
Google Play Developer API به شما امکان می دهد اولویت هر به روز رسانی را تعیین کنید. این به برنامه شما اجازه میدهد تصمیم بگیرد که چقدر بهروزرسانی بهطور جدی به کاربر توصیه کند. برای مثال، استراتژی زیر را برای تنظیم اولویت بهروزرسانی در نظر بگیرید:
- بهبودهای جزئی رابط کاربری: به روز رسانی با اولویت پایین . نه بهروزرسانی انعطافپذیر و نه بهروزرسانی فوری را درخواست کنید.
- بهبود عملکرد: به روز رسانی با اولویت متوسط . درخواست به روز رسانی انعطاف پذیر
- به روز رسانی امنیتی حیاتی: به روز رسانی با اولویت بالا . درخواست به روز رسانی فوری
برای تعیین اولویت، گوگل پلی از یک عدد صحیح بین 0 تا 5 استفاده می کند که 0 به عنوان پیش فرض و 5 بالاترین اولویت است. برای تنظیم اولویت برای بهروزرسانی، از فیلد inAppUpdatePriority
زیر Edits.tracks.releases
در Google Play Developer API استفاده کنید. تمامی نسخه های جدید اضافه شده در نسخه دارای اولویت یکسان با نسخه هستند. اولویت را فقط می توان در هنگام عرضه نسخه جدید تنظیم کرد و بعداً نمی توان آن را تغییر داد.
همانطور که در مستندات Play Developer API توضیح داده شده است، اولویت را با استفاده از Google Play Developer API تنظیم کنید. اولویت بهروزرسانی درونبرنامه باید در منبع Edit.tracks
که در روش Edit.tracks: update
ارسال شده است، مشخص شود. مثال زیر انتشار یک برنامه با کد نسخه 88 و inAppUpdatePriority
5 را نشان می دهد:
{ "releases": [{ "versionCodes": ["88"], "inAppUpdatePriority": 5, "status": "completed" }] }
در کد برنامهتان، میتوانید با استفاده از UAppUpdateInfo::UpdatePriority
سطح اولویت یک بهروزرسانی را بررسی کنید:
int32 Priority = UpdateInfo->GetPriority();
یک به روز رسانی را شروع کنید
پس از تأیید وجود بهروزرسانی، میتوانید با استفاده از UInAppUpdatesManager::StartUpdate
درخواست بهروزرسانی کنید. قبل از درخواست بهروزرسانی، مطمئن شوید که یک شی UAppUpdateInfo
بهروز دارید. همچنین باید یک شی UAppUpdateOptions
برای پیکربندی جریان به روز رسانی ایجاد کنید.
مثال زیر یک شی UAppUpdateOptions
را برای یک جریان به روز رسانی فوری ایجاد می کند:
// Creates an UAppUpdateOptions defining an immediate in-app
// update flow and its parameters.
UAppUpdateOptions* Options = NewObject<UAppUpdateOptions>();
Options->CreateOptions(EAppUpdateType::AppUpdate_TYPE_IMMEDIATE);
مثال زیر یک شی UAppUpdateOptions
را برای یک جریان به روز رسانی انعطاف پذیر ایجاد می کند:
// Creates an UAppUpdateOptions defining a flexible in-app
// update flow and its parameters.
UAppUpdateOptions* Options = NewObject<UAppUpdateOptions>();
Options->CreateOptions(EAppUpdateType::AppUpdate_TYPE_FLEXIBLE);
شی UAppUpdateOptions
همچنین حاوی یک تابع IsAssetPackDeletionAllowed
است که نشان می دهد آیا به روز رسانی مجاز به پاک کردن بسته های دارایی در صورت محدودیت فضای ذخیره سازی دستگاه است یا خیر. این فیلد به طور پیشفرض روی false
تنظیم شده است، اما میتوانید با استفاده از UAppUpdateOptions::SetAssetPackDeletionAllowed
فیلد را روی true
تنظیم کنید:
// Sets the AssetPackDeletionAllowed field to true.
Options->SetAssetPackDeletionAllowed(true);
مراحل بعدی بستگی به این دارد که آیا درخواست بهروزرسانی انعطافپذیر دارید یا بهروزرسانی فوری .
به روز رسانی انعطاف پذیر را مدیریت کنید
بعد از اینکه یک شی UAppUpdateInfo
به روز و یک شی UAppUpdateOptions
با پیکربندی مناسب داشتید، می توانید با UInAppUpdatesManager::StartUpdate
تماس بگیرید تا جریان به روز رسانی را درخواست کنید.
void MyClass::OnStartUpdateOperationCompleted(EAppUpdateErrorCode ErrorCode)
{
// ...
}
// .cpp
void MyClass::StartUpdate()
{
// Create a delegate to bind the callback function.
FUpdateOperationCompletedDelegate Delegate;
// Bind the completion handler (OnStartUpdateOperationCompleted) to the delegate.
Delegate.BindDynamic(this, &MyClass::OnStartUpdateOperationCompleted);
// Initiate the start update operation, passing the delegate to handle the result.
GetGameInstance()
->GetSubsystem<UInAppUpdatesManager>()
->StartUpdate(UpdateInfo, UpdateOptions, Delegate);
}
برای یک جریان بهروزرسانی انعطافپذیر، باید پس از اتمام موفقیتآمیز دانلود، نصب بهروزرسانی برنامه را آغاز کنید. برای انجام این کار، همانطور که در مثال زیر نشان داده شده است، InAppUpdatesManager::CompleteUpdate
را فراخوانی کنید:
void MyClass::OnCompleteUpdateOperationCompleted(EAppUpdateErrorCode ErrorCode)
{
// ...
}
void MyClass::CompleteFlexibleUpdate()
{
// Create a delegate to bind the callback function.
FUpdateOperationCompletedDelegate Delegate;
// Bind the completion handler (OnCompleteUpdateOperationCompleted) to the delegate.
Delegate.BindDynamic(this, &MyClass::OnCompleteUpdateOperationCompleted);
// Initiate the complete update operation, passing the delegate to handle the result.
GetGameInstance()
->GetSubsystem<UInAppUpdatesManager>()
->CompleteUpdate(UpdateInfo, UpdateOptions, Delegate);
}
به روز رسانی فوری را مدیریت کنید
بعد از اینکه یک شی UAppUpdateInfo
بهروز و یک شی UAppUpdateOptions
با پیکربندی مناسب داشتید، میتوانید با InAppUpdatesManager::StartUpdate
تماس بگیرید تا جریان بهروزرسانی را درخواست کنید.
void MyClass::OnStartUpdateOperationCompleted(EAppUpdateErrorCode ErrorCode)
{
// ...
}
void MyClass::StartUpdate()
{
// Create a delegate to bind the callback function.
FUpdateOperationCompletedDelegate Delegate;
// Bind the completion handler (OnStartUpdateOperationCompleted) to the delegate.
Delegate.BindDynamic(this, &MyClass::OnStartUpdateOperationCompleted);
// Initiate the start update operation, passing the delegate to handle the result.
GetGameInstance()
->GetSubsystem<UInAppUpdatesManager>()
->StartUpdate(UpdateInfo, UpdateOptions, Delegate);
}
برای یک جریان بهروزرسانی فوری، Google Play یک گفتگوی تأیید کاربر را نمایش میدهد. هنگامی که کاربر درخواست را پذیرفت، Google Play به طور خودکار به روز رسانی را دانلود و نصب می کند، سپس در صورت موفقیت آمیز بودن نصب، برنامه را به نسخه به روز شده راه اندازی مجدد می کند.
رسیدگی به خطا
این بخش راه حل هایی را برای خطاهای رایج توضیح می دهد.
- اگر
UInAppUpdatesManager::StartUpdate
یک خطایAppUpdate_INVALID_REQUEST
برگرداند، به این معنی است کهUAppUpdateInfo
نامعتبر است. مطمئن شوید که شیUAppUpdateInfo
که ازUInAppUpdatesManager::RequestInfo
برگردانده شده است، قبل از شروع جریان به روز رسانی تهی نباشد. - اگر
UInAppUpdatesManager::StartUpdate
خطایAppUpdate_NOT_ALLOWED
را برمی گرداند، به این معنی است که شیUAppUpdateOptions
نوع به روز رسانی را نشان می دهد که برای به روز رسانی موجود مجاز نیست. بررسی کنید که آیا شیUAppUpdateInfo
نشان می دهد که نوع به روز رسانی انتخاب شده قبل از شروع جریان به روز رسانی مجاز است یا خیر.
مراحل بعدی
بهروزرسانیهای درونبرنامهای را آزمایش کنید تا مطمئن شوید که ادغام شما به درستی کار میکند.