একটি রানটাইম-সক্ষম SDK তৈরি করুন এবং ব্যবহার করুন

1
মূল ধারণা
2
আপনার উন্নয়ন পরিবেশ সেট আপ করুন
3
একটি RE SDK তৈরি করুন
4
RE SDK ব্যবহার করুন
5
পরীক্ষা, এবং বিতরণের জন্য বিল্ডিং
,
1
মূল ধারণা
2
আপনার উন্নয়ন পরিবেশ সেট আপ করুন
3
একটি RE SDK তৈরি করুন
4
RE SDK ব্যবহার করুন
5
পরীক্ষা, এবং বিতরণের জন্য বিল্ডিং

রানটাইম-সক্ষম SDK ব্যবহার করুন

এই বিভাগটি বর্ণনা করে কিভাবে ক্লায়েন্টরা ঘোষিত রানটাইম-সক্ষম (RE) SDK API-এর সাথে ইন্টারঅ্যাক্ট করতে পারে।

এই গাইডের ক্ষেত্রে, আমরা ক্লায়েন্ট হিসাবে আপনার বিদ্যমান SDK মডিউল (বা রানটাইম-সচেতন SDK) উল্লেখ করি৷

আপনি যদি সরাসরি আপনার অ্যাপে রানটাইম-সক্ষম SDK করতে চান, তাহলে অ্যাপ মডিউল হল ক্লায়েন্ট।

রানটাইম-সক্ষম SDK লোড করুন

আপনার রানটাইম-সচেতন SDK বা ক্লায়েন্ট অ্যাপে আপনি প্রথমে যা করতে চান তা হল রানটাইম-সক্ষম SDK লোড করা।

SdkSandboxManager ক্লাস রানটাইম-সক্ষম SDK লোড করতে সহায়তা করে, একটি IBinder ক্লাস ফেরত দেয় যা রানটাইম-সক্ষম SDK-এ ঘোষিত ইন্টারফেসের সাথে আবদ্ধ হতে পারে।

আপনাকে নিশ্চিত করতে হবে যে আপনি প্রতিটি রানটাইম-সক্ষম SDK শুধুমাত্র একবার লোড করবেন, অথবা SDK ম্যানেজার একটি ব্যতিক্রম ফিরিয়ে দেবে।

SdkSandboxManager দ্বারা ঘোষিত SDK API ইন্টারফেসে ফিরে আসা IBinder ইন্টারফেসকে রূপান্তর করতে শিম জেনারেশন টুল সাহায্যকারী ক্লাস তৈরি করে।

টুলগুলি একটি *Factory ক্লাস তৈরি করতে @PrivacySandboxService এর সাথে টীকাযুক্ত ইন্টারফেস ব্যবহার করে।

এই ক্লাসে একটি স্ট্যাটিক wrapTo* ফাংশন রয়েছে যা একটি IBinder অবজেক্টকে আপনার রানটাইম-সক্ষম SDK এর ইন্টারফেসের একটি উদাহরণে রূপান্তর করে।

আপনার রানটাইম-সচেতন SDK এই ইন্টারফেসটি ব্যবহার করে রানটাইম-সক্ষম SDK-এর সাথে যোগাযোগ করতে পারে এবং আপনার পূর্ববর্তী ধাপে ঘোষিত SDK APIগুলিকে আহ্বান করতে পারে৷

// 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 লাইব্রেরি ব্যবহার করতে চান, তাহলে নিশ্চিত করুন যে আপনি আপনার রানটাইম-সচেতন SDK-এর build.gradle-এ নির্ভরতাগুলিতে androidx.privacysandbox.ui:ui-core এবং androidx.privacysandbox.ui:ui-client যোগ করেছেন। .

SandboxedSdkView ব্যবহার করে একটি ব্যানার বিজ্ঞাপন লোড করুন

androidx.privacysandbox.ui:ui-client একটি রানটাইম-সক্ষম SDK দ্বারা তৈরি UI হোস্ট করতে SandboxedSdkView নামে একটি নতুন ViewGroup প্রবর্তন করেছে৷

setAdapter() বিজ্ঞাপন ভিউ এবং UI পরিবর্তনের বিজ্ঞপ্তি পেতে রানটাইম-সক্ষম SDK-এর সাথে একটি সেশন খোলে। যখন 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ও বিজ্ঞপ্তি পেতে পারে যখন UI উপস্থাপনার জন্য সেশনের অবস্থা পরিবর্তিত হয়। এটি করতে:

  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)
  • SandboxedSdkView (যেমন addView() , removeView() , removeViewAt() , ইত্যাদি) থেকে একটি ভিউ যুক্ত বা অপসারণ করে এমন কলিং পদ্ধতিগুলি সমর্থিত নয়, একটি UnsupportedOperationException নিক্ষেপ করে।
    • বিজ্ঞাপন দেখানোর জন্য শুধুমাত্র setAdapter() ব্যবহার করুন।
  • SandboxedSdkView.orderProviderUiAboveClientUi(providerUiOnTop) Z অর্ডারিং টগল করে যা ব্যবহারকারীর ইন্টারঅ্যাকশন থেকে MotionEvents রানটাইম-সক্ষম SDK বা রানটাইম-সচেতন SDK-এ পাঠানো হয় কিনা তা প্রভাবিত করে।

কার্যক্রম শুরু করুন

রানটাইম-সক্ষম SDK-এর মালিকানাধীন ক্রিয়াকলাপগুলি শুরু করতে, রানটাইম-সচেতন SDK-এ একটি লঞ্চার তৈরি করতে createSdkActivityLauncher এক্সটেনশন ব্যবহার করুন৷

এই লঞ্চারটি আপনার রানটাইম-সক্ষম SDK-এ পাস করা যেতে পারে, এটিকে প্রয়োজন অনুযায়ী ক্রিয়াকলাপ শুরু করার অনুমতি দেয়।

ক্রিয়াকলাপটি চালু করা হবে কিনা তা নিয়ন্ত্রণ করতে আপনি একটি পূর্বাভাস ব্যবহার করতে পারেন। ক্রিয়াকলাপের অনুমতি দেওয়ার জন্য predicateটিকে একটি 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 : বিতরণের জন্য পরীক্ষা এবং নির্মাণ