SdkSandboxManager
public final class SdkSandboxManager
extends Object
java.lang.object | |
↳ | android.app.sdksandbox.SdkSandboxManager |
APIهایی را برای بارگیری SDKs
در فرآیند جعبه SDK و سپس تعامل با آنها فراهم می کند.
SDK sandbox یک فرآیند جاوا است که در یک محدوده uid جداگانه اجرا می شود. هر برنامه ممکن است فرآیند SDK sandbox خود را داشته باشد.
برنامه ابتدا باید با استفاده از تگ <uses-sdk-library>
، SDK هایی را که به آن وابسته است در مانیفست خود اعلام کند. برنامهها فقط میتوانند SDKهایی را که به آنها وابسته هستند در جعبه SDK بارگیری کنند.
همچنین ببینید:
خلاصه
کلاس های تو در تو | |
---|---|
interface | SdkSandboxManager.SdkSandboxProcessDeathCallback پاسخ به تماس برای ردیابی رویدادها مرگ جعبه SDK. |
روش های عمومی | |
---|---|
void | addSdkSandboxProcessDeathCallback ( Executor callbackExecutor, SdkSandboxManager.SdkSandboxProcessDeathCallback callback) یک تماس برگشتی اضافه می کند که برای رویدادهای چرخه حیات SDK sandbox، مانند مرگ SDK sandbox ثبت می شود. |
void | addSyncedSharedPreferencesKeys ( Set < String > keys) کلیدهایی را به مجموعه کلیدهایی که از |
List < AppOwnedSdkSandboxInterface > | getAppOwnedSdkSandboxInterfaces () فهرستی از |
List < SandboxedSdk > | getSandboxedSdks () اطلاعات مربوط به SDKهایی را که در sandbox بارگیری شده اند واکشی می کند. |
static int | getSdkSandboxState () وضعیت فعلی در دسترس بودن ویژگی جعبه SDK را برمیگرداند. |
Set < String > | getSyncedSharedPreferencesKeys () کلیدهای تنظیمی را که از |
void | loadSdk ( String sdkName, Bundle params, Executor executor, OutcomeReceiver < SandboxedSdk , LoadSdkException > receiver) SDK را در فرآیند جاوا SDK sandbox بارگیری می کند. |
void | registerAppOwnedSdkSandboxInterface ( AppOwnedSdkSandboxInterface appOwnedSdkSandboxInterface) |
void | removeSdkSandboxProcessDeathCallback ( SdkSandboxManager.SdkSandboxProcessDeathCallback callback) یک |
void | removeSyncedSharedPreferencesKeys ( Set < String > keys) کلیدها را از مجموعه کلیدهایی که با استفاده از اگر کلیدهای حذف شده قبلاً همگامسازی شده باشند، از جعبه ایمنی SDK پاک میشوند. |
void | requestSurfacePackage ( String sdkName, Bundle params, Executor callbackExecutor, OutcomeReceiver < Bundle , RequestSurfacePackageException > receiver) درخواستی برای بسته سطحی به SDK ارسال می کند. |
void | startSdkSandboxActivity ( Activity fromActivity, IBinder sdkActivityToken) یک |
void | unloadSdk ( String sdkName) یک SDK را که قبلاً توسط تماس گیرنده بارگیری شده است، بارگیری می کند. |
void | unregisterAppOwnedSdkSandboxInterface ( String name) |
روش های ارثی | |
---|---|
ثابت ها
EXTRA_DISPLAY_ID
public static final String EXTRA_DISPLAY_ID
نام کلید مورد استفاده در فیلدهای Bundle requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
، مقدار آن باید شناسه عدد صحیح را مشخص کند. صفحه نمایش منطقی برای نمایش SurfacePackage
.
مقدار ثابت: "android.app.sdksandbox.extra.DISPLAY_ID"
EXTRA_HEIGHT_IN_PIXELS
public static final String EXTRA_HEIGHT_IN_PIXELS
نام کلید مورد استفاده در فیلدهای Bundle requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
، مقدار آن باید ارتفاع عدد صحیح را تعیین کند. SurfacePackage
بر حسب پیکسل.
مقدار ثابت: "android.app.sdksandbox.extra.HEIGHT_IN_PIXELS"
EXTRA_HOST_TOKEN
public static final String EXTRA_HOST_TOKEN
نام کلید مورد استفاده در فیلدهای Bundle requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
، مقدار آن باید نشانه بازگشتی توسط SurfaceView.getHostToken()
را نشان دهد. هنگامی که SurfaceView
به سلسله مراتب view اضافه شد، SurfaceView.getHostToken()
. فقط یک مقدار غیر تهی برای فعال کردن گزارش ANR پذیرفته می شود.
مقدار ثابت: "android.app.sdksandbox.extra.HOST_TOKEN"
EXTRA_SURFACE_PACKAGE
public static final String EXTRA_SURFACE_PACKAGE
نام کلید در Bundle که به تابع onResult
OutcomeReceiver
که فیلد requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
ارسال می شود، مقدار آن SurfacePackage
درخواستی را نشان می دهد.
مقدار ثابت: "android.app.sdksandbox.extra.SURFACE_PACKAGE"
EXTRA_WIDTH_IN_PIXELS
public static final String EXTRA_WIDTH_IN_PIXELS
نام کلید مورد استفاده در فیلدهای Bundle requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
، مقدار آن باید عرض عدد صحیح را مشخص کند. SurfacePackage
بر حسب پیکسل.
مقدار ثابت: "android.app.sdksandbox.extra.WIDTH_IN_PIXELS"
LOAD_SDK_ALREADY_LOADED
public static final int LOAD_SDK_ALREADY_LOADED
SDK قبلاً بارگیری شده است.
این نشان میدهد که برنامه کلاینت پس از بارگیری موفقیتآمیز با فراخوانی loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
سعی کرده است همان SDK را دوباره بارگیری کند.
مقدار ثابت: 101 (0x00000065)
LOAD_SDK_INTERNAL_ERROR
public static final int LOAD_SDK_INTERNAL_ERROR
خطای داخلی هنگام بارگیری SDK.
این نشان می دهد که یک خطای داخلی عمومی هنگام اعمال تماس از برنامه مشتری رخ داده است.
مقدار ثابت: 500 (0x000001f4)
LOAD_SDK_NOT_FOUND
public static final int LOAD_SDK_NOT_FOUND
SDK پیدا نشد.
این نشان میدهد که برنامه کلاینت با فراخوانی loadSdk(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
سعی کرده است یک SDK موجود را بارگیری کند.
مقدار ثابت: 100 (0x00000064)
LOAD_SDK_SDK_DEFINED_ERROR
public static final int LOAD_SDK_SDK_DEFINED_ERROR
خطای SDK پس از بارگیری.
این نشان می دهد که SDK در حین مقداردهی اولیه پس از بارگذاری با خطا مواجه شده است. جزئیات این مورد را می توان از بسته بازگردانده شده در LoadSdkException
از طریق OutcomeReceiver
که به SdkSandboxManager#loadSdk
ارسال شده است، بدست آورد.
مقدار ثابت: 102 (0x00000066)
LOAD_SDK_SDK_SANDBOX_DISABLED
public static final int LOAD_SDK_SDK_SANDBOX_DISABLED
جعبه ایمنی SDK غیرفعال است.
این نشان می دهد که جعبه SDK غیرفعال است. هر گونه تلاش بعدی برای بارگیری SDK در این بوت نیز با شکست مواجه خواهد شد.
مقدار ثابت: 103 (0x00000067)
REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
public static final int REQUEST_SURFACE_PACKAGE_INTERNAL_ERROR
خطای داخلی هنگام درخواست SurfacePackage
.
این نشان می دهد که یک خطای داخلی عمومی هنگام درخواست SurfacePackage
رخ داده است.
مقدار ثابت: 700 (0x000002bc)
REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED
public static final int REQUEST_SURFACE_PACKAGE_SDK_NOT_LOADED
هنگام درخواست SurfacePackage
، SDK بارگیری نمی شود.
این نشان میدهد که SDK که SurfacePackage
برای آن درخواست میشود، بارگیری نمیشود، یا به این دلیل که sandbox از بین رفته یا به دلیل اینکه از ابتدا بارگیری نشده است.
مقدار ثابت: 701 (0x000002bd)
SDK_SANDBOX_PROCESS_NOT_AVAILABLE
public static final int SDK_SANDBOX_PROCESS_NOT_AVAILABLE
فرآیند جعبه ایمنی SDK در دسترس نیست.
این نشان میدهد که فرآیند sandbox SDK در دسترس نیست، یا به این دلیل که در وهله اول از بین رفته، قطع شده یا ایجاد نشده است.
مقدار ثابت: 503 (0x000001f7)
SDK_SANDBOX_SERVICE
public static final String SDK_SANDBOX_SERVICE
از Context#getSystemService(String)
برای بازیابی SdkSandboxManager
برای تعامل با SDK های متعلق به این برنامه مشتری استفاده کنید.
مقدار ثابت: "sdk_sandbox"
SDK_SANDBOX_STATE_DISABLED
public static final int SDK_SANDBOX_STATE_DISABLED
جعبه ایمنی SDK غیرفعال است.
APIهای SdkSandboxManager
پنهان هستند. تلاش برای فراخوانی آنها منجر به UnsupportedOperationException
می شود.
مقدار ثابت: 0 (0x00000000)
SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
public static final int SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION
جعبه ایمنی SDK فعال است.
برنامه میتواند از APIهای SdkSandboxManager
برای بارگیری SDKs
استفاده کند که بستگی به فرآیند جعبه SDK مربوطه دارد.
مقدار ثابت: 2 (0x00000002)
روش های عمومی
addSdkSandboxProcessDeathCallback
public void addSdkSandboxProcessDeathCallback (Executor callbackExecutor, SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
یک تماس برگشتی اضافه می کند که برای رویدادهای چرخه حیات SDK sandbox، مانند مرگ SDK sandbox ثبت می شود. اگر در هنگام فراخوانی جعبه شنی هنوز ایجاد نشده باشد، درخواست تا زمانی که یک جعبه شنی ایجاد شود ذخیره میشود و در این مرحله برای آن جعبه ماسهبازی فعال میشود. برای تشخیص مرگ میتوان چند تماس برگشتی اضافه کرد و با از بین رفتن جعبه شنی حذف نمیشوند.
پارامترها | |
---|---|
callbackExecutor | Executor : Executor که در آن فراخوانی برگشتی فراخوانی می شود این مقدار نمی تواند null باشد . رویدادهای پاسخ به تماس و شنونده از طریق این Executor ارسال میشوند و راهی آسان برای کنترل رشته مورد استفاده ارائه میدهند. برای ارسال رویدادها از طریق رشته اصلی برنامه خود، می توانید از Context.getMainExecutor() استفاده کنید. در غیر این صورت، یک Executor ارائه دهید که به یک موضوع مناسب ارسال می کند. |
callback | SdkSandboxManager.SdkSandboxProcessDeathCallback : SdkSandboxProcessDeathCallback که رویدادهای چرخه حیات SDK sandbox را دریافت خواهد کرد. این مقدار نمی تواند null باشد. |
addSyncedSharedPreferencesKeys
public void addSyncedSharedPreferencesKeys (Set<String> keys)
کلیدهایی را به مجموعه کلیدهایی که از SharedPreferences
پیشفرض برنامه به جعبه SDK همگامسازی میشوند، اضافه میکند.
دادههای همگامسازی شده برای خواندن SDK با استفاده از API SdkSandboxController.getClientSharedPreferences()
در دسترس خواهد بود.
برای توقف همگامسازی هر کلیدی که با استفاده از این API اضافه شده است، از removeSyncedSharedPreferencesKeys(java.util.Set)
استفاده کنید.
در صورت راه اندازی مجدد برنامه، همگام سازی قطع می شود و کاربر باید دوباره با این API تماس بگیرد تا مجموعه کلیدهای همگام سازی را بازسازی کند.
توجه: این کلاس از استفاده در چندین فرآیند پشتیبانی نمی کند.
پارامترها | |
---|---|
keys | Set : مجموعه ای از کلیدهایی که با Sandbox همگام می شوند. این مقدار نمی تواند null باشد. |
رابط های getAppOwnedSdkSandbox
public List<AppOwnedSdkSandboxInterface> getAppOwnedSdkSandboxInterfaces ()
فهرستی از AppOwnedSdkSandboxInterface
ثبت شده برای یک برنامه را واکشی می کند
برمی گرداند | |
---|---|
List < AppOwnedSdkSandboxInterface > | لیست خالی اگر callingInfo در نقشه یافت نشد، در غیر این صورت لیستی از AppOwnedSdkSandboxInterface این مقدار نمی تواند null باشد. |
getSandboxedSdks
public List<SandboxedSdk> getSandboxedSdks ()
اطلاعات مربوط به SDKهایی را که در sandbox بارگیری شده اند واکشی می کند.
برمی گرداند | |
---|---|
List < SandboxedSdk > | فهرست SandboxedSdk حاوی همه SDK های بارگیری شده در حال حاضر. این مقدار نمی تواند null باشد. |
getSdkSandboxState
public static int getSdkSandboxState ()
وضعیت فعلی در دسترس بودن ویژگی جعبه SDK را برمیگرداند.
برمی گرداند | |
---|---|
int | مقدار SDK_SANDBOX_STATE_DISABLED یا SDK_SANDBOX_STATE_ENABLED_PROCESS_ISOLATION است |
getSyncedSharedPreferencesKeys
public Set<String> getSyncedSharedPreferencesKeys ()
کلیدهای تنظیمی را که از SharedPreferences
پیشفرض برنامه در حال همگامسازی هستند به جعبه ایمنی SDK برمیگرداند.
برمی گرداند | |
---|---|
Set < String > | این مقدار نمی تواند null باشد. |
loadSdk
public void loadSdk (String sdkName, Bundle params, Executor executor, OutcomeReceiver<SandboxedSdk, LoadSdkException> receiver)
SDK را در فرآیند جاوا SDK sandbox بارگیری می کند.
کتابخانه SDK را با sdkName
به صورت ناهمزمان در فرآیند جعبه SDK بارگیری می کند. تماس گیرنده از طریق receiver
مطلع خواهد شد.
تماسگیرنده قبلاً باید SDKs
که به آن وابسته است در مانیفست خود با استفاده از تگ <uses-sdk-library>
اعلام کند. تماسگیرنده فقط میتواند SDKs
که به آنها بستگی دارد در جعبه ایمنی SDK بارگیری کند.
هنگامی که برنامه سرویس گیرنده اولین SDK را بارگیری می کند، یک فرآیند Sandbox SDK جدید ایجاد می شود. اگر قبلاً یک جعبه ایمنی برای برنامه سرویس گیرنده ایجاد شده باشد، SDK های اضافی در همان جعبه ایمنی بارگیری می شوند.
این API ممکن است فقط زمانی فراخوانی شود که تماس گیرنده در پیش زمینه در حال اجرا است. تماسهای پسزمینه منجر به بازگشت LoadSdkException
در receiver
میشود.
پارامترها | |
---|---|
sdkName | String : نام SDK که باید بارگیری شود. این مقدار نمی تواند null باشد. |
params | Bundle : پارامترهای اضافی که باید در قالب یک Bundle به SDK منتقل شوند که بین مشتری و SDK توافق شده است. این مقدار نمی تواند null باشد. |
executor | Executor : Executor که بر روی آن گیرنده فراخوانی می شود. این مقدار نمی تواند null باشد. رویدادهای پاسخ به تماس و شنونده از طریق این Executor ارسال میشوند و راهی آسان برای کنترل رشته مورد استفاده ارائه میدهند. برای ارسال رویدادها از طریق رشته اصلی برنامه خود، می توانید از Context.getMainExecutor() استفاده کنید. در غیر این صورت، یک Executor ارائه دهید که به یک موضوع مناسب ارسال می کند. |
receiver | OutcomeReceiver : این یا یک SandboxedSdk در اجرای موفقیت آمیز دریافت می کند، یا LoadSdkException . این مقدار نمی تواند null باشد. |
registerAppOwnedSdkSandboxInterface
public void registerAppOwnedSdkSandboxInterface (AppOwnedSdkSandboxInterface appOwnedSdkSandboxInterface)
AppOwnedSdkSandboxInterface
را برای فرآیند برنامه ثبت می کند.
ثبت یک AppOwnedSdkSandboxInterface
که همان نام رابط ثبت شده قبلی را دارد، منجر به IllegalStateException
می شود.
AppOwnedSdkSandboxInterface#getName()
به نام رابط اشاره دارد.
پارامترها | |
---|---|
appOwnedSdkSandboxInterface | AppOwnedSdkSandboxInterface : AppOwnedSdkSandboxInterface که باید ثبت شود این مقدار نمی تواند null باشد. |
removeSdkSandboxProcessDeathCallback
public void removeSdkSandboxProcessDeathCallback (SdkSandboxManager.SdkSandboxProcessDeathCallback callback)
یک SdkSandboxProcessDeathCallback
را که قبلاً با استفاده از addSdkSandboxProcessDeathCallback(java.util.concurrent.Executor, android.app.sdksandbox.SdkSandboxManager.SdkSandboxProcessDeathCallback)
پارامترها | |
---|---|
callback | SdkSandboxManager.SdkSandboxProcessDeathCallback : SdkSandboxProcessDeathCallback که قبلاً با استفاده از SdkSandboxManager#addSdkSandboxProcessDeathCallback(Executor, SdkSandboxProcessDeathCallback) این مقدار نمی تواند null باشد. |
removeSyncedSharedPreferencesKeys
public void removeSyncedSharedPreferencesKeys (Set<String> keys)
کلیدها را از مجموعه کلیدهایی که با استفاده از addSyncedSharedPreferencesKeys(java.util.Set)
اضافه شده اند حذف می کند.
اگر کلیدهای حذف شده قبلاً همگامسازی شده باشند، از جعبه ایمنی SDK پاک میشوند.
پارامترها | |
---|---|
keys | Set : مجموعه ای از نام های کلیدی که دیگر نباید با Sandbox همگام شوند. این مقدار نمی تواند null باشد. |
درخواست SurfacePackage
public void requestSurfacePackage (String sdkName, Bundle params, Executor callbackExecutor, OutcomeReceiver<Bundle, RequestSurfacePackageException> receiver)
درخواستی برای بسته سطحی به SDK ارسال می کند.
پس از اینکه برنامه کلاینت سیگنالی در مورد بارگیری موفقیت آمیز SDK دریافت کرد و یک SurfaceView
به سلسله مراتب view اضافه کرد، ممکن است به صورت ناهمزمان یک SurfacePackage
برای ارائه یک نمای از SDK درخواست کند.
هنگامی که SurfacePackage
آماده شد، فراخوانی OutcomeReceiver#onResult
receiver
ارسال شده فراخوانی می شود. این فراخوانی حاوی یک شی Bundle
است که حاوی کلید SdkSandboxManager#EXTRA_SURFACE_PACKAGE
که مقدار مرتبط آن SurfacePackage
درخواستی است.
params
ارسال شده باید حاوی کلیدهای زیر باشند: EXTRA_WIDTH_IN_PIXELS
، SdkSandboxManager#EXTRA_HEIGHT_IN_PIXELS
، SdkSandboxManager#EXTRA_DISPLAY_ID
و SdkSandboxManager#EXTRA_HOST_TOKEN
. اگر هر یک از این کلیدها مفقود یا نامعتبر باشد، یک IllegalArgumentException
پرتاب می شود.
این API ممکن است فقط زمانی فراخوانی شود که تماس گیرنده در پیش زمینه در حال اجرا است. تماسهای پسزمینه منجر به بازگشت RequestSurfacePackageException در receiver
میشود.
پارامترها | |
---|---|
sdkName | String : نام SDK بارگیری شده در جعبه SDK. این مقدار نمی تواند null باشد. |
params | Bundle : پارامترهایی که برنامه کلاینت به SDK منتقل می کند. این مقدار نمی تواند null باشد. |
callbackExecutor | Executor : Executor که در آن فراخوانی برگشتی فراخوانی می شود این مقدار نمی تواند null باشد . رویدادهای پاسخ به تماس و شنونده از طریق این Executor ارسال میشوند و راهی آسان برای کنترل رشته مورد استفاده ارائه میدهند. برای ارسال رویدادها از طریق رشته اصلی برنامه خود، می توانید از Context.getMainExecutor() استفاده کنید. در غیر این صورت، یک Executor ارائه دهید که به یک موضوع مناسب ارسال می کند. |
receiver | OutcomeReceiver : این یا یک Bundle را در صورت موفقیت برمی گرداند که حاوی کلید SdkSandboxManager#EXTRA_SURFACE_PACKAGE با مقدار SurfacePackage یا RequestSurfacePackageException در صورت شکست است. این مقدار نمی تواند null باشد. |
پرتاب می کند | |
---|---|
IllegalArgumentException | اگر params شامل تمام کلیدهای مورد نیاز نباشد. |
startSdkSandboxActivity
public void startSdkSandboxActivity (Activity fromActivity, IBinder sdkActivityToken)
یک Activity
در جعبه ایمنی SDK شروع می کند.
این تابع یک Activity
جدید را در همان وظیفه از fromActivity
ارسال شده شروع میکند و آن را به SDK که sdkActivityToken
تصویب شده را به اشتراک گذاشته است، ارسال میکند که درخواستی از آن SDK برای بیان این Activity
شناسایی میکند.
Activity
در موارد زیر شروع نمی شود:
- برنامه ای که این API را فراخوانی می کند در پس زمینه است.
-
sdkActivityToken
ارسال شده به درخواست یکActivity
از SDK که آن را با برنامه تماس گیرنده به اشتراک گذاشته است، نگاشت نمی شود. - SDK که
sdkActivityToken
تصویب شده را به اشتراک گذاشت، درخواست خود را برای اینActivity
حذف کرد. -
Activity
sandbox قبلا ایجاد شده است.
پارامترها | |
---|---|
fromActivity | Activity : از Activity برای شروع Activity sandbox جدید با فراخوانی Activity#startActivity(Intent) در مقابل آن استفاده میشود. این مقدار نمی تواند null باشد. |
sdkActivityToken | IBinder : شناسه ای که توسط SDK که Activity را درخواست می کند به اشتراک گذاشته می شود. این مقدار نمی تواند null باشد. |
unloadSdk
public void unloadSdk (String sdkName)
یک SDK را که قبلاً توسط تماس گیرنده بارگیری شده است، بارگیری می کند.
تضمینی وجود ندارد که حافظه اختصاص داده شده برای این SDK بلافاصله آزاد شود. همه تماسهای بعدی به requestSurfacePackage(java.lang.String, android.os.Bundle, java.util.concurrent.Executor, android.os.OutcomeReceiver)
برای sdkName
داده شده با شکست مواجه میشوند.
این API ممکن است فقط زمانی فراخوانی شود که تماس گیرنده در پیش زمینه در حال اجرا است. تماسها از پسزمینه منجر به ایجاد یک SecurityException
میشوند.
پارامترها | |
---|---|
sdkName | String : نام SDK که باید بارگیری شود. این مقدار نمی تواند null باشد. |
unregisterAppOwnedSdkSandboxInterface
public void unregisterAppOwnedSdkSandboxInterface (String name)
ERROR(/AppOwnedSdkSandboxInterfaces)
را برای فرآیند برنامه لغو ثبت می کند.
پارامترها | |
---|---|
name | String : نامی که AppOwnedSdkSandboxInterface تحت آن ثبت شده است. این مقدار نمی تواند null باشد. |
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2024-11-12 بهوقت ساعت هماهنگ جهانی.