ব্যবহারকারীরা যেখানে আছেন সেখানে তাদের কাছে পৌঁছে অ্যাপ এনগেজমেন্ট বুস্ট করুন। Engage SDK ইন্টিগ্রেট করুন যাতে একাধিক অন-ডিভাইস সারফেস জুড়ে ব্যবহারকারীদের সরাসরি পছন্দমতো সাজেশন এবং কন্টিনিউয়েশন কন্টেন্ট ডেলিভার করা যায়, যেমন কালেকশন, Entertainment Space এবং Play Store। ইন্টিগ্রেশনটি গড় APK-তে ৫০ কেবি (কমপ্রেস করা) থেকে কম যোগ করে এবং বেশিরভাগ অ্যাপের ক্ষেত্রে ডেভেলপারের প্রায় এক সপ্তাহ সময় নেয়। আমাদের ব্যবসার সাইট থেকে আরও জানুন।
এই গাইডে ডেভেলপার পার্টনারদের জন্য নির্দেশাবলী রয়েছে যাতে তারা Engage কন্টেন্ট সারফেসে পড়ার কন্টেন্ট (ই-বুক, অডিওবুক, কমিকস/মাঙ্গা, ব্লগ, খবর এবং ম্যাগাজিন) প্রদান করতে পারে।
বিভাগ সংক্রান্ত সহায়তা ও সারফেস
Engage SDK সারফেসের উপযুক্ততা আপনার অ্যাপের কন্টেন্ট বিভাগের উপর নির্ভর করে। নির্দিষ্ট সারফেসে আপনার যোগ্যতা নির্ধারণ করতে নিম্নলিখিত টেবিল ব্যবহার করুন:
| স্ট্যাটাস | কন্টেন্ট বিভাগ বা ব্যবহারিক প্রয়োগ | যেসব সারফেসে কাজ করে |
|---|---|---|
|
কাজ করে (সব সারফেসে উপযুক্ত) |
|
|
|
আংশিকভাবে কাজ করে (কিছু সারফেসে উপযুক্ত) |
|
|
| কাজ করে না |
|
খবরের অ্যাপ
খবরের অ্যাপ বিভিন্ন ধরনের কন্টেন্ট প্রদান করে, যার প্রতিটি অনন্য যোগ্যতার নিয়মের অধীন। Play Store-এ Engage SDK কন্টেন্ট Play Premium Growth Tools-এর সাথে সামঞ্জস্যপূর্ণ, তাই খবর সম্পর্কিত নিবন্ধ এবং খবরের অ্যাপ থেকে ভিডিও ক্লিপ Play Store-এর জন্য উপযুক্ত নয়, যদিও সেগুলি Collections এবং Entertainment Space-এর জন্য উপযুক্ত। অন্যদিকে, পডকাস্ট ও রেসিপির মতো অপ্রথাগত খবরের কন্টেন্ট Play Store-এর জন্য উপযুক্ত হতে পারে:
| এন্টিটির ধরন | কালেকশনের জন্য উপযুক্ত | Entertainment Space-এর জন্য উপযুক্ত | Play Store-এর জন্য উপযুক্ত |
|---|---|---|---|
| খবর সম্পর্কিত নিবন্ধ | হ্যাঁ (পড়ার ট্যাব) | হ্যাঁ (পড়ার ট্যাব) | না |
| ভিডিও ক্লিপ | হ্যাঁ (ওয়াচ ট্যাব) | হ্যাঁ (ওয়াচ ট্যাব) | না |
| পডকাস্ট | হ্যাঁ (শুনুন ট্যাব) | হ্যাঁ (শুনুন ট্যাব) | হ্যাঁ |
| রেসিপি | হ্যাঁ (খাবারের ট্যাব) | না | হ্যাঁ |
Android স্কিল
GitHub-এ দেখুনEngage SDK ইন্টিগ্রেট করা
android skills add engage-sdk-integrationইন্টিগ্রেশনের বিবরণ
এই বিভাগে, কন্টেন্ট পড়ার জন্য Engage SDK-এর সাথে ইন্টিগ্রেট করার জন্য প্রয়োজনীয় ধাপ, ডেটা মডেল এবং পরিভাষা সম্পর্কে বিস্তারিত বিবরণ দেওয়া হয়েছে।
পরিভাষা
এই ইন্টিগ্রেশনে নিম্নলিখিত তিনটি ক্লাস্টারের ধরন অন্তর্ভুক্ত: সাজেশন, চালিয়ে যাওয়া এবং ফিচার করা।
সাজেশন ক্লাস্টার, কোনও একজন ডেভেলপার পার্টনারের থেকে পড়ার জন্য কন্টেন্টের পছন্দমতো সাজেশন দেখায়।
আপনার সাজেশন নিম্নলিখিত স্ট্রাকচার অনুযায়ী তৈরি হয়:
সাজেশন ক্লাস্টার: একটি UI ভিউ যাতে একজন ডেভেলপার পার্টনারের সাজেশনের একটি গ্রুপ থাকে।
ছবি ১. Entertainment Space UI-তে একটি পার্টনারের থেকে পাওয়া সাজেশন ক্লাস্টার দেখানো হচ্ছে। এন্টিটি: ক্লাস্টারে একটি আইটেমকে উপস্থাপন করে এমন অবজেক্ট। কোনও এন্টিটি ই-বুক, অডিও বুক, বইয়ের সিরিজ এবং আরও অনেক কিছু হতে পারে। কাজ করে এমন এন্টিটির ধরনের তালিকা দেখতে এন্টিটি ডেটা প্রদান করুন বিভাগ দেখুন।
ছবি ২. Entertainment Space UI-তে একটি পার্টনারের সাজেশন ক্লাস্টারের মধ্যে একটি এন্টিটি দেখানো হচ্ছে।
পড়া চালিয়ে যান ক্লাস্টার, একাধিক ডেভেলপার পার্টনারের অসম্পূর্ণ বইগুলি একটি UI গ্রুপিংয়ে দেখায়। প্রত্যেক ডেভেলপার পার্টনারকে কন্টিনিউয়েশন ক্লাস্টারে সর্বাধিক ১০টি এন্টিটি ব্রডকাস্ট করার অনুমতি দেওয়া হবে।
ছবি ৩. Entertainment Space UI-তে একাধিক পার্টনারের অসম্পূর্ণ সাজেশন সহ একটি কন্টিনিউয়েশন ক্লাস্টার দেখানো হচ্ছে (বর্তমানে শুধুমাত্র একটি সাজেশন দেখা যাচ্ছে)। ফিচার করা ক্লাস্টার, একটি UI গ্রুপিংয়ে একাধিক ডেভেলপার পার্টনারের থেকে বেছে নেওয়া আইটেম দেখায়। একটিই ফিচার করা ক্লাস্টার থাকবে, যা UI-এর উপরের দিকে দেখানো হবে এবং এটি সব সাজেশন ক্লাস্টারের উপরে অগ্রাধিকারের ভিত্তিতে প্লেস করা হবে। প্রত্যেক ডেভেলপার পার্টনারকে ফিচার করা ক্লাস্টারে সর্বাধিক ১০টি এন্টিটি ব্রডকাস্ট করার অনুমতি দেওয়া হবে।
ছবি ৪. Entertainment Space UI-তে একাধিক পার্টনারের থেকে পাওয়া সাজেশন সহ ফিচার করা ক্লাস্টার দেখানো হচ্ছে (বর্তমানে শুধুমাত্র একটি সাজেশন দেখা যাচ্ছে)।
প্রি-ওয়ার্ক
ন্যূনতম API লেভেল: ১৯
আপনার অ্যাপে com.google.android.engage:engage-core লাইব্রেরি যোগ করুন:
dependencies {
// Make sure you also include that repository in your project's build.gradle file.
implementation 'com.google.android.engage:engage-core:1.6.0'
}
সারাংশ
ডিজাইনটি বাউন্ড পরিষেবার প্রয়োগের উপর ভিত্তি করে তৈরি করা হয়েছে।
ক্লায়েন্ট যে ডেটা প্রকাশ করতে পারে তা বিভিন্ন ক্লাস্টার ধরনের জন্য নিম্নলিখিত সীমার অধীন:
| ক্লাস্টারের ধরন | ক্লাস্টারের সীমা | একটি ক্লাস্টারে সর্বাধিক এন্টিটি সীমা |
|---|---|---|
| সাজেশন ক্লাস্টার | সর্বাধিক ৭টি | সর্বাধিক ৫০টি |
| কন্টিনিউয়েশন ক্লাস্টার | সর্বাধিক ১টি | সর্বাধিক ২০টি |
| ফিচার করা ক্লাস্টার | সর্বাধিক ১টি | সর্বাধিক ২০টি |
ধাপ ১: এন্টিটি ডেটা প্রদান করুন
প্রতিটি আইটেমের ধরন দেখানোর জন্য SDK-তে বিভিন্ন এন্টিটি সংজ্ঞায়িত করা আছে। আমরা 'পড়া' বিভাগের জন্য নিম্নলিখিত এন্টিটি সাপোর্ট করি:
EbookEntityAudiobookEntityBookSeriesEntity
নিম্নলিখিত চার্টে প্রতিটি ধরনের জন্য উপলভ্য অ্যাট্রিবিউট ও প্রয়োজনীয়তার আউটলাইন দেওয়া আছে।
EbookEntity
EbookEntity অবজেক্টটি একটি ইবুককে উপস্থাপন করে (যেমন, মিশেল ওবামার
Becoming-এর ইবুক)।
| অ্যাট্রিবিউট | প্রয়োজনীয়তা | নোট |
|---|---|---|
| নাম | প্রয়োজনীয় | |
| পোস্টার ছবি | প্রয়োজনীয় | অন্তত একটি ছবি দিতে হবে। সহায়তার জন্য ছবির স্পেসিফিকেশন দেখুন। |
| লেখক | প্রয়োজনীয় | অন্তত একজন লেখকের নাম দিতে হবে। |
| অ্যাকশন লিঙ্ক URI | প্রয়োজনীয় |
ই-বুকের জন্য পরিষেবা প্রদানকারীর অ্যাপের ডিপ লিঙ্ক। মনে রাখবেন: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারবেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন |
| পাবলিশ হওয়ার তারিখ | ঐচ্ছিক | প্রদান করা হলে, ইপক মিলিসেকেন্ডে। |
| বর্ণনা | ঐচ্ছিক | উল্লেখ করা হলে, ২০০ অক্ষরের মধ্যে হতে হবে। |
| দাম | ঐচ্ছিক | ফ্রি টেক্সট |
| পৃষ্ঠার সংখ্যা | ঐচ্ছিক | উল্লেখ করা হলে, অবশ্যই একটি ধনাত্মক পূর্ণসংখ্যা হতে হবে। |
| জনরা | ঐচ্ছিক | বইয়ের সাথে সম্পর্কিত জনরার তালিকা। |
| সিরিজের নাম | ঐচ্ছিক | ই-বুকটি যে সিরিজের অন্তর্গত তার নাম (যেমন, Harry Potter)। |
| সিরিজ ইউনিট ইন্ডেক্স | ঐচ্ছিক | সিরিজে ই-বুকের ইন্ডেক্স, যেখানে ১ হল সিরিজের প্রথম ই-বুক। যেমন, Harry Potter and the Prisoner of Azkaban সিরিজের ৩য় বই হলে, এটি ৩ হিসেবে সেট করতে হবে। |
| বইয়ের ধরন বেছে নেওয়া চালিয়ে যান | ঐচ্ছিক |
TYPE_CONTINUE - অসমাপ্ত বই আবার পড়া শুরু করুন। TYPE_NEXT - সিরিজের নতুন একটিতে চালিয়ে যান। TYPE_NEW - নতুন রিলিজ করা হয়েছে। |
| শেষবার এনগেজ হওয়ার সময় | শর্তসাপেক্ষে প্রয়োজন |
আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। *নতুন* কেনা ইবুক 'পড়া চালিয়ে যান' ক্লাস্টারের অংশ হতে পারে। Epoch মিলিসেকেন্ডে। |
| কত শতাংশ সম্পূর্ণ হয়েছে | শর্তসাপেক্ষে প্রয়োজন |
আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। ভ্যালু ০-এর বেশি এবং ১০০-এর কম হতে হবে। |
| DisplayTimeWindow - সারফেসে কন্টেন্ট দেখানোর জন্য একটি টাইম উইন্ডো সেট করুন | ||
| শুরুর টাইমস্ট্যাম্প | ঐচ্ছিক |
যে ইপক টাইমস্ট্যাম্পের পরে সারফেসে কন্টেন্ট দেখানো হবে। সেট করা না থাকলে, কন্টেন্ট সারফেসে দেখানোর উপযুক্ত হবে। Epoch মিলিসেকেন্ডে। |
| শেষের টাইমস্ট্যাম্প | ঐচ্ছিক |
যে ইপক টাইমস্ট্যাম্পের পরে কন্টেন্ট আর সারফেসে দেখানো হয় না। সেট করা না থাকলে, কন্টেন্ট সারফেসে দেখানোর উপযুক্ত হবে। Epoch মিলিসেকেন্ডে। |
AudiobookEntity
AudiobookEntity অবজেক্ট একটি অডিওবুককে উপস্থাপন করে (যেমন, মিশেল ওবামার
Becoming-এর অডিওবুক)।
| অ্যাট্রিবিউট | প্রয়োজনীয়তা | নোট |
|---|---|---|
| নাম | প্রয়োজনীয় | |
| পোস্টার ছবি | প্রয়োজনীয় | অন্তত একটি ছবি দিতে হবে। সহায়তার জন্য ছবির স্পেসিফিকেশন দেখুন। |
| লেখক | প্রয়োজনীয় | অন্তত একজন লেখকের নাম দিতে হবে। |
| অ্যাকশন লিঙ্ক URI | প্রয়োজনীয় |
অডিওবুকের জন্য পরিষেবা প্রদানকারী অ্যাপের ডিপ লিঙ্ক। মনে রাখবেন: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারবেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন |
| ভাষ্যকার | ঐচ্ছিক | অন্তত একজন ন্যারেটরের নাম দিতে হবে। |
| পাবলিশ হওয়ার তারিখ | ঐচ্ছিক | প্রদান করা হলে, ইপক মিলিসেকেন্ডে। |
| বর্ণনা | ঐচ্ছিক | উল্লেখ করা হলে, ২০০ অক্ষরের মধ্যে হতে হবে। |
| দাম | ঐচ্ছিক | ফ্রি টেক্সট |
| সময়সীমা | ঐচ্ছিক | প্রদান করা হলে, অবশ্যই পজিটিভ ভ্যালু হতে হবে। |
| জনরা | ঐচ্ছিক | বইয়ের সাথে সম্পর্কিত জনরার তালিকা। |
| সিরিজের নাম | ঐচ্ছিক | অডিওবুকটি যে সিরিজের অন্তর্গত তার নাম (যেমন, হ্যারি পটার। |
| সিরিজ ইউনিট ইন্ডেক্স | ঐচ্ছিক | সিরিজে অডিওবুকের ইন্ডেক্স, যেখানে ১ হল সিরিজের প্রথম অডিওবুক। যেমন, Harry Potter and the Prisoner of Azkaban সিরিজের ৩য় বই হলে, এটি ৩ হিসেবে সেট করতে হবে। |
| বইয়ের ধরন বেছে নেওয়া চালিয়ে যান | ঐচ্ছিক |
TYPE_CONTINUE - অসমাপ্ত বই আবার পড়া শুরু করুন। TYPE_NEXT - সিরিজের নতুন একটিতে চালিয়ে যান। TYPE_NEW - নতুন রিলিজ করা হয়েছে। |
| শেষবার এনগেজ হওয়ার সময় | শর্তসাপেক্ষে প্রয়োজন | আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। Epoch মিলিসেকেন্ডে। |
| কত শতাংশ সম্পূর্ণ হয়েছে | শর্তসাপেক্ষে প্রয়োজন |
আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। *নতুন* কেনা অডিওবুক, পড়া চালিয়ে যাওয়ার ক্লাস্টারের অংশ হতে পারে। ভ্যালু ০-এর বেশি এবং ১০০-এর কম হতে হবে। |
| DisplayTimeWindow - সারফেসে কন্টেন্ট দেখানোর জন্য একটি টাইম উইন্ডো সেট করুন | ||
| শুরুর টাইমস্ট্যাম্প | ঐচ্ছিক |
যে ইপক টাইমস্ট্যাম্পের পরে সারফেসে কন্টেন্ট দেখানো হবে। সেট করা না থাকলে, কন্টেন্ট সারফেসে দেখানোর উপযুক্ত হবে। Epoch মিলিসেকেন্ডে। |
| শেষের টাইমস্ট্যাম্প | ঐচ্ছিক |
যে ইপক টাইমস্ট্যাম্পের পরে কন্টেন্ট আর সারফেসে দেখানো হয় না। সেট করা না থাকলে, কন্টেন্ট সারফেসে দেখানোর উপযুক্ত হবে। Epoch মিলিসেকেন্ডে। |
BookSeriesEntity
BookSeriesEntity অবজেক্টটি বইয়ের সিরিজকে (যেমন, হ্যারি পটার বইয়ের সিরিজ, যাতে ৭টি বই আছে) বোঝায়।
| অ্যাট্রিবিউট | প্রয়োজনীয়তা | নোট |
|---|---|---|
| নাম | প্রয়োজনীয় | |
| পোস্টার ছবি | প্রয়োজনীয় | অন্তত একটি ছবি দিতে হবে। সহায়তার জন্য ছবির স্পেসিফিকেশন দেখুন। |
| লেখক | প্রয়োজনীয় | অন্তত একজন লেখকের নাম থাকতে হবে। |
| অ্যাকশন লিঙ্ক URI | প্রয়োজনীয় |
অডিওবুক বা ইবুকের জন্য পরিষেবা প্রদানকারী অ্যাপের ডিপ লিঙ্ক। মনে রাখবেন: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারবেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন |
| বইয়ের সংখ্যা | প্রয়োজনীয় | সিরিজে থাকা বইয়ের সংখ্যা। |
| বর্ণনা | ঐচ্ছিক | উল্লেখ করা হলে, ২০০ অক্ষরের মধ্যে হতে হবে। |
| জনরা | ঐচ্ছিক | বইয়ের সাথে সম্পর্কিত জনরার তালিকা। |
| বইয়ের ধরন বেছে নেওয়া চালিয়ে যান | ঐচ্ছিক |
TYPE_CONTINUE - অসমাপ্ত বই আবার পড়া শুরু করুন। TYPE_NEXT - সিরিজের নতুন একটিতে চালিয়ে যান। TYPE_NEW - নতুন রিলিজ করা হয়েছে। |
| শেষবার এনগেজ হওয়ার সময় | শর্তসাপেক্ষে প্রয়োজন | আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। Epoch মিলিসেকেন্ডে। |
| কত শতাংশ সম্পূর্ণ হয়েছে | শর্তসাপেক্ষে প্রয়োজন | আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে অবশ্যই প্রদান করতে হবে। *নতুন* কেনা বইয়ের সিরিজ, পড়া চালিয়ে যাওয়ার ক্লাস্টারের অংশ হতে পারে। ভ্যালু ০-এর বেশি এবং ১০০-এর কম হতে হবে। |
| DisplayTimeWindow - সারফেসে কন্টেন্ট দেখানোর জন্য একটি টাইম উইন্ডো সেট করুন | ||
| শুরুর টাইমস্ট্যাম্প | ঐচ্ছিক |
যে ইপক টাইমস্ট্যাম্পের পরে সারফেসে কন্টেন্ট দেখানো হবে। সেট করা না থাকলে, কন্টেন্ট সারফেসে দেখানোর উপযুক্ত হবে। Epoch মিলিসেকেন্ডে। |
| শেষের টাইমস্ট্যাম্প | ঐচ্ছিক |
যে ইপক টাইমস্ট্যাম্পের পরে কন্টেন্ট আর সারফেসে দেখানো হয় না। সেট করা না থাকলে, কন্টেন্ট সারফেসে দেখানোর উপযুক্ত হবে। Epoch মিলিসেকেন্ডে। |
ছবির স্পেসিফিকেশন
নিচের সারণীতে ইমেজ অ্যাসেটের জন্য প্রয়োজনীয় স্পেসিফিকেশন তালিকাভুক্ত করা হয়েছে:
| অ্যাস্পেক্ট রেশিও | মানানসই ক্লাস্টার | ন্যূনতম পিক্সেল | সাজেস্ট করা পিক্সেল |
|---|---|---|---|
| বর্গাকার (১x১) | সব ক্লাস্টার | ৩০০x৩০০ | ১২০০x১২০০ |
| ল্যান্ডস্কেপ (১.৯১x১) | ফিচার করা ও কন্টিনিউয়েশন | ৬০০x৩১৪ | ১২০০x৬২৮ |
| পোর্ট্রেট (৪x৫) | সাজেশন | ৪৮০x৬০০ | ৯৬০x১২০০ |
ফাইলের ফর্ম্যাট
PNG, JPG, স্ট্যাটিক GIF, WebP
ফাইলের সর্বাধিক সাইজ
৫১২০ কেবি
অতিরিক্ত সাজেশন
- ছবির নিরাপদ এলাকা: আপনার গুরুত্বপূর্ণ কন্টেন্ট ছবির মাঝখানের ৮০% অংশে রাখুন।
উদাহরণ
AudiobookEntity audiobookEntity =
new AudiobookEntity.Builder()
.setName("Becoming")
.addPosterImage(
new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(960)
.setImageWidthInPixel(408)
.build())
.addAuthor("Michelle Obama")
.addNarrator("Michelle Obama")
.setActionLinkUri(Uri.parse("https://play.google/audiobooks/1"))
.setDurationMillis(16335L)
.setPublishDateEpochMillis(1633032895L)
.setDescription("An intimate, powerful, and inspiring memoir")
.setPrice("$16.95")
.addGenre("biography")
.build();
ধাপ ২: ক্লাস্টার ডেটা প্রদান করুন
কন্টেন্ট প্রকাশ করার কাজ ব্যাকগ্রাউন্ডে চালানো (যেমন, WorkManager ব্যবহার করে) এবং নিয়মিতভাবে বা কোনও ইভেন্টের ভিত্তিতে শিডিউল করা সাজেস্ট করা হয় (যেমন, প্রতিবার ব্যবহারকারী অ্যাপ খুললে বা ব্যবহারকারী তার কার্টে কিছু যোগ করলে)।
AppEngagePublishClient ক্লাস্টার প্রকাশ করার জন্য দায়বদ্ধ। ক্লায়েন্টে
নিম্নলিখিত API উপলভ্য:
isServiceAvailablepublishRecommendationClusterspublishFeaturedClusterpublishContinuationClusterpublishUserAccountManagementRequestupdatePublishStatusdeleteRecommendationsClustersdeleteFeaturedClusterdeleteContinuationClusterdeleteUserManagementClusterdeleteClusters
isServiceAvailable
ইন্টিগ্রেশনের জন্য পরিষেবা উপলভ্য কিনা এবং ডিভাইসে কন্টেন্ট দেখানো যাবে কিনা তা চেক করতে এই API ব্যবহার করা হয়।
Engage SDK v1.6.0 এবং তার পরবর্তী ভার্সনের জন্য (সাজেস্ট করা)
Android স্কিল
GitHub-এ দেখুনEngage SDK ইন্টিগ্রেশন
android skills add engage-sdk-integrationUse the engage-sdk-integration skill to use Engage SDK 1.6.0 and refactor isServiceAvailable to pass ServiceAvailabilityRequest for publishing all cluster types.আপনি প্রকাশ করতে চান এমন প্রতিটি ক্লাস্টার প্রকারের জন্য পরিষেবার উপলভ্যতা চেক করতে পারেন। isServiceAvailable API একটি অনুরোধ অবজেক্ট গ্রহণ করে,
ServiceAvailabilityRequest, যার মধ্যে ক্লাস্টার প্রকারগুলি রয়েছে যার জন্য পরিষেবা
উপলভ্যতা চেক করা প্রয়োজন। ServiceAvailabilityRequest-এর জন্য প্রয়োজনীয় ClusterType এনাম ভ্যালু
আপনি নিম্নলিখিত টেবিল থেকে খুঁজে পাবেন।
| ক্লাস্টারের ধরন | ক্লাস্টারের ধরন কনস্ট্যান্ট | পূর্ণসংখ্যার মান |
|---|---|---|
| অজানা | TYPE_UNKNOWN |
0 |
| সাজেশন ক্লাস্টার | TYPE_RECOMMENDATION |
1 |
| ফিচার করা ক্লাস্টার | TYPE_FEATURED |
2 |
| কন্টিনিউয়েশন ক্লাস্টার | TYPE_CONTINUATION |
3 |
| ব্যবহারকারী ম্যানেজমেন্ট ক্লাস্টার | TYPE_ENGAGEMENT |
8 |
| সাবস্ক্রিপশন ক্লাস্টার | TYPE_SUBSCRIPTION |
12 |
Kotlin
val request = ServiceAvailabilityRequest.Builder()
.addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
.addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
.build()
client.isServiceAvailable(request).addOnCompleteListener { task ->
if (task.isSuccessful) {
val availabilityMap = task.result
if (availabilityMap[ClusterType.TYPE_CONTINUATION] == true) {
// Proceed with publishing continuation content
}
if (availabilityMap[ClusterType.TYPE_RECOMMENDATION] == true) {
// Proceed with publishing recommendation content
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
জাভা
ServiceAvailabilityRequest request =
new ServiceAvailabilityRequest.Builder()
.addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
.addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
.build();
client.isServiceAvailable(request).addOnCompleteListener(task -> {
if (task.isSuccessful()) {
Map<Integer, Boolean> availabilityMap = task.getResult();
if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_CONTINUATION))) {
// Proceed with publishing continuation content
}
if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_RECOMMENDATION))) {
// Proceed with publishing recommendation content
}
} else {
// The IPC call itself fails, proceed with error handling logic here such as retry.
}
});
শর্তসাপেক্ষ পরিষেবা উপলভ্যতা ফিচার
কিছু ইন্টিগ্রেটেড অ্যাপ বিশেষ কনফিগারেশনের অনুরোধ করে যা খরচ কমানোর জন্য Engage পরিষেবা মাঝে মাঝে চালু ও বন্ধ করে। তবে, এই মাঝে মাঝে কন্টেন্ট ইনজেশন স্ট্র্যাটেজি ব্যবহারকারীর অভিজ্ঞতায় নেতিবাচক প্রভাব ফেলে: পুরনো কন্টেন্ট দেখানো হবে না এবং কিছু সারফেস পরিবেশন করা হবে না।
v1.6.0 থেকে শুরু করে, Engage SDK নির্দিষ্ট ক্লাস্টার ধরনের জন্য উপলভ্যতা চেক করার অনুমতি দেয়। আপনার অ্যাপ যদি মাঝে মাঝে ইনজেশন ব্যবহার করে:
- কন্টিনিউয়েশন ক্লাস্টার (যেমন, পড়া চালিয়ে যান) সব কাজ করে এমন ডিভাইসে ডিফল্ট হিসেবে চালু থাকে।
- অন্যান্য ক্লাস্টারের ধরন (যেমন সাজেশন) মাঝে মাঝে চালু ও বন্ধ করা হয়।
এই ডিফল্ট কনফিগারেশন আপনার প্রয়োজন অনুযায়ী উপযুক্ত না হলে, engage-developers@google.com-এ যোগাযোগ করুন।
v1.6.0-এর আগের SDK ভার্সনের জন্য (বন্ধ হয়ে গেছে)
Kotlin
client.isServiceAvailable.addOnCompleteListener { task ->
if (task.isSuccessful) {
// Handle IPC call success
if(task.result) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
জাভা
client.isServiceAvailable().addOnCompleteListener(task - > {
if (task.isSuccessful()) {
// Handle success
if(task.getResult()) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
publishRecommendationClusters
RecommendationCluster অবজেক্টের তালিকা প্রকাশ করতে এই API ব্যবহার করা হয়।
Kotlin
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Reconnect with yourself")
.build())
.build())
জাভা
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
new RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Reconnect with yourself")
.build())
.build());
পরিষেবাটি অনুরোধ পেলে, একটি ট্রানজ্যাকশনের মধ্যে নিম্নলিখিত অ্যাকশনগুলি নেওয়া হয়:
- ডেভেলপার পার্টনারের থেকে পাওয়া আগে থেকে থাকা
RecommendationClusterডেটা সরিয়ে দেওয়া হয়েছে। - অনুরোধ থেকে পাওয়া ডেটা পার্স করা হয় এবং আপডেট করা সাজেশন ক্লাস্টারে স্টোর করা হয়।
কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং বর্তমান স্ট্যাটাস বজায় রাখা হয়।
publishFeaturedCluster
FeaturedCluster অবজেক্টের তালিকা প্রকাশ করতে এই API ব্যবহার করা হয়।
Kotlin
client.publishFeaturedCluster(
PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
FeaturedCluster.Builder()
...
.build())
.build())
জাভা
client.publishFeaturedCluster(
new PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
new FeaturedCluster.Builder()
...
.build())
.build());
পরিষেবাটি অনুরোধ পেলে, একটি ট্রানজ্যাকশনের মধ্যে নিম্নলিখিত অ্যাকশনগুলি নেওয়া হয়:
- ডেভেলপার পার্টনারের থেকে পাওয়া আগে থেকে থাকা
FeaturedClusterডেটা সরিয়ে দেওয়া হয়েছে। - অনুরোধ থেকে পাওয়া ডেটা পার্স করা হয় এবং আপডেট করা ফিচার ক্লাস্টারে স্টোর করা হয়।
কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং বর্তমান স্ট্যাটাস বজায় রাখা হয়।
publishContinuationCluster
এই API-এর মাধ্যমে ContinuationCluster অবজেক্ট প্রকাশ করা হয়।
Kotlin
client.publishContinuationCluster(
PublishContinuationClusterRequest.Builder()
.setContinuationCluster(
ContinuationCluster.Builder()
.addEntity(book_entity1)
.addEntity(book_entity2)
.build())
.build())
জাভা
client.publishContinuationCluster(
PublishContinuationClusterRequest.Builder()
.setContinuationCluster(
ContinuationCluster.Builder()
.addEntity(book_entity1)
.addEntity(book_entity2)
.build())
.build())
পরিষেবাটি অনুরোধ পেলে, একটি ট্রানজ্যাকশনের মধ্যে নিম্নলিখিত অ্যাকশনগুলি নেওয়া হয়:
- ডেভেলপার পার্টনারের থেকে পাওয়া আগে থেকে থাকা
ContinuationClusterডেটা সরিয়ে দেওয়া হয়েছে। - অনুরোধ থেকে পাওয়া ডেটা পার্স করা হয় এবং আপডেট করা কন্টিনিউয়েশন ক্লাস্টারে স্টোর করা হয়।
কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং বর্তমান স্ট্যাটাস বজায় রাখা হয়।
publishUserAccountManagementRequest
এই API ব্যবহার করে সাইন-ইন কার্ড প্রকাশ করা হয়। সাইন-ইন অ্যাকশন ব্যবহারকারীকে অ্যাপের সাইন-ইন পৃষ্ঠায় নিয়ে যায় যাতে অ্যাপটি কন্টেন্ট প্রকাশ করতে পারে (অথবা আরও পছন্দমতো কন্টেন্ট প্রদান করতে পারে)
নিম্নলিখিত মেটাডেটা সাইন-ইন কার্ডের অংশ -
| অ্যাট্রিবিউট | প্রয়োজনীয়তা | বর্ণনা |
|---|---|---|
| অ্যাকশন Uri | প্রয়োজনীয় | অ্যাকশনের ডিপলিঙ্ক (যেমন, অ্যাপের সাইন-ইন পৃষ্ঠায় নেভিগেট করে) |
| ছবি | ঐচ্ছিক - এটি না দিলে, শীর্ষক দিতেই হবে |
কার্ডে দেখানো ছবি ১২৬৪x৭১২ রেজোলিউশন সহ ১৬x৯ অ্যাস্পেক্ট রেশিওর ছবি |
| শীর্ষক | ঐচ্ছিক - এটি না দিলে, ছবি দিতেই হবে | কার্ডে লেখা নাম |
| অ্যাকশন টেক্সট | ঐচ্ছিক | CTA-তে দেখানো টেক্সট (যেমন, সাইন-ইন করুন) |
| সাবটাইটেল | ঐচ্ছিক | কার্ডে ঐচ্ছিক সাবটাইটেল |
Kotlin
var SIGN_IN_CARD_ENTITY =
SignInCardEntity.Builder()
.addPosterImage(
Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build()
client.publishUserAccountManagementRequest(
PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
জাভা
SignInCardEntity SIGN_IN_CARD_ENTITY =
new SignInCardEntity.Builder()
.addPosterImage(
new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build();
client.publishUserAccountManagementRequest(
new PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
পরিষেবাটি অনুরোধ পেলে, একটি ট্রানজ্যাকশনের মধ্যে নিম্নলিখিত অ্যাকশনগুলি নেওয়া হয়:
- ডেভেলপার পার্টনারের থেকে পাওয়া আগে থেকে থাকা
UserAccountManagementClusterডেটা সরিয়ে দেওয়া হয়েছে। - অনুরোধ থেকে পাওয়া ডেটা পার্স করা হয় এবং আপডেট করা UserAccountManagementCluster ক্লাস্টারে স্টোর করা হয়।
কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং বর্তমান স্ট্যাটাস বজায় রাখা হয়।
updatePublishStatus
কোনও অভ্যন্তরীণ ব্যবসায়িক কারণে, কোনও ক্লাস্টার প্রকাশ করা না হলে, আমরা updatePublishStatus API ব্যবহার করে প্রকাশের স্ট্যাটাস আপডেট করার জন্য জোরালোভাবে সাজেস্ট করি। এটি গুরুত্বপূর্ণ কারণ :
- কন্টেন্ট প্রকাশিত হলেও (STATUS == PUBLISHED), সব পরিস্থিতিতে স্ট্যাটাস প্রদান করা গুরুত্বপূর্ণ, যাতে ড্যাশবোর্ডগুলি আপনার ইন্টিগ্রেশনের স্বাস্থ্য এবং অন্যান্য মেট্রিক্স জানাতে এই স্পষ্ট স্ট্যাটাস ব্যবহার করতে পারে।
- কোনও কন্টেন্ট প্রকাশ করা না হলেও ইন্টিগ্রেশন স্ট্যাটাস যদি ঠিক থাকে (STATUS == NOT_PUBLISHED), Google অ্যাপের হেলথ ড্যাশবোর্ডে অ্যালার্ট ট্রিগার করা এড়াতে পারে। এটি নিশ্চিত করে যে প্রদানকারীর দৃষ্টিকোণ থেকে একটি প্রত্যাশিত পরিস্থিতির কারণে কন্টেন্ট প্রকাশ করা হয়নি।
- এটি ডেভেলপারদের ডেটা কখন প্রকাশিত হয় বনাম কখন হয় না সে সম্পর্কে ইনসাইট প্রদান করতে সাহায্য করে।
- Google স্ট্যাটাস কোড ব্যবহার করে ব্যবহারকারীকে অ্যাপে নির্দিষ্ট কিছু অ্যাকশন করার জন্য অনুরোধ করতে পারে যাতে তারা অ্যাপের কন্টেন্ট দেখতে বা সমস্যাটি সমাধান করতে পারে।
প্রকাশের স্ট্যাটাস কোডের তালিকা হল :
// Content is published
AppEngagePublishStatusCode.PUBLISHED,
// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,
// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,
// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,
// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,
// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,
// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,
// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,
// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER
ব্যবহারকারী লগ-ইন না করার কারণে কন্টেন্ট প্রকাশ করা না হলে, Google সাইন-ইন কার্ড প্রকাশ করার সাজেশন দেবে। কোনও কারণে পরিষেবা প্রদানকারী সাইন-ইন কার্ড প্রকাশ করতে না পারলে, আমরা স্ট্যাটাস কোড NOT_PUBLISHED_REQUIRES_SIGN_IN সহ updatePublishStatus API কল করার সাজেশন দিই
Kotlin
client.updatePublishStatus(
PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build())
জাভা
client.updatePublishStatus(
new PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build());
deleteRecommendationsClusters
এই API-এর মাধ্যমে সাজেশন ক্লাস্টারের কন্টেন্ট মুছে ফেলা হয়।
Kotlin
client.deleteRecommendationsClusters()
জাভা
client.deleteRecommendationsClusters();
পরিষেবাটি অনুরোধ পেলে, এটি সাজেশন ক্লাস্টার থেকে আগে থেকে থাকা ডেটা সরিয়ে দেয়। কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং আগের অবস্থা বজায় রাখা হয়।
deleteFeaturedCluster
ফিচার করা ক্লাস্টারের কন্টেন্ট মুছে দিতে এই API ব্যবহার করা হয়।
Kotlin
client.deleteFeaturedCluster()
জাভা
client.deleteFeaturedCluster();
পরিষেবাটি অনুরোধ পেলে, এটি ফিচার করা ক্লাস্টার থেকে আগে থেকে থাকা ডেটা সরিয়ে দেয়। কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং আগের অবস্থা বজায় রাখা হয়।
deleteContinuationCluster
এই API কন্টিনিউয়েশন ক্লাস্টারের কন্টেন্ট মুছে ফেলার জন্য ব্যবহার করা হয়।
Kotlin
client.deleteContinuationCluster()
জাভা
client.deleteContinuationCluster();
পরিষেবাটি অনুরোধ পেলে, এটি কন্টিনিউয়েশন ক্লাস্টার থেকে আগে থেকে থাকা ডেটা সরিয়ে দেয়। কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং আগের অবস্থা বজায় রাখা হয়।
deleteUserManagementCluster
UserAccountManagement ক্লাস্টারের কন্টেন্ট মুছে ফেলার জন্য এই API ব্যবহার করা হয়।
Kotlin
client.deleteUserManagementCluster()
জাভা
client.deleteUserManagementCluster();
পরিষেবাটি অনুরোধ পেলে, এটি UserAccountManagement ক্লাস্টার থেকে আগে থেকে থাকা ডেটা সরিয়ে দেয়। কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং আগের অবস্থা বজায় রাখা হয়।
deleteClusters
প্রদত্ত ক্লাস্টার টাইপের কন্টেন্ট মুছে ফেলার জন্য এই API ব্যবহার করা হয়।
Kotlin
client.deleteClusters(
DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build())
জাভা
client.deleteClusters(
new DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build());
পরিষেবাটি অনুরোধ পেলে, এটি নির্দিষ্ট ক্লাস্টার প্রকারের সাথে মিলে যাওয়া সমস্ত ক্লাস্টার থেকে বিদ্যমান ডেটা সরিয়ে দেয়। ক্লায়েন্ট এক বা একাধিক ক্লাস্টার টাইপ পাস করার বিকল্প বেছে নিতে পারেন। কোনও সমস্যা হলে, সম্পূর্ণ অনুরোধ বাতিল করা হয় এবং বর্তমান স্ট্যাটাস বজায় রাখা হয়।
সমস্যা ম্যানেজ করা
প্রকাশিত API থেকে টাস্কের ফলাফল শোনার জন্য অত্যন্ত সাজেস্ট করা হয় যাতে একটি সফল টাস্ক রিকভার ও আবার জমা দেওয়ার জন্য ফলো-আপ অ্যাকশন নেওয়া যেতে পারে।
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(...)
.build())
.addOnCompleteListener(
task -> {
if (task.isSuccessful()) {
// do something
} else {
Exception exception = task.getException();
if (exception instanceof AppEngageException) {
@AppEngageErrorCode
int errorCode = ((AppEngageException) exception).getErrorCode();
if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
// do something
}
}
}
});
সমস্যাটি AppEngageException হিসেবে দেখানো হয় এবং এর কারণ হিসেবে
সমস্যার কোড উল্লেখ করা থাকে।
| সমস্যার কোড | সমস্যার নাম | মনে রাখবেন |
|---|---|---|
1 |
SERVICE_NOT_FOUND |
প্রদত্ত ডিভাইসে পরিষেবাটি উপলভ্য নয়। |
2 |
SERVICE_NOT_AVAILABLE |
পরিষেবাটি প্রদত্ত ডিভাইসে উপলভ্য, তবে কল করার সময় এটি উপলভ্য নয় (যেমন, এটি স্পষ্টভাবে বন্ধ করা আছে)। |
3 |
SERVICE_CALL_EXECUTION_FAILURE |
থ্রেডিং সংক্রান্ত সমস্যার কারণে টাস্ক এক্সিকিউট করা যায়নি। এই ক্ষেত্রে, এটি আবার চেষ্টা করা যেতে পারে। |
4 |
SERVICE_CALL_PERMISSION_DENIED |
কলারকে পরিষেবা কল করার অনুমতি দেওয়া হয়নি। |
5 |
SERVICE_CALL_INVALID_ARGUMENT |
অনুরোধে ভুল ডেটা আছে (যেমন, অনুমোদিত ক্লাস্টারের সংখ্যার চেয়ে বেশি)। |
6 |
SERVICE_CALL_INTERNAL |
পরিষেবার দিকে কোনও সমস্যা হয়েছে। |
7 |
SERVICE_CALL_RESOURCE_EXHAUSTED |
পরিষেবা কল খুব ঘন ঘন করা হয়। |
ধাপ ৩: ব্রডকাস্ট ইনটেন্ট ম্যানেজ করা
জবের মাধ্যমে কন্টেন্ট প্রকাশ করার API কল করার পাশাপাশি, কন্টেন্ট প্রকাশের অনুরোধ পাওয়ার জন্য
BroadcastReceiver সেট-আপ
করতে হবে।
ব্রডকাস্ট ইনটেন্টের লক্ষ্য হল মূলত অ্যাপ আবার অ্যাক্টিভেট করা এবং ডেটা সিঙ্ক করতে বাধ্য করা। ব্রডকাস্ট ইনটেন্ট খুব ঘন ঘন পাঠানোর জন্য ডিজাইন করা হয়নি। এটি শুধুমাত্র তখনই ট্রিগার করা হয় যখন Engage পরিষেবা নির্ধারণ করে যে কন্টেন্টটি বাসি হতে পারে (যেমন, এক সপ্তাহ পুরনো)। এর ফলে, ব্যবহারকারী অনেকদিন ধরে অ্যাপ্লিকেশন ব্যবহার না করলেও, তিনি যে নতুন কন্টেন্ট দেখতে পাবেন, সেই ব্যাপারে আরও বেশি নিশ্চিত হওয়া যায়।
BroadcastReceiver অবশ্যই নিম্নলিখিত দুটি উপায়ে সেট-আপ করতে হবে:
Context.registerReceiver()ব্যবহার করেBroadcastReceiverক্লাসের ইনস্ট্যান্স ডায়নামিক্যালি রেজিস্টার করুন। এটি মেমরিতে এখনও লাইভ আছে এমন অ্যাপ্লিকেশন থেকে কমিউনিকেশন চালু করে।
Kotlin
class AppEngageBroadcastReceiver : BroadcastReceiver(){
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}
fun registerBroadcastReceivers(context: Context){
var context = context
context = context.applicationContext
// Register Recommendation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Featured Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Continuation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
}
জাভা
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}
public static void registerBroadcastReceivers(Context context) {
context = context.getApplicationContext();
// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
}
আপনার
AndroidManifest.xmlফাইলে<receiver>ট্যাগ সহ স্ট্যাটিক্যালি একটি ইমপ্লিমেন্টেশন ঘোষণা করুন। এটি অ্যাপ্লিকেশনটিকে ব্রডকাস্ট ইনটেন্ট গ্রহণ করার অনুমতি দেয় যখন এটি চলছে না এবং অ্যাপ্লিকেশনটিকে কন্টেন্ট প্রকাশ করারও অনুমতি দেয়।
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
</intent-filter>
</receiver>
</application>
পরিষেবাটি নিম্নলিখিত ইনটেন্ট পাঠাবে:
com.google.android.engage.action.PUBLISH_RECOMMENDATIONএই ইনটেন্ট পাওয়ার সময়publishRecommendationClustersকল শুরু করার সাজেশন দেওয়া হয়।com.google.android.engage.action.PUBLISH_FEATUREDএই ইনটেন্ট পাওয়ার সময়publishFeaturedClusterকল শুরু করার সাজেশন দেওয়া হয়।- এই ইনটেন্ট পাওয়ার সময়
com.google.android.engage.action.PUBLISH_CONTINUATION
It is recommended to start apublishContinuationCluster` কল করুন।
ইন্টিগ্রেশন ওয়ার্কফ্লো
ইন্টিগ্রেশন সম্পূর্ণ হওয়ার পরে সেটি যাচাই করার জন্য ধাপে-ধাপে গাইড পেতে, Engage ডেভেলপার ইন্টিগ্রেশন ওয়ার্কফ্লো দেখুন।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
প্রায়শই জিজ্ঞাসিত প্রশ্নের জন্য Engage SDK-এর প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন।
যোগাযোগ করুন
ইন্টিগ্রেশন প্রসেস চলাকালীন কোনও প্রশ্ন থাকলে, engage-developers@google.com-এর সাথে যোগাযোগ করুন। আমাদের টিম যত তাড়াতাড়ি সম্ভব উত্তর দেবে।
পরবর্তী ধাপ
এই ইন্টিগ্রেশন সম্পূর্ণ করার পরে, আপনার পরবর্তী ধাপগুলি নিম্নরূপ:
engage-developers@google.com-এ ইমেল পাঠান এবং Google-এর মাধ্যমে পরীক্ষা করার জন্য প্রস্তুত আপনার ইন্টিগ্রেটেড APK অ্যাটাচ করুন।- ইন্টিগ্রেশন যাতে প্রত্যাশা অনুযায়ী কাজ করে তা নিশ্চিত করতে Google ইন্টার্নালি যাচাই ও পর্যালোচনা করবে। কোনও পরিবর্তন করতে হলে, Google প্রয়োজনীয় বিবরণ সহ আপনার সাথে যোগাযোগ করবে।
- টেস্টিং সম্পূর্ণ হয়ে গেলে এবং কোনও পরিবর্তন করার প্রয়োজন না থাকলে, Google আপনার সাথে যোগাযোগ করে জানাবে যে আপনি Play Store-এ আপডেট করা ও ইন্টিগ্রেট করা APK প্রকাশ করা শুরু করতে পারেন।
- Google-এর থেকে আপনার আপডেট করা APK Play Store-এ প্রকাশ করা হয়েছে বলে কনফার্মেশন পাওয়ার পরে, আপনার সাজেশন, ফিচার করা এবং চালিয়ে যাওয়া ক্লাস্টার প্রকাশ করা হবে এবং ব্যবহারকারীরা দেখতে পাবেন।