یک SDK با قابلیت زمان اجرا بسازید و مصرف کنید

1
مفاهیم کلیدی
2
محیط توسعه خود را تنظیم کنید
3
یک RE SDK بسازید
4
RE SDK را مصرف کنید
5
آزمایش و ساخت برای توزیع
،
1
مفاهیم کلیدی
2
محیط توسعه خود را تنظیم کنید
3
یک RE SDK بسازید
4
RE SDK را مصرف کنید
5
آزمایش و ساخت برای توزیع

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 آگاه از زمان اجرا شما همچنین می‌تواند هنگام تغییر وضعیت جلسه برای ارائه رابط کاربری مطلع شود. برای انجام این کار:

  1. یک کلاس 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.
            }
        }
    }
    
  2. یک شنونده تغییر وضعیت را به SandboxedSdkView که قبلاً در آن نمونه‌سازی کرده‌اید، اضافه کنید. شنونده بلافاصله به محض اینکه به نما متصل شد با وضعیت فعلی فراخوانی می شود.

به موارد زیر توجه کنید:

  • اگر SDK آگاه از زمان اجرا، روش‌های SandboxedSdkView را زمانی فراخوانی کند که جلسه هنوز باز نشده است، همه افکت‌ها پس از پایان باز شدن جلسه اعمال می‌شوند.
    • روش‌هایی مانند SandboxedSdkView.orderProviderUiAboveClientUi(providerUiOnTop)
  • فراخوانی روش‌هایی که یک View را از SandboxedSdkView اضافه یا حذف می‌کنند (مانند addView() ، removeView() ، removeViewAt() و غیره) پشتیبانی نمی‌شود و یک UnsupportedOperationException را پرتاب می‌کند.
    • برای نمایش آگهی فقط از setAdapter() استفاده کنید.
  • SandboxedSdkView.orderProviderUiAboveClientUi(providerUiOnTop) ترتیب Z را تغییر می دهد که بر ارسال MotionEvents از تعامل کاربر به SDK فعال شده با زمان اجرا یا SDK آگاه از زمان اجرا تأثیر می گذارد.

فعالیت ها را شروع کنید

برای شروع فعالیت‌های متعلق به 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 : آزمایش و ساخت برای توزیع