مفاهیم کلیدی | محیط توسعه خود را تنظیم کنید | یک RE SDK بسازید | RE SDK را مصرف کنید | آزمایش و ساخت برای توزیع |
مفاهیم کلیدی | محیط توسعه خود را تنظیم کنید | یک RE SDK بسازید | RE SDK را مصرف کنید | آزمایش و ساخت برای توزیع |
SDK فعال با زمان اجرا را مصرف کنید
این بخش نحوه تعامل کلاینتها را با APIهای SDK فعال شده در زمان اجرا (RE) توضیح میدهد.
در مورد این راهنما، ما به ماژول SDK موجود شما (یا SDK آگاه از زمان اجرا) به عنوان مشتری اشاره می کنیم.
اگر میخواهید SDK با زمان اجرا را مستقیماً به برنامه خود وارد کنید، ماژول برنامه مشتری است.
SDK فعال با زمان اجرا را بارگیری کنید
اولین کاری که میخواهید در SDK آگاه از زمان اجرا یا برنامه کلاینت خود انجام دهید، بارگیری SDK فعال با زمان اجرا است.
کلاس SdkSandboxManager
به بارگیری SDK های فعال در زمان اجرا کمک می کند و یک کلاس IBinder
را برمی گرداند که SDK آگاه از زمان اجرا می تواند به رابط اعلام شده در SDK فعال با زمان اجرا متصل شود.
باید اطمینان حاصل کنید که هر SDK فعال در زمان اجرا را فقط یک بار بارگیری می کنید، در غیر این صورت مدیر SDK یک استثنا را برمی گرداند.
ابزارهای تولید شیم کلاسهای کمکی را برای تبدیل رابط IBinder
بازگردانده شده توسط SdkSandboxManager
به رابط API SDK اعلام شده تولید میکنند.
ابزارها از رابط مشروح شده با @PrivacySandboxService
برای ایجاد کلاس *Factory
استفاده می کنند.
این کلاس حاوی یک تابع wrapTo*
استاتیک است که یک شی IBinder
را به نمونه ای از رابط SDK فعال با زمان اجرا تبدیل می کند.
SDK آگاه از زمان اجرا شما می تواند با استفاده از این رابط با SDK فعال در زمان اجرا ارتباط برقرار کند و API های SDK را که در مرحله قبل اعلام کرده اید فراخوانی کند.
// Name of the SDK to be loaded, defined in your ASB module
private const val SDK_NAME = "com.example.sdk"
try {
// SdkSandboxManagerCompat is used to communicate with the sandbox and load SDKs with backward compatibility.
val sandboxManagerCompat = SdkSandboxManagerCompat.from(context)
val sandboxedSdk = sandboxManagerCompat.loadSdk(SDK_NAME, Bundle.EMPTY)
val mySdk = MySdkFactory.wrapToMySdk(sandboxedSdk.getInterface()!!)
} catch (e: LoadSdkCompatException) {
Log.e(TAG, "Failed to load SDK, error code: ${e.loadSdkErrorCode}", e)
return null
}
استفاده از کتابخانه UI
اگر میخواهید از کتابخانه UI برای نمایش تبلیغات استفاده کنید، مطمئن شوید که androidx.privacysandbox.ui:ui-core
و androidx.privacysandbox.ui:ui-client
به وابستگیهای موجود در build.gradle SDK آگاه از زمان اجرا اضافه کردهاید. .
یک بنر تبلیغاتی را با استفاده از SandboxedSdkView بارگیری کنید
androidx.privacysandbox.ui:ui-client
یک ViewGroup
جدید به نام SandboxedSdkView
را برای میزبانی UI ایجاد شده توسط یک SDK فعال با زمان اجرا معرفی می کند.
setAdapter()
جلسه ای را با SDK فعال در زمان اجرا باز می کند تا نمای تبلیغات و اعلان های تغییرات UI را دریافت کند. وقتی SDK جلسه را باز می کند، تبلیغ نشان داده می شود.
این می تواند به صورت زیر ادغام شود:
class BannerAd(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) {
suspend fun loadAd() {
// mySdk is the previously loaded SDK in the SDK Runtime.
val bannerAd = mySdk.loadAd()
val sandboxedSdkView = SandboxedSdkView(context)
addViewToLayout(sandboxedSdkView)
// This renders the ad.
sandboxedSdkView.setAdapter(bannerAd)
return
}
private fun addViewToLayout(view: View) {
view.layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)
super.addView(view)
}
}
SDK آگاه از زمان اجرا شما همچنین میتواند هنگام تغییر وضعیت جلسه برای ارائه رابط کاربری مطلع شود. برای انجام این کار:
یک کلاس
SessionStateChangeListener()
برای مدیریت سناریوهای مختلف ایجاد کنید:private class SessionStateChangeListener() : SandboxedSdkUiSessionStateChangedListener { override fun onStateChanged(state: SandboxedSdkUiSessionState) { if (state is SandboxedSdkUiSessionState.Error) { // Some error has occurred while opening the session. Handle // accordingly. Log.e(TAG, state.throwable.message!!); } else if (state is SandboxedSdkUiSessionState.Loading) { // The session is attempting to be opened. } else if (state is SandboxedSdkUiSessionState.Active) { // The session is open and the UI presentation was successful. } else if (state is SandboxedSdkUiSessionState.Idle) { // There is no open session. } } }
یک شنونده تغییر وضعیت را به
SandboxedSdkView
که قبلاً در آن نمونهسازی کردهاید، اضافه کنید. شنونده بلافاصله به محض اینکه به نما متصل شد با وضعیت فعلی فراخوانی می شود.
به موارد زیر توجه کنید:
- اگر SDK آگاه از زمان اجرا، روشهای
SandboxedSdkView
را زمانی فراخوانی کند که جلسه هنوز باز نشده است، همه افکتها پس از پایان باز شدن جلسه اعمال میشوند.- روشهایی مانند SandboxedSdkView.orderProviderUiAboveClientUi(providerUiOnTop)
- فراخوانی روشهایی که یک View را از
SandboxedSdkView
اضافه یا حذف میکنند (مانندaddView()
،removeView()
،removeViewAt()
و غیره) پشتیبانی نمیشود و یکUnsupportedOperationException
را پرتاب میکند.- برای نمایش آگهی فقط از
setAdapter()
استفاده کنید.
- برای نمایش آگهی فقط از
-
SandboxedSdkView.orderProviderUiAboveClientUi(providerUiOnTop)
ترتیب Z را تغییر می دهد که بر ارسالMotionEvents
از تعامل کاربر به SDK فعال شده با زمان اجرا یا SDK آگاه از زمان اجرا تأثیر می گذارد.- اگر روی
false
تنظیم شود،MotionEvents
به SDK آگاه از زمان اجرا ارسال می شود، در غیر این صورت به SDK فعال با زمان اجرا ارسال می شود. درباره سفارش Z با استفاده از APIهای ارائه رابط کاربری بیشتر بیاموزید .
- اگر روی
فعالیت ها را شروع کنید
برای شروع فعالیتهای متعلق به SDK فعال با زمان اجرا، از افزونه createSdkActivityLauncher
برای ایجاد یک راهانداز در SDK آگاه از زمان اجرا استفاده کنید.
سپس این لانچر می تواند به SDK فعال در زمان اجرا منتقل شود و به آن اجازه می دهد در صورت نیاز فعالیت ها را آغاز کند.
می توانید از یک گزاره برای کنترل اینکه آیا فعالیت راه اندازی می شود یا نه استفاده کنید. محمول باید مقدار true
را برای مجاز بودن فعالیت ها برگرداند.
val launchSdkActivityPredicate = {
// Boolean which has to be true to launch the activities
}
val launcher = baseActivity.createSdkActivityLauncher(launchSdkActivityPredicate)
fullscreenService.showActivity(launcher)
در SDK فعال در زمان اجرا، SdkSandboxActivityHandlerCompat
را ثبت کنید و آن را در اختیار SdkActivityLauncher.LaunchSdkActivity(IBinder)
قرار دهید.
fun showActivity(activityLauncher: SdkActivityLauncher) {
val handler = object : SdkSandboxActivityHandlerCompat {
override fun onActivityCreated(activityHolder: ActivityHolder) {
activityHolder.getActivity().setContentView(contentView)
}
}
val token = controller.registerSdkSandboxActivityHandler(handler)
activityLauncher.launchSdkActivity(token)
}
ActivityHolder
به SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)
منتقل شد LifecycleOwner
را پیاده سازی می کند و به شما امکان دسترسی SDK با قابلیت زمان اجرا را به چرخه حیات فعالیت می دهد.
همچنین getOnBackPressedDispatcher
API را ارائه میکند که میتواند برای ثبت نمونههای getOnBackPressedCallback
برای مدیریت رفتار دکمه برگشت در فعالیت استفاده شود.
مرحله 3 : ساخت یک SDK با قابلیت زمان اجرامرحله 5 : آزمایش و ساخت برای توزیع