SDK রানটাইম UI উপস্থাপনা API, SDK রানটাইম UI উপস্থাপনা API, SDK রানটাইম UI উপস্থাপনা API

SDK রানটাইম বিজ্ঞাপন SDK গুলিকে একটি স্যান্ডবক্সযুক্ত পরিবেশে চালানোর অনুমতি দেয়, যা তাদের প্রকাশকের ভিউ অনুক্রম অ্যাক্সেস করতে সক্ষম হতে বাধা দেয়৷ বিজ্ঞাপন প্রদর্শনের জন্য, প্ল্যাটফর্মটি একটি SandboxedSdkProvider.getView API SDK-এ একটি বিজ্ঞাপন দৃশ্য প্রাপ্ত করার জন্য প্রকাশ করে এবং ক্লায়েন্ট অ্যাপ্লিকেশনে IPC (আন্তঃ-প্রক্রিয়া যোগাযোগ) এর মাধ্যমে পাঠানোর জন্য এটিকে একটি SurfacePackage হিসাবে প্যাকেজ করে। এটির বেশ কয়েকটি ত্রুটি রয়েছে, যা নীচে আলোচনা করা হয়েছে। এই নথিটি তখন একটি প্রস্তাবিত জেটপ্যাক লাইব্রেরি উপস্থাপন করবে যা এই চ্যালেঞ্জগুলি মোকাবেলা করার জন্য নির্মিত হচ্ছে।

প্ল্যাটফর্ম APIs বৃদ্ধির জন্য যুক্তি

ফ্রেমওয়ার্ক APIগুলি নমনীয়তার জন্য ডিজাইন করা হয়েছে এবং অ্যাপ এবং SDK পর্যন্ত UI উপস্থাপনার মধ্যে একটি পার্শ্ব চ্যানেল তৈরি করার কাজ ছেড়ে দেয়। এই পার্শ্ব চ্যানেল নিম্নলিখিত কাজ করে:

  1. SDK-কে তাদের জীবদ্দশায় একাধিক বিজ্ঞাপন দৃশ্য পরিচালনা করতে দেয় এবং SDK দ্বারা তৈরি হয়ে গেলে বিজ্ঞাপন UI-এর কী হবে তা বুঝতে দেয়।
  2. Decouples সৃষ্টি এবং বিষয়বস্তু বাঁধাই দেখুন. সাইড চ্যানেল ব্যবহার করে SDK-কে এমন একটি বস্তু ফেরত দেওয়ার অনুমতি দেয় যা অ্যাপের (কন্টেন্ট) বিজ্ঞাপনের অনুরোধের সাথে মিলে যায়, যেটি যখনই অ্যাপ উপযুক্ত মনে করে বিজ্ঞাপন কন্টেইনারে আবদ্ধ হতে পারে।
  3. সমস্ত প্রক্রিয়া জুড়ে UI দেখানোর জন্য ব্যবহৃত অন্তর্নিহিত প্ল্যাটফর্মের গঠনগুলিকে বিমূর্ত করে। (প্ল্যাটফর্মটি বর্তমানে একটি SurfaceControlViewhost ব্যবহার করে এবং এটি থেকে একটি SurfacePackage তৈরি করে।)
  4. বিজ্ঞাপন কন্টেইনারের UI পরিবর্তন হলে স্বয়ংক্রিয়ভাবে বিজ্ঞপ্তি পেতে SDK রানটাইমে বিজ্ঞাপন SDK সক্ষম করে। যদি কোনো প্রকাশক বিজ্ঞাপন কন্টেইনারের লেআউট পরিবর্তন করে, তাহলে SDK এই পরিবর্তনগুলি সম্পর্কে অবগত থাকে না যতক্ষণ না প্রকাশক স্পষ্টভাবে একটি API-কে এটি জানানোর জন্য কল করে।
  5. কোনো ব্যবহারকারী-দৃশ্যমান জ্যাঙ্ক ছাড়াই বিজ্ঞাপন UI এবং বিজ্ঞাপন কন্টেইনারের আকার পরিবর্তন করে সিঙ্ক্রোনাইজ করে।
  6. স্বয়ংক্রিয়ভাবে পিছনের সামঞ্জস্য পরিচালনা করে। API স্তর 30-এর আগে SurfacePackage উপলব্ধ নেই৷ অতিরিক্তভাবে, যে ডিভাইসগুলিতে কোনও SDK রানটাইম নেই এবং SDK প্রকাশকের কাছে স্থানীয় প্রসেস, সেখানে একটি বিজ্ঞাপনের জন্য একটি SurfacePackage তৈরি করা বৃথা যখন SDK থেকে সরাসরি প্রাপ্ত করা যেতে পারে৷ সাইড চ্যানেল এই জটিলতাকে SDK এবং অ্যাপ ডেভেলপার কোড থেকে দূরে সরিয়ে দেয়।
  7. কম্পোজেবলের সাথে নির্বিঘ্নে সংহত করতে বিজ্ঞাপন UI সক্ষম করে৷ জেটপ্যাক কম্পোজ ডেভেলপাররা যারা ভিউ নিয়ে কাজ করে না তারাও SDK ডেভেলপারের তৈরি UI হোস্ট করা চালিয়ে যেতে পারে যারা এখনও ভিউ নিয়ে কাজ করে।

UI লাইব্রেরি

UI লাইব্রেরিগুলি উপরে বর্ণিত জটিলতাগুলিকে বিমূর্ত করে দেয় এবং পার্শ্ব চ্যানেল প্রদান করে যা প্রকাশক এবং SDK সমস্ত প্রক্রিয়া জুড়ে UI দেখানোর জন্য ব্যবহার করতে পারে এবং ব্যবহারকারী যখন এটির সাথে এবং ডিভাইসের সাথে ইন্টারঅ্যাক্ট করে তখন এটি আপডেট রাখতে পারে৷

তিনটি UI লাইব্রেরি রয়েছে: কোর , ক্লায়েন্ট এবং প্রদানকারী । মূল লাইব্রেরি ক্লায়েন্ট এবং প্রদানকারী লাইব্রেরি দ্বারা ব্যবহৃত ইন্টারফেস প্রদান করে। 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 সেশনের অবস্থার পরিবর্তনের জন্য একজন শ্রোতা।

ইলাস্ট্রেশন যা SDK রানটাইম UI উপস্থাপনা API সম্পর্ক দেখায়।
SDK রানটাইম UI উপস্থাপনা API-এর মধ্যে সম্পর্ক।

এই APIগুলির আরও বিশদ বিবরণের জন্য প্রাইভেসিস্যান্ডবক্স-ইউআই রেফারেন্স ডকুমেন্টেশন পড়ুন।

নিয়ন্ত্রণ প্রবাহ

নিম্নলিখিত চিত্রগুলি বিভিন্ন পরিস্থিতিতে ক্লায়েন্ট এবং প্রদানকারী UI লাইব্রেরির মধ্যে মিথস্ক্রিয়া দেখায়:

পূর্ববর্তী চিত্রটি দেখায় কিভাবে প্রকাশক একটি SandboxedSdkView প্রোগ্রাম্যাটিকভাবে বা তাদের XML এর মাধ্যমে তৈরি করতে পারে এবং এটি একটি SDK-সংজ্ঞায়িত API এর মাধ্যমে SDK থেকে প্রাপ্ত একটি SdkSandboxUiAdapter এর সাথে সংযুক্ত করতে পারে৷ সমস্ত UI অবস্থার পরিবর্তনগুলি পর্যবেক্ষণ করতে, প্রকাশককে SdkSandboxUiAdapter সংযুক্ত করার আগে SandboxedSdkView এ একটি SandboxedSdkUiSessionStateChangedListener যোগ করতে হবে।

উন্মুক্ত অধিবেশন প্রক্রিয়া দেখানো চিত্র.
SDK থেকে UI পান।

এই চিত্রটি দেখায় যে কিভাবে প্রকাশকের কার্যকলাপ কনফিগারেশন পরিবর্তনগুলি পরিচালনা করে, ক্লায়েন্ট লাইব্রেরি কনফিগারেশন পরিবর্তনটি SDK-এ ফরোয়ার্ড করার যত্ন নেয়, যাতে তারা সেই অনুযায়ী তাদের UI আপডেট করতে পারে। উদাহরণস্বরূপ, যখন ব্যবহারকারী ডিভাইসটি ঘোরায় এবং প্রকাশক android:configChanges=["orientation"] সেট করে তাদের কার্যকলাপে কনফিগারেশন পরিবর্তন পরিচালনা করার ঘোষণা দেয় তখন এই প্রবাহটি ট্রিগার হতে পারে।

প্রকাশক-সূচিত UI পরিবর্তন।

এই চিত্রটি ব্যাখ্যা করে কিভাবে SDK SessionClient এ পদ্ধতি ব্যবহার করে বিজ্ঞাপন কন্টেনারে পরিবর্তনের অনুরোধ করতে পারে। এই APIটি ট্রিগার হয় যখন SDK বিজ্ঞাপনের আকার পরিবর্তন করতে চায় এবং প্রকাশককে নতুন মাত্রাগুলিকে সামঞ্জস্য করার জন্য বিজ্ঞাপনের কন্টেইনারটির আকার পরিবর্তন করতে চায়৷ এটি ব্যবহারকারীর ইন্টারঅ্যাকশনের প্রতিক্রিয়াতে ঘটতে পারে, যেমন mraid.resize()

SDK-সূচিত UI পরিবর্তন।

SandboxedSdkView উইন্ডো থেকে বিচ্ছিন্ন হলে কীভাবে সেশন বন্ধ করা হয় তা এই চিত্রটি দেখায়। SDK দ্বারা SessionClient.onSessionError() চালু করে সেশনটি যে কোনো সময়ে (যেমন যখন ব্যবহারকারী নেটওয়ার্ক সংযোগ হারায়) বন্ধ করা যেতে পারে।

UI সেশন বন্ধ করা হচ্ছে।

জেড অর্ডার

ক্লায়েন্ট UI লাইব্রেরি SDK-এর UI হোস্ট করতে অভ্যন্তরীণভাবে একটি SurfaceView ব্যবহার করে। SurfaceView জেড অর্ডার ব্যবহার করতে পারে প্রকাশকের উইন্ডোর উপরে বা নীচে তার UI দেখাতে। এটি SandboxedSdkView.orderProviderUiAboveClientUi() পদ্ধতি দ্বারা নিয়ন্ত্রিত হয়, যা একটি বুলিয়ান setOnTop গ্রহণ করে।

setOnTop true হলে, SandboxedSdkView এর প্রতিটি android.view.MotionEvent SDK-এ পাঠানো হয়। false হলে, এগুলি প্রকাশকের কাছে পাঠানো হয়। ডিফল্টরূপে, মোশন ইভেন্টগুলি SDK-এ পাঠানো হয়।

প্রকাশকদের সাধারণত বিজ্ঞাপন দর্শনের ডিফল্ট Z-ক্রম পরিবর্তন করতে হবে না। যাইহোক, যখন একটি বিজ্ঞাপন কভার করে এমন UI দেখানোর সময়, যেমন একটি ড্রপ-ডাউন মেনু, Z-অর্ডারটি সাময়িকভাবে ডিফল্ট থেকে ফ্লিপ করা উচিত এবং তারপর কভারিং UI উপাদানটি খারিজ হয়ে গেলে পুনরুদ্ধার করা উচিত। আমরা ক্লায়েন্ট UI লাইব্রেরিতে এই প্রক্রিয়াটিকে স্বয়ংক্রিয় করার উপায়গুলি অন্বেষণ করছি৷

স্ক্রোলিং

যখন বিজ্ঞাপন UI-কে প্রকাশক উইন্ডোর উপরে Z-এ অর্ডার করা হয়, তখন বিজ্ঞাপন UI থেকে MotionEvents SDK-এ পাঠানো হয়। বিজ্ঞাপন UI-তে শুরু করা স্ক্রোল এবং ফ্লিং অঙ্গভঙ্গি বিশেষ চিকিত্সা পায়:

  1. উল্লম্ব স্ক্রোল এবং ফ্লিং অঙ্গভঙ্গি প্রকাশকের কন্টেইনারে পাঠানো এবং পরিচালনা করা হয়। এটি ভাল UX প্রদান করে যখন প্রকাশকের কন্টেনারে বিজ্ঞাপন UI রাখা হয়, উল্লম্বভাবে স্ক্রোল করা যায়। এর জন্য SDK বা প্রকাশকের পক্ষ থেকে কোনো অতিরিক্ত কাজের প্রয়োজন নেই।
  2. অনুভূমিক স্ক্রোল এবং ফ্লিং অঙ্গভঙ্গি SDK-এ পাঠানো এবং পরিচালনা করা হয়। এটি ভাল UX প্রদান করে যখন বিজ্ঞাপন UI নিজেই অনুভূমিকভাবে স্ক্রোল করা যায় (যেমন একটি বিজ্ঞাপন ক্যারোজেল)।

বাস্তবায়ন গাইড

SDK এর নিম্নলিখিতগুলি বাস্তবায়ন করা উচিত:

  • SandboxedUiAdapter : এটি একটি SDK-সংজ্ঞায়িত API, যেমন loadAd প্রতিক্রিয়া হিসাবে প্রকাশকের কাছে ফেরত দেওয়া হয়। এই বাস্তবায়নের openSession() পদ্ধতিটি SDK-এর সার্ভারগুলিতে একটি বিজ্ঞাপনের অনুরোধ করতে এবং সেই অনুরোধের জন্য একটি বিজ্ঞাপন দৃশ্য প্রস্তুত করতে ব্যবহার করা উচিত৷
  • Session** : এটি SandboxedUiAdapter.openSession কলের প্রতিক্রিয়া হিসাবে ফেরত দেওয়া হয়। এটি ক্লায়েন্ট লাইব্রেরির জন্য বিজ্ঞাপন UI পেতে এবং এই API-তে পরিবর্তন সম্পর্কে SDK-কে অবহিত করার একটি উপায় প্রদান করে৷ সমস্ত Session পদ্ধতি এখানে প্রয়োগ করা উচিত।

প্রকাশকের নিম্নলিখিতগুলি করা উচিত:

  1. একটি SandboxedSdkView তৈরি করুন, হয় XML এর মাধ্যমে বা প্রোগ্রাম্যাটিকভাবে।
  2. UI-তে পরিবর্তনগুলি পর্যবেক্ষণ করতে SandboxedSdkView এ একটি SandboxedSdkUiSessionStateChangedListener সংযুক্ত করুন।
  3. SandboxedSdkView এ একটি SDK প্রদত্ত SandboxedUiAdapter সংযুক্ত করুন।
  4. যথারীতি উইন্ডোতে SandboxedSdkView যোগ করুন এবং ক্লায়েন্ট লাইব্রেরীকে SDK-এর সাথে UI সেশন তৈরি ও বজায় রাখার যত্ন নিতে দিন।
  5. উপযুক্ত সময়ে, SandboxedSdkUiSessionChangedListener দ্বারা রিপোর্ট করা রাজ্যের পরিবর্তনের প্রতি প্রতিক্রিয়া জানান। উদাহরণস্বরূপ, যদি SDK সেশনটি অপ্রত্যাশিতভাবে বন্ধ করে দেয়, তাহলে প্রকাশক একটি স্ট্যাটিক চিত্র দিয়ে SandboxedSdkView প্রতিস্থাপন করতে পারেন, অথবা তাদের ভিউ হায়ারার্কি থেকে সরিয়ে দিতে পারেন।
  6. বিজ্ঞাপন UI-কে কভার করতে পারে এমন ট্রানজিশন করার সময়, যেমন একটি ড্রপ ডাউন মেনু, সাময়িকভাবে orderProviderUiAboveClientUi কে মিথ্যা থেকে প্রকাশকের উইন্ডোর নীচে বিজ্ঞাপন UI-এর অবস্থান করার জন্য অর্ডার করুন। একবার ড্রপ ডাউন মেনু খারিজ হয়ে গেলে, orderProviderUiAboveClientUi true তে কল করুন।

প্ল্যাটফর্ম API এর ভবিষ্যত

একবার UI লাইব্রেরিগুলি বিটাতে চলে গেলে, আমরা UI উপস্থাপনা সম্পর্কিত SDK রানটাইম প্ল্যাটফর্ম APIs, যেমন SdkSandboxManager.requestSurfacePackage() এবং SandbxedSdkProvider.getView() গুলিকে অবমূল্যায়ন করার পরিকল্পনা করি৷

খোলা প্রশ্ন

  1. আরও সাধারণ বিজ্ঞাপন UI ব্যবহারের ক্ষেত্রে কি UI লাইব্রেরিগুলি স্বয়ংক্রিয়ভাবে পরিচালনা করা উচিত?
  2. বিজ্ঞাপন UI দেখানোর জন্য আপনি কোন UI ফ্রেমওয়ার্ক ব্যবহার করেন, আপনি কি এই ফ্রেমওয়ার্কগুলির সাথে UI লাইব্রেরিগুলিকে একীভূত করতে সমস্যাগুলি অনুমান করেন?
  3. একটি স্ক্রোলযোগ্য প্রকাশক কন্টেনারে স্ক্রোলযোগ্য বিজ্ঞাপন UI কি আপনার জন্য একটি সাধারণ ব্যবহারের ক্ষেত্রে? এই ক্ষেত্রে বিজ্ঞাপন UI এবং কন্টেইনারের জন্য স্ক্রোলের দিকনির্দেশনা কী? ব্যবহারকারী যখন বিজ্ঞাপন UI-তে একটি স্ক্রোল শুরু করেন তখন আপনি কী আচরণ আশা করেন?