একটি রানটাইম-সক্ষম 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 শুধুমাত্র একবার লোড করছেন, অন্যথায় SDK ম্যানেজার একটি ব্যতিক্রম ফেরত দেবে।

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

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

এই ক্লাসে একটি স্ট্যাটিক 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() রানটাইম-সক্ষম 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)
    }
}

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

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

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

এই লঞ্চারটি আপনার রানটাইম-সক্ষম 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)
}

SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder) এ স্থানান্তরিত ActivityHolder LifecycleOwner প্রয়োগ করে, আপনার রানটাইম-সক্ষম SDK কে অ্যাক্টিভিটির জীবনচক্রের অ্যাক্সেস দেয়।

এটি getOnBackPressedDispatcher APIও প্রদান করে, যা কার্যকলাপের মধ্যে ব্যাক বোতাম আচরণ পরিচালনা করার জন্য getOnBackPressedCallback ইনস্ট্যান্স নিবন্ধন করতে ব্যবহার করা যেতে পারে।


ধাপ ৩ : রানটাইম-সক্ষম SDK তৈরি করুন ধাপ ৫ : বিতরণের জন্য পরীক্ষা এবং নির্মাণ