SDK রানটাইম বিজ্ঞাপন SDK গুলিকে একটি স্যান্ডবক্সযুক্ত পরিবেশে চালানোর অনুমতি দেয়, যা প্রকাশকের ভিউ হায়ারার্কি অ্যাক্সেস করতে বাধা দেয়। বিজ্ঞাপন প্রদর্শনের জন্য, প্ল্যাটফর্মটি একটি বিজ্ঞাপন ভিউ পাওয়ার জন্য SDK-তে একটি SandboxedSdkProvider.getView API প্রকাশ করে এবং এটিকে IPC (ইন্টার-প্রসেস কমিউনিকেশন) এর মাধ্যমে ক্লায়েন্ট অ্যাপ্লিকেশনে পাঠানোর জন্য একটি SurfacePackage হিসাবে প্যাকেজ করে। এর বেশ কয়েকটি ত্রুটি রয়েছে, যা নীচে আলোচনা করা হয়েছে। এই নথিটি তখন একটি প্রস্তাবিত Jetpack লাইব্রেরি উপস্থাপন করবে যা এই চ্যালেঞ্জগুলি মোকাবেলা করার জন্য তৈরি করা হচ্ছে।
প্ল্যাটফর্ম API গুলি বৃদ্ধির যুক্তি
ফ্রেমওয়ার্ক API গুলি নমনীয়তার জন্য ডিজাইন করা হয়েছে এবং UI উপস্থাপনার জন্য একটি সাইড চ্যানেল তৈরির কাজটি অ্যাপ এবং SDK এর উপর ছেড়ে দেয়। এই সাইড চ্যানেলটি নিম্নলিখিত কাজগুলি করে:
- SDK-কে তাদের জীবদ্দশায় একাধিক বিজ্ঞাপন ভিউ পরিচালনা করতে এবং SDK দ্বারা বিজ্ঞাপন UI তৈরি করার পরে কী ঘটে তা বুঝতে দেয়।
- ভিউ ক্রিয়েশন এবং কন্টেন্ট বাইন্ডিংকে ডিকপল করে। সাইড চ্যানেল ব্যবহার করলে SDK অ্যাপে (কন্টেন্ট) বিজ্ঞাপনের অনুরোধের সাথে সঙ্গতিপূর্ণ একটি অবজেক্ট ফেরত পাঠাতে পারে, যা অ্যাপ যখনই উপযুক্ত মনে করবে তখন বিজ্ঞাপন কন্টেইনারের সাথে আবদ্ধ করা যেতে পারে।
- বিভিন্ন প্রক্রিয়া জুড়ে UI দেখানোর জন্য ব্যবহৃত অন্তর্নিহিত প্ল্যাটফর্ম গঠনগুলিকে সারাংশ করে। (প্ল্যাটফর্মটি বর্তমানে একটি
SurfaceControlViewhostব্যবহার করে এবং এটি থেকে একটিSurfacePackageতৈরি করে।) - বিজ্ঞাপন কন্টেইনারের UI পরিবর্তন হলে SDK রানটাইমে বিজ্ঞাপন SDK গুলিকে স্বয়ংক্রিয়ভাবে বিজ্ঞপ্তি পেতে সক্ষম করে। যদি কোনও প্রকাশক বিজ্ঞাপন কন্টেইনারের লেআউট পরিবর্তন করেন, তাহলে SDK এই পরিবর্তনগুলি সম্পর্কে অবগত থাকে না যতক্ষণ না প্রকাশক স্পষ্টভাবে এটি জানানোর জন্য একটি API কল করেন।
- ব্যবহারকারীর দৃষ্টিগোচর কোনও জ্যাঙ্ক ছাড়াই বিজ্ঞাপন UI এবং বিজ্ঞাপন কন্টেইনারের আকার পরিবর্তন সিঙ্ক্রোনাইজ করে।
- স্বয়ংক্রিয়ভাবে ব্যাকওয়ার্ড কম্প্যাটিবিলিটি পরিচালনা করে। API লেভেল 30 এর আগে
SurfacePackageউপলব্ধ থাকে না। এছাড়াও, যেসব ডিভাইসে SDK রানটাইম নেই এবং SDK প্রকাশকের কাছে প্রক্রিয়া-স্থানীয়, সেখানে SDK থেকে সরাসরি ভিউ পাওয়া গেলে বিজ্ঞাপনের জন্যSurfacePackageতৈরি করা অপচয়। সাইড চ্যানেলটি SDK এবং অ্যাপ ডেভেলপার কোড থেকে এই জটিলতাকে দূরে সরিয়ে দেয়। - বিজ্ঞাপন UI কে কম্পোজেবলের সাথে নির্বিঘ্নে সংহত করতে সক্ষম করে। জেটপ্যাক কম্পোজ ডেভেলপাররা যারা ভিউ নিয়ে কাজ করেন না তারা SDK ডেভেলপার দ্বারা তৈরি UI হোস্ট করা চালিয়ে যেতে পারেন যারা এখনও ভিউ নিয়ে কাজ করে।
UI লাইব্রেরি
UI লাইব্রেরিগুলি উপরে বর্ণিত জটিলতাগুলিকে সারসংক্ষেপ করে এবং একটি পার্শ্ব চ্যানেল প্রদান করে যা প্রকাশক এবং SDK প্রক্রিয়া জুড়ে UI দেখানোর জন্য ব্যবহার করতে পারে এবং ব্যবহারকারী যখন এটির সাথে এবং ডিভাইসের সাথে ইন্টারঅ্যাক্ট করে তখন এটি আপডেট রাখে।
তিনটি UI লাইব্রেরি আছে: core , client , এবং provider . কোর লাইব্রেরি ক্লায়েন্ট এবং provider লাইব্রেরি দ্বারা ব্যবহৃত ইন্টারফেস প্রদান করে। UI প্রোভাইডার (সাধারণত SDK) প্রোভাইডার লাইব্রেরির উপর নির্ভর করে এবং UI এর ভোক্তা (সাধারণত প্রকাশক) ক্লায়েন্ট লাইব্রেরির উপর নির্ভর করে। একসাথে, ক্লায়েন্ট এবং প্রোভাইডার লাইব্রেরিগুলি একটি UI সেশন তৈরি এবং রক্ষণাবেক্ষণের জন্য প্রয়োজনীয় সাইড চ্যানেল গঠন করে।
এপিআই গুলি
SDK রানটাইম UI উপস্থাপনার জন্য API গুলি নিম্নরূপ:
SandboxedUiAdapter : SDK দ্বারা তৈরি, প্রকাশকের UI-তে প্রদর্শিত সামগ্রী পাওয়ার একটি উপায় প্রদান করে।
SandboxedSdkView : প্রকাশক দ্বারা তৈরি, এটি একটি ধারক যা SandboxedUiAdapter এর মাধ্যমে প্রাপ্ত সামগ্রী ধারণ করে।
Session : SandboxedUiAdapter.openSession() এর প্রতিক্রিয়ায় SDK দ্বারা তৈরি। এটি একটি UI সেশন কলের প্রতিনিধিত্ব করে। এটি SDK এবং প্রকাশকের মধ্যে যোগাযোগ টানেলের SDK প্রান্ত গঠন করে এবং SandboxedSdkView এর পরিবর্তনগুলি, যেমন উইন্ডো বিচ্ছিন্নকরণ, আকার পরিবর্তন বা কনফিগারেশন পরিবর্তন সম্পর্কে বিজ্ঞপ্তি গ্রহণ করে।
SessionClient : ক্লায়েন্ট লাইব্রেরি দ্বারা তৈরি, এটি SDK এবং প্রকাশকের মধ্যে যোগাযোগের সুড়ঙ্গের প্রকাশকের শেষ প্রান্ত গঠন করে।
SandboxedSdkUiSessionStateChangedListener : প্রকাশক দ্বারা তৈরি। SandboxedSdkView এর সাথে সম্পর্কিত UI সেশনের অবস্থার পরিবর্তনের জন্য একজন শ্রোতা।
এই API গুলি সম্পর্কে আরও বিস্তারিত জানার জন্য privacysandbox-ui রেফারেন্স ডকুমেন্টেশনটি পড়ুন।
নিয়ন্ত্রণ প্রবাহ
নিম্নলিখিত চিত্রগুলি বিভিন্ন পরিস্থিতিতে ক্লায়েন্ট এবং সরবরাহকারী UI লাইব্রেরির মধ্যে মিথস্ক্রিয়া দেখায়:
পূর্ববর্তী চিত্রটিতে দেখানো হয়েছে কিভাবে প্রকাশক প্রোগ্রাম্যাটিকভাবে বা তাদের XML এর মাধ্যমে একটি SandboxedSdkView তৈরি করতে পারেন এবং এটি SDK থেকে SDK-সংজ্ঞায়িত API এর মাধ্যমে প্রাপ্ত একটি SdkSandboxUiAdapter এর সাথে সংযুক্ত করতে পারেন। সমস্ত UI অবস্থার পরিবর্তনগুলি পর্যবেক্ষণ করতে, প্রকাশককে SdkSandboxUiAdapter সংযুক্ত করার আগে SandboxedSdkView এ একটি SandboxedSdkUiSessionStateChangedListener যুক্ত করতে হবে।
এই চিত্রটি দেখায় যে কীভাবে প্রকাশকের কার্যকলাপ কনফিগারেশন পরিবর্তনগুলি পরিচালনা করে, ক্লায়েন্ট লাইব্রেরি কনফিগারেশন পরিবর্তনটি SDK-তে ফরোয়ার্ড করার যত্ন নেয়, যাতে তারা সেই অনুযায়ী তাদের UI আপডেট করতে পারে। উদাহরণস্বরূপ, ব্যবহারকারী যখন ডিভাইসটি ঘোরান এবং প্রকাশক তাদের কার্যকলাপে হ্যান্ডলিং কনফিগারেশন পরিবর্তনগুলি ঘোষণা করেন তখন এই প্রবাহটি ট্রিগার করা যেতে পারে, android:configChanges=["orientation"] সেট করে।
এই চিত্রটি দেখায় যে SDK কীভাবে SessionClient এর পদ্ধতি ব্যবহার করে বিজ্ঞাপনের কন্টেইনারে পরিবর্তনের অনুরোধ করতে পারে। এই APIটি তখনই ট্রিগার হয় যখন SDK বিজ্ঞাপনের আকার পরিবর্তন করতে চায় এবং প্রকাশককে নতুন মাত্রা সামঞ্জস্য করার জন্য বিজ্ঞাপনের কন্টেইনারের আকার পরিবর্তন করতে হয়। এটি mraid.resize() এর মতো ব্যবহারকারীর ইন্টারঅ্যাকশনের প্রতিক্রিয়ায় ঘটতে পারে।
এই চিত্রটি দেখায় যে SandboxedSdkView উইন্ডো থেকে বিচ্ছিন্ন হয়ে গেলে সেশনটি কীভাবে বন্ধ হয়। SDK দ্বারা SessionClient.onSessionError() ব্যবহার করে যেকোনো সময়ে (যেমন ব্যবহারকারী যখন নেটওয়ার্ক সংযোগ হারিয়ে ফেলে) সেশনটি বন্ধ করা যেতে পারে।
Z ক্রম
ক্লায়েন্ট UI লাইব্রেরি SDK এর UI হোস্ট করার জন্য অভ্যন্তরীণভাবে একটি SurfaceView ব্যবহার করে। SurfaceView Z অর্ডার ব্যবহার করে প্রকাশকের উইন্ডোর উপরে অথবা নীচে তার UI দেখাতে পারে। এটি SandboxedSdkView.orderProviderUiAboveClientUi() পদ্ধতি দ্বারা নিয়ন্ত্রিত হয়, যা একটি বুলিয়ান setOnTop গ্রহণ করে।
যখন setOnTop true হয়, তখন SandboxedSdkView এর প্রতিটি android.view.MotionEvent SDK-তে পাঠানো হয়। যখন false , তখন এগুলি প্রকাশকের কাছে পাঠানো হয়। ডিফল্টরূপে, গতি ইভেন্টগুলি SDK-তে পাঠানো হয়।
প্রকাশকদের সাধারণত বিজ্ঞাপন দেখার ডিফল্ট Z-ক্রম পরিবর্তন করার প্রয়োজন হয় না। তবে, যখন কোনও বিজ্ঞাপন কভার করে এমন UI দেখানো হয়, যেমন ড্রপ-ডাউন মেনু, তখন Z-ক্রমটি অস্থায়ীভাবে ডিফল্ট থেকে উল্টে দেওয়া উচিত এবং তারপর কভারিং UI উপাদানটি বাতিল হয়ে গেলে পুনরুদ্ধার করা উচিত। আমরা ক্লায়েন্ট UI লাইব্রেরিতে এই প্রক্রিয়াটি স্বয়ংক্রিয় করার উপায়গুলি অন্বেষণ করছি।
স্ক্রোলিং
যখন প্রকাশক উইন্ডোর উপরে বিজ্ঞাপন UI-কে Z-তে অর্ডার করা হয়, তখন বিজ্ঞাপন UI থেকে MotionEvents SDK-তে পাঠানো হয়। বিজ্ঞাপন UI-তে শুরু করা স্ক্রোল এবং ফ্লিং অঙ্গভঙ্গিগুলিকে বিশেষভাবে বিবেচনা করা হয়:
- উল্লম্ব স্ক্রোল এবং ফ্লিং জেসচারগুলি প্রকাশকের কন্টেইনারে পাঠানো এবং পরিচালনা করা হয়। এটি প্রকাশকের কন্টেইনার যেখানে বিজ্ঞাপন UI স্থাপন করা হয়, উল্লম্বভাবে স্ক্রোলযোগ্য হলে ভালো UX প্রদান করে। এর জন্য SDK বা প্রকাশকের পক্ষ থেকে কোনও অতিরিক্ত কাজ করার প্রয়োজন হয় না।
- অনুভূমিক স্ক্রোল এবং ফ্লিং জেসচারগুলি SDK-তে পাঠানো এবং পরিচালনা করা হয়। বিজ্ঞাপন UI নিজেই অনুভূমিকভাবে স্ক্রোলযোগ্য হলে (যেমন একটি বিজ্ঞাপন ক্যারোজেল) এটি ভাল UX প্রদান করে।
বাস্তবায়ন নির্দেশিকা
SDK-এর নিম্নলিখিতগুলি বাস্তবায়ন করা উচিত:
-
SandboxedUiAdapter: এটি SDK-সংজ্ঞায়িত API, যেমনloadAd, এর প্রতিক্রিয়া হিসাবে প্রকাশকের কাছে ফেরত পাঠানো হয়। এই বাস্তবায়নেরopenSession()পদ্ধতিটি SDK এর সার্ভারগুলিতে একটি বিজ্ঞাপন অনুরোধ করতে এবং সেই অনুরোধের জন্য একটি বিজ্ঞাপন দৃশ্য প্রস্তুত করতে ব্যবহার করা উচিত। -
Session**: এটিSandboxedUiAdapter.openSessionকলের প্রতিক্রিয়ায় ফেরত পাঠানো হয়েছে। এটি ক্লায়েন্ট লাইব্রেরিকে বিজ্ঞাপন UI পাওয়ার এবং এই API-তে পরিবর্তন সম্পর্কে SDK-কে অবহিত করার একটি উপায় প্রদান করে। সমস্তSessionপদ্ধতি এখানে প্রয়োগ করা উচিত।
প্রকাশকের নিম্নলিখিত কাজগুলি করা উচিত:
- XML অথবা প্রোগ্রামের মাধ্যমে একটি
SandboxedSdkViewতৈরি করুন। - UI-তে পরিবর্তনগুলি পর্যবেক্ষণ করতে
SandboxedSdkUiSessionStateChangedListenerকেSandboxedSdkViewএ সংযুক্ত করুন। -
SandboxedSdkViewএ SDK-প্রদত্তSandboxedUiAdapterসংযুক্ত করুন। - যথারীতি উইন্ডোতে
SandboxedSdkViewযোগ করুন, এবং ক্লায়েন্ট লাইব্রেরিকে SDK দিয়ে UI সেশন তৈরি এবং রক্ষণাবেক্ষণের দায়িত্ব দিন। - উপযুক্ত সময়ে,
SandboxedSdkUiSessionChangedListenerদ্বারা রিপোর্ট করা অবস্থার পরিবর্তনের প্রতিক্রিয়া জানান। উদাহরণস্বরূপ, যদি SDK অপ্রত্যাশিতভাবে সেশনটি বন্ধ করে দেয়, তাহলে প্রকাশকSandboxedSdkViewএকটি স্ট্যাটিক ইমেজ দিয়ে প্রতিস্থাপন করতে পারেন, অথবা তাদের ভিউ হায়ারার্কি থেকে এটি সরিয়ে ফেলতে পারেন। - বিজ্ঞাপন UI, যেমন ড্রপ ডাউন মেনু, কভার করতে পারে এমন ট্রানজিশন করার সময়, প্রকাশকের উইন্ডোর নীচে বিজ্ঞাপন UI স্থাপন করার জন্য অস্থায়ীভাবে
orderProviderUiAboveClientUiকে false এ রাখুন। ড্রপ ডাউন মেনুটি বাতিল হয়ে গেলে,orderProviderUiAboveClientUitrueএ কল করুন।
প্ল্যাটফর্ম API-এর ভবিষ্যৎ
UI লাইব্রেরিগুলি বিটাতে চলে গেলে, আমরা UI উপস্থাপনার সাথে সম্পর্কিত SDK রানটাইম প্ল্যাটফর্ম API গুলি, যেমন SdkSandboxManager.requestSurfacePackage() এবং SandbxedSdkProvider.getView() কে অবচয় করার পরিকল্পনা করছি।
খোলা প্রশ্ন
- UI লাইব্রেরিগুলি কি স্বয়ংক্রিয়ভাবে পরিচালনা করবে এমন আরও সাধারণ বিজ্ঞাপন UI ব্যবহারের ঘটনা আছে?
- বিজ্ঞাপন UI দেখানোর জন্য আপনি কোন UI ফ্রেমওয়ার্ক ব্যবহার করেন, আপনি কি এই ফ্রেমওয়ার্কগুলির সাথে UI লাইব্রেরিগুলিকে একীভূত করতে সমস্যা হতে পারে বলে আশা করেন?
- স্ক্রোলযোগ্য প্রকাশক কন্টেইনারে রাখা স্ক্রোলযোগ্য বিজ্ঞাপন UI কি আপনার জন্য সাধারণ ব্যবহারের ক্ষেত্রে? বিজ্ঞাপন UI এবং এই ক্ষেত্রে কন্টেইনারের জন্য স্ক্রোলের দিকনির্দেশনা কী? ব্যবহারকারী যখন বিজ্ঞাপন UI-তে স্ক্রোল শুরু করেন তখন আপনি কী আচরণ আশা করেন?