این راهنما نحوه پشتیبانی از بهروزرسانیهای درون برنامهای در برنامه خود را با استفاده از 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 برای بررسی بهروزرسانی استفاده کنید:
MyClass.h
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.
}
}
MyClass.cpp
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 تماس بگیرید تا جریان به روز رسانی را درخواست کنید.
MyClass.h
void MyClass::OnStartUpdateOperationCompleted(EAppUpdateErrorCode ErrorCode)
{
// ...
}
MyClass.cpp
// .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 را فراخوانی کنید:
MyClass.h
void MyClass::OnCompleteUpdateOperationCompleted(EAppUpdateErrorCode ErrorCode)
{
// ...
}
MyClass.cpp
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 تماس بگیرید تا جریان بهروزرسانی را درخواست کنید.
MyClass.h
void MyClass::OnStartUpdateOperationCompleted(EAppUpdateErrorCode ErrorCode)
{
// ...
}
MyClass.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);
}
برای یک جریان بهروزرسانی فوری، Google Play یک گفتگوی تأیید کاربر را نمایش میدهد. هنگامی که کاربر درخواست را پذیرفت، Google Play به طور خودکار به روز رسانی را دانلود و نصب می کند، سپس در صورت موفقیت آمیز بودن نصب، برنامه را به نسخه به روز شده راه اندازی مجدد می کند.
رسیدگی به خطا
این بخش راه حل هایی را برای خطاهای رایج توضیح می دهد.
- اگر
UInAppUpdatesManager::StartUpdateیک خطایAppUpdate_INVALID_REQUESTبرگرداند، به این معنی است کهUAppUpdateInfoنامعتبر است. مطمئن شوید که شیUAppUpdateInfoکه ازUInAppUpdatesManager::RequestInfoبرگردانده شده است، قبل از شروع جریان به روز رسانی تهی نباشد. - اگر
UInAppUpdatesManager::StartUpdateخطایAppUpdate_NOT_ALLOWEDرا برمی گرداند، به این معنی است که شیUAppUpdateOptionsنوع به روز رسانی را نشان می دهد که برای به روز رسانی موجود مجاز نیست. بررسی کنید که آیا شیUAppUpdateInfoنشان می دهد که نوع به روز رسانی انتخاب شده قبل از شروع جریان به روز رسانی مجاز است یا خیر.
مراحل بعدی
بهروزرسانیهای درونبرنامهای را آزمایش کنید تا مطمئن شوید که ادغام شما به درستی کار میکند.