SDK রানটাইম SDK গুলি কীভাবে নতুন কার্যকলাপ শুরু করতে পারে তার উপর বিধিনিষেধ আরোপ করে। এটি পূর্ণ স্ক্রিন বিজ্ঞাপন ফর্ম্যাটগুলির জন্য একটি চ্যালেঞ্জ তৈরি করে যা সাধারণত উন্নত নিয়ন্ত্রণ এবং ব্যবহারকারীর অভিজ্ঞতার জন্য একটি পৃথক কার্যকলাপ শুরু করার উপর নির্ভর করে। এটি মোকাবেলা করার জন্য, SDK রানটাইম স্যান্ডবক্সযুক্ত কার্যকলাপগুলির জন্য একটি অভিনব প্রক্রিয়া প্রবর্তন করে।
SDK রানটাইম পরিবেশের মধ্যে লোড করা SDK গুলি তাদের ম্যানিফেস্টে <activity> ট্যাগগুলি সরাসরি সংজ্ঞায়িত করতে পারে না বা তাদের নিজস্ব কার্যকলাপ শুরু করতে পারে না। পরিবর্তে, একটি নতুন ইন্টেন্ট অ্যাকশন, START_SANDBOXED_ACTIVITY , চালু করা হয়েছে।
যদিও SDK-গুলিকে এই অ্যাকশনের মাধ্যমে ইন্টেন্ট চালু করার ক্ষেত্রেও নিষেধাজ্ঞা রয়েছে, SDK-গুলি ক্লায়েন্ট অ্যাপকে এই ইন্টেন্ট শুরু করার জন্য অনুরোধ করতে পারে। এরপর সিস্টেমটি একটি প্ল্যাটফর্ম-সংজ্ঞায়িত অ্যাক্টিভিটি তৈরি করে এবং এটি SDK-তে প্রেরণ করে। এই অ্যাক্টিভিটি SDK-এর মতো একই প্রক্রিয়ায় চলবে।
এরপর SDK এই কার্যকলাপটি ব্যবহার করে পূর্ণ স্ক্রিন বিজ্ঞাপন অভিজ্ঞতা বাস্তবায়ন এবং পরিচালনা করতে পারে।
প্ল্যাটফর্মটি যে কার্যকলাপটি সরবরাহ করে তা হল একটি স্ট্যান্ডার্ড android.app.Activity , যা ক্লায়েন্ট অ্যাপের কাজের অংশ হিসেবে চালু করা হয়েছে।
SDK রানটাইমে অ্যাক্টিভিটি তৈরি করা
অ্যাক্টিভিটি তৈরি করার জন্য আপনার কাছে দুটি প্রাথমিক পদ্ধতি রয়েছে: স্ট্রিমলাইনড জেটপ্যাক অ্যাক্টিভিটি লাইব্রেরি ব্যবহার করা অথবা প্ল্যাটফর্ম API-এর সাথে সরাসরি ইন্টারঅ্যাক্ট করা।
আমরা অ্যাক্টিভিটি লাইব্রেরি ব্যবহার করার পরামর্শ দিচ্ছি কারণ এগুলি অন্তর্নিহিত জটিলতাকে বিমূর্ত করে অ্যাক্টিভিটি তৈরিকে সহজ করে তোলে।
অ্যাক্টিভিটি লাইব্রেরি
অ্যাক্টিভিটি লাইব্রেরিগুলি বেশ কিছু সুবিধা প্রদান করে:
- অ্যাক্টিভিটি হ্যান্ডলার নিবন্ধন এবং ক্লায়েন্ট অ্যাপের সাথে তাদের শনাক্তকারী শেয়ার করার অভ্যন্তরীণ বিবরণ সারসংক্ষেপ করুন।
- অ্যাপ ডেভেলপারদের শর্ত (পূর্বাভাস) পূরণ করার অনুমতি দিয়ে SDK কীভাবে তাদের অ্যাপের মধ্যে কার্যকলাপ তৈরি করে তার উপর আরও নিয়ন্ত্রণ দেয়।
- SDK গুলির জন্য এমন একটি ঐক্যবদ্ধ উপায় তৈরি করুন যাতে তারা কার্যকলাপ চালু করে এমন API গুলিকে সংজ্ঞায়িত করতে পারে।
তিনটি অ্যাক্টিভিটি লাইব্রেরি রয়েছে: কোর, ক্লায়েন্ট এবং প্রোভাইডার।
- মূল লাইব্রেরি ক্লায়েন্ট অ্যাপ এবং প্রোভাইডার লাইব্রেরি দ্বারা ব্যবহৃত ইন্টারফেস সরবরাহ করে।
- প্রোভাইডার লাইব্রেরি SDK গুলিকে কার্যক্রম শুরু করার জন্য API প্রদান করে।
- ক্লায়েন্ট লাইব্রেরি ক্লায়েন্ট অ্যাপগুলিকে একটি অ্যাক্টিভিটি লঞ্চার তৈরি করার জন্য API প্রদান করে, যা SDK গুলি অ্যাক্টিভিটি চালু করার জন্য অ্যাপগুলিকে অনুরোধ করতে ব্যবহার করতে পারে।
এই লাইব্রেরিগুলি নিম্নলিখিত API গুলি প্রবর্তন করে:
-
SdkActivityLauncher: অ্যাক্টিভিটি লঞ্চার SDK গুলিকে ক্লায়েন্ট অ্যাপ থেকে লঞ্চিং অ্যাক্টিভিটি পরিচালনা করতে দেয়। ক্লায়েন্ট অ্যাপগুলির একটি লঞ্চার তৈরি করা উচিত এবং এটিকে SDK এর API গুলিতে প্যারামিটার হিসাবে প্রেরণ করা উচিত যা অ্যাক্টিভিটি শুরু করে। -
<T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean ): একটি এক্সটেনশন ফাংশন যা ক্লায়েন্ট অ্যাপ তাদের কার্যকলাপ থেকে লঞ্চার তৈরি করতে কল করতে পারে। -
SdkActivityLauncher.launchSdkActivity(IBinder): SDK দ্বারা ব্যবহৃত একটি পদ্ধতি যা অ্যাপটিকে কার্যকলাপ চালু করার জন্য অনুরোধ করে।
অ্যাক্টিভিটি লাইব্রেরি সহ অ্যাক্টিভিটি চালু করার প্রক্রিয়া নিম্নরূপ:
- SDK যেকোনো API-তে
SdkActivityLauncherধরণের একটি প্যারামিটার যোগ করে যা কার্যকলাপ শুরু করবে। - ক্লায়েন্ট অ্যাপটি তার একটি কার্যকলাপে
createSdkActivityLauncherকল করে একটি লঞ্চার তৈরি করে যা API কলের সময় SDK-তে পাঠানো যেতে পারে। - SDK
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)কল করে এবং শনাক্তকারী টোকেনটি পুনরুদ্ধার করে। - SDK কার্যকলাপটি চালু করার জন্য
launchSdkActivityকল করে।
নিম্নলিখিত চিত্রটি অ্যাক্টিভিটি লাইব্রেরি ব্যবহারের ক্ষেত্রে প্রবাহ দেখায়।
প্ল্যাটফর্ম API গুলি
SDK রানটাইমের মধ্যে স্যান্ডবক্সযুক্ত কার্যকলাপ তৈরি এবং পরিচালনা সহজতর করার জন্য প্ল্যাটফর্মটি নিম্নলিখিত API গুলি প্রবর্তন করে:
-
SdkSandboxActivityHandler: অ্যাক্টিভিটি হ্যান্ডলারটি SDK কে অবহিত করার জন্য ব্যবহৃত হয় যখন কোনও অ্যাক্টিভিটি তৈরি করা হয় এবং এটি SDK দ্বারা নিবন্ধিত হয়। - অ্যাক্টিভিটি হ্যান্ডলারদের নিবন্ধনে সহায়তা করার জন্য, SDK
SdkSandboxControllerএর অধীনে নিম্নলিখিত পদ্ধতিগুলি ব্যবহার করতে পারে:-
.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler):SdkSandboxActivityHandlerএর একটি উদাহরণ নিবন্ধন করে, যা একটিIBinderশনাক্তকারী প্রদান করে। -
.unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler):SdkSandboxActivityHandlerএর একটি নিবন্ধিত উদাহরণকে তার শনাক্তকারী ব্যবহার করে নিবন্ধনমুক্ত করে।
-
-
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder): ক্লায়েন্ট অ্যাপ থেকে আমন্ত্রিত, এই পদ্ধতিটি SDK-এর জন্য কার্যকলাপ তৈরির প্রক্রিয়া শুরু করে। ক্লায়েন্ট অ্যাপটিকে তার নির্বাচিত প্রারম্ভিক কার্যকলাপ এবং SDK-এর কার্যকলাপ হ্যান্ডলার শনাক্তকারীকে প্যারামিটার হিসেবে পাস করতে হবে।
প্ল্যাটফর্ম API ব্যবহার করে কোনও কার্যকলাপ শুরু করতে, SDK গুলিকে এই প্রবাহ অনুসরণ করতে হবে:
- SDK প্রদত্ত API গুলি ব্যবহার করে একটি কার্যকলাপ হ্যান্ডলার নিবন্ধন করে এবং একটি শনাক্তকারী পায়।
- SDK এই শনাক্তকারীটি তার ক্লায়েন্ট অ্যাপের সাথে শেয়ার করে।
- ক্লায়েন্ট অ্যাপটি SDK রানটাইমে প্ল্যাটফর্ম API
startSdkSandboxActivity(Activity, IBinder)ব্যবহার করে একটি কার্যকলাপ শুরু করার পদ্ধতিটিকে কল করে, এই নতুন কার্যকলাপের জন্য নির্বাচিত প্রারম্ভিক কার্যকলাপ এবং কার্যকলাপ হ্যান্ডলারের শনাক্তকারীকে প্যারামিটার হিসেবে পাস করে। - প্ল্যাটফর্মটি একটি অ্যাক্টিভিটি শুরু করে এবং অ্যাক্টিভিটি হ্যান্ডলার (
SdkSandboxActivityHandler.onActivityCreated(Activity)) এ একটি কলব্যাকের মাধ্যমে SDK কে অবহিত করে। - SDK কার্যকলাপটি ব্যবহার করে এটিকে একটি বিজ্ঞাপন দিয়ে পূর্ণ করে।
প্ল্যাটফর্ম API ব্যবহার করলে SDK-কে SdkSandboxActivityHandler এর শনাক্তকারীকে ক্লায়েন্ট অ্যাপের সাথে তার API-এর মাধ্যমে উপযুক্ত সময়ে শেয়ার করার এবং ক্লায়েন্ট অ্যাপগুলিকে এটি কীভাবে ব্যবহার করতে হয় সে সম্পর্কে নির্দেশনা দেওয়ার দায়িত্ব দেওয়া হয়।
নিম্নলিখিত ফ্লো ডায়াগ্রামে, উদাহরণ SDK-তে একটি পদ্ধতি launchActivity(AppCallback) রয়েছে যা একটি কলব্যাক আশা করে (SDK-এর API-এর অংশ হিসাবে সংজ্ঞায়িত)। এই কলব্যাকটি SDK দ্বারা Activity Handler ( SdkSandboxActivityHandler ) এর শনাক্তকারী ক্লায়েন্ট অ্যাপের সাথে শেয়ার করার জন্য ব্যবহার করা হয়।
দৃশ্যমানতা
SDK রানটাইমের মধ্যে, ক্লায়েন্ট অ্যাপের ভিউ হায়ারার্কিতে ইন্টিগ্রেটেড বিজ্ঞাপনগুলি SDK প্রক্রিয়া থেকে ক্লায়েন্ট অ্যাপের প্রক্রিয়ায় SDK ভিউ রেন্ডার করার জন্য সাইড চ্যানেল ব্যবহার করে।
বিজ্ঞাপনটি ব্যবহারকারীর কাছে দৃশ্যমান কিনা তা নির্ধারণ করতে SDK রানটাইমের বাইরে একই View API ব্যবহার করতে পারে না, কারণ বিজ্ঞাপনের দৃশ্যটি অ্যাপ্লিকেশনের উইন্ডোতে সংযুক্ত থাকে না ( Viewability )।
বিপরীতে, প্ল্যাটফর্ম-প্রদত্ত কার্যকলাপটি SDK রানটাইম প্রক্রিয়ার মধ্যে স্থানীয়ভাবে পরিচালিত হয়, যা পার্শ্ব চ্যানেলের প্রয়োজনীয়তা দূর করে এবং SDK-গুলিকে স্ট্যান্ডার্ড অ্যান্ড্রয়েড Activity এবং View API ব্যবহার করার অনুমতি দেয়।
এই ভিন্ন বাস্তবায়নের কারণে, চলমান প্রচেষ্টার লক্ষ্য হল বিজ্ঞাপন লোডিং প্রেক্ষাপট নির্বিশেষে দর্শনীয়তা সংকেত পুনরুদ্ধারের জন্য ইন্টারফেসগুলিকে একত্রিত করা।
জীবনচক্র
ActivityHolder SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder) এর মাধ্যমে SDK-তে স্থানান্তরিত হয়, LifecycleOwner প্রয়োগ করে এবং Lifecycle.Event সম্পর্কে জানতে ব্যবহার করা যেতে পারে।
পিছনের নেভিগেশন
ActivityHolder.getOnBackPressedDispatcher() পদ্ধতিটি OnBackPressedDispatcher প্রদান করে যা OnBackPressedCallback ইনস্ট্যান্স নিবন্ধন করে ব্যাক নেভিগেশন পরিচালনা করতে ব্যবহার করা যেতে পারে।