Google একটি অন-ডিভাইস পৃষ্ঠ তৈরি করছে যা ব্যবহারকারীদের অ্যাপগুলিকে উল্লম্বভাবে সংগঠিত করে এবং ব্যক্তিগতকৃত অ্যাপ সামগ্রী ব্যবহার এবং আবিষ্কারের জন্য একটি নতুন নিমজ্জিত অভিজ্ঞতা সক্ষম করে৷ এই ফুলস্ক্রিন অভিজ্ঞতা ডেভেলপার অংশীদারদের তাদের অ্যাপের বাইরে একটি ডেডিকেটেড চ্যানেলে তাদের সেরা সমৃদ্ধ সামগ্রী প্রদর্শন করার সুযোগ দেয়।
এই নির্দেশিকাটিতে বিকাশকারী অংশীদারদের জন্য তাদের পঠনযোগ্য বিষয়বস্তুকে একীভূত করার জন্য নির্দেশাবলী রয়েছে, এই নতুন পৃষ্ঠ এলাকা এবং বিদ্যমান Google সারফেস উভয়কেই জনবহুল করতে Engage SDK ব্যবহার করে৷
ইন্টিগ্রেশন বিস্তারিত
পরিভাষা
এই ইন্টিগ্রেশনে নিম্নলিখিত তিনটি ক্লাস্টার প্রকার রয়েছে: সুপারিশ , ধারাবাহিকতা , এবং বৈশিষ্ট্যযুক্ত ৷
সুপারিশ ক্লাস্টারগুলি একটি পৃথক বিকাশকারী অংশীদার থেকে পড়ার জন্য সামগ্রীর জন্য ব্যক্তিগতকৃত পরামর্শগুলি দেখায়৷
আপনার সুপারিশগুলি নিম্নলিখিত কাঠামো গ্রহণ করে:
সুপারিশ ক্লাস্টার: একটি UI ভিউ যাতে একটি একক বিকাশকারী অংশীদার থেকে সুপারিশের একটি গোষ্ঠী রয়েছে৷
সত্তা: একটি বস্তু একটি ক্লাস্টারে একটি একক আইটেম প্রতিনিধিত্ব করে। একটি সত্তা একটি ইবুক, একটি অডিও বই, একটি বইয়ের সিরিজ এবং আরও অনেক কিছু হতে পারে। সমর্থিত সত্তা প্রকারের তালিকার জন্য সত্তা ডেটা প্রদান বিভাগটি দেখুন।
কন্টিনিউয়েশন ক্লাস্টার একটি একক UI গ্রুপিং-এ একাধিক বিকাশকারী অংশীদারদের থেকে অসমাপ্ত বই দেখায়। প্রতিটি বিকাশকারী অংশীদারকে কন্টিনিউয়েশন ক্লাস্টারে সর্বাধিক 10টি সত্তা সম্প্রচার করার অনুমতি দেওয়া হবে।
বৈশিষ্ট্যযুক্ত ক্লাস্টারটি একটি একক UI গ্রুপিংয়ে একাধিক বিকাশকারী অংশীদারদের থেকে আইটেমগুলির একটি নির্বাচন প্রদর্শন করে৷ একটি একক বৈশিষ্ট্যযুক্ত ক্লাস্টার থাকবে, যা সমস্ত সুপারিশ ক্লাস্টারের উপরে একটি অগ্রাধিকার প্লেসমেন্ট সহ UI এর শীর্ষের কাছে প্রদর্শিত হবে৷ প্রতিটি বিকাশকারী অংশীদারকে বৈশিষ্ট্যযুক্ত ক্লাস্টারে 10টি পর্যন্ত সম্প্রচার করার অনুমতি দেওয়া হবে।
প্রাক কাজ
ন্যূনতম API স্তর: 19
আপনার অ্যাপে 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.5.2'
}
সারাংশ
নকশা একটি আবদ্ধ সেবা বাস্তবায়ন উপর ভিত্তি করে.
একটি ক্লায়েন্ট যে ডেটা প্রকাশ করতে পারে তা বিভিন্ন ক্লাস্টার প্রকারের জন্য নিম্নলিখিত সীমার সাপেক্ষে:
ক্লাস্টার টাইপ | ক্লাস্টার সীমা | একটি ক্লাস্টারে সত্তার সর্বোচ্চ সীমা |
---|---|---|
সুপারিশ ক্লাস্টার(গুলি) | সর্বাধিক 5 | সর্বাধিক 50 |
ধারাবাহিকতা ক্লাস্টার | সর্বোচ্চ 1 | সর্বাধিক 10 |
বৈশিষ্ট্যযুক্ত ক্লাস্টার | সর্বোচ্চ 1 | সর্বাধিক 10 |
ধাপ 1: সত্তা তথ্য প্রদান
প্রতিটি আইটেমের প্রকারের প্রতিনিধিত্ব করার জন্য SDK বিভিন্ন সত্তাকে সংজ্ঞায়িত করেছে। আমরা পঠিত বিভাগের জন্য নিম্নলিখিত সংস্থাগুলিকে সমর্থন করি:
-
EbookEntity
-
AudiobookEntity
-
BookSeriesEntity
নীচের চার্টগুলি প্রতিটি ধরণের জন্য উপলব্ধ বৈশিষ্ট্য এবং প্রয়োজনীয়তার রূপরেখা দেয়।
EbookEntity
EbookEntity
অবজেক্ট একটি ইবুক প্রতিনিধিত্ব করে (উদাহরণস্বরূপ, মিশেল ওবামার ইবুক অফ বিকমিং )।
বৈশিষ্ট্য | প্রয়োজনীয়তা | নোট |
---|---|---|
নাম | প্রয়োজন | |
পোস্টার ছবি | প্রয়োজন | অন্তত একটি ছবি প্রদান করা আবশ্যক. নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন. |
লেখক | প্রয়োজন | অন্তত একজন লেখকের নাম দিতে হবে। |
অ্যাকশন লিঙ্ক ইউরি | প্রয়োজন | ইবুকের জন্য প্রদানকারী অ্যাপের গভীর লিঙ্ক। দ্রষ্টব্য: আপনি অ্যাট্রিবিউশনের জন্য গভীর লিঙ্ক ব্যবহার করতে পারেন। এই FAQ পড়ুন |
তারিখ প্রকাশ করুন | ঐচ্ছিক | প্রদান করা হলে যুগের মিলিসেকেন্ডে। |
বর্ণনা | ঐচ্ছিক | প্রদান করা হলে 200 অক্ষরের মধ্যে হতে হবে। |
দাম | ঐচ্ছিক | বিনামূল্যে পাঠ্য |
পৃষ্ঠা গণনা | ঐচ্ছিক | প্রদান করা হলে অবশ্যই একটি ধনাত্মক পূর্ণসংখ্যা হতে হবে। |
ধারা | ঐচ্ছিক | বইয়ের সাথে সম্পর্কিত ঘরানার তালিকা। |
সিরিজের নাম | ঐচ্ছিক | ইবুকটি যে সিরিজের সাথে সম্পর্কিত তার নাম (উদাহরণস্বরূপ, হ্যারি পটার )। |
সিরিজ ইউনিট সূচক | ঐচ্ছিক | সিরিজের ইবুকের সূচী, যেখানে 1 সিরিজের প্রথম ইবুক। উদাহরণস্বরূপ, হ্যারি পটার অ্যান্ড দ্য প্রিজনার অফ আজকাবান সিরিজের 3য় বই হলে, এটি 3-এ সেট করা উচিত। |
বইয়ের ধরন চালিয়ে যান | ঐচ্ছিক | TYPE_CONTINUE - একটি অসমাপ্ত বইতে পুনরায় শুরু করুন। TYPE_NEXT - একটি সিরিজের একটি নতুন চালিয়ে যান। TYPE_NEW - সদ্য প্রকাশিত হয়েছে৷ |
শেষ বাগদানের সময় | শর্তসাপেক্ষে প্রয়োজন | আইটেমটি যখন কন্টিনিউয়েশন ক্লাস্টারে থাকে তখন অবশ্যই প্রদান করতে হবে। *নতুন* অর্জিত ইবুকগুলি অবিরত পড়ার ক্লাস্টারের একটি অংশ হতে পারে। যুগের মিলিসেকেন্ডে। |
শতকরা অগ্রগতি সম্পূর্ণ | শর্তসাপেক্ষে প্রয়োজন | আইটেমটি যখন কন্টিনিউয়েশন ক্লাস্টারে থাকে তখন অবশ্যই প্রদান করতে হবে। মান অবশ্যই 0-এর বেশি এবং 100-এর কম হতে হবে। |
DisplayTimeWindow - পৃষ্ঠে দেখানোর জন্য একটি বিষয়বস্তুর জন্য একটি সময় উইন্ডো সেট করুন | ||
টাইমস্ট্যাম্প শুরু করুন | ঐচ্ছিক | যুগের টাইমস্ট্যাম্প যার পরে বিষয়বস্তু পৃষ্ঠে দেখানো উচিত। যদি সেট না করা হয়, তাহলে বিষয়বস্তু পৃষ্ঠে দেখানোর যোগ্য। যুগের মিলিসেকেন্ডে। |
শেষ টাইমস্ট্যাম্প | ঐচ্ছিক | যুগের টাইমস্ট্যাম্প যার পরে বিষয়বস্তু পৃষ্ঠে আর দেখানো হয় না। যদি সেট না করা হয়, তাহলে বিষয়বস্তু পৃষ্ঠে দেখানোর যোগ্য। যুগের মিলিসেকেন্ডে। |
AudiobookEntity
AudiobookEntity
অবজেক্ট একটি অডিওবুক প্রতিনিধিত্ব করে (উদাহরণস্বরূপ, মিশেল ওবামার অডিওবুক বেকমিং )।
বৈশিষ্ট্য | প্রয়োজনীয়তা | নোট |
---|---|---|
নাম | প্রয়োজন | |
পোস্টার ছবি | প্রয়োজন | অন্তত একটি ছবি প্রদান করা আবশ্যক. নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন. |
লেখক | প্রয়োজন | অন্তত একজন লেখকের নাম দিতে হবে। |
বর্ণনাকারী | প্রয়োজন | অন্তত একজন বর্ণনাকারীর নাম অবশ্যই দিতে হবে। |
অ্যাকশন লিঙ্ক ইউরি | প্রয়োজন | অডিওবুকের জন্য প্রদানকারী অ্যাপের গভীর লিঙ্ক। দ্রষ্টব্য: আপনি অ্যাট্রিবিউশনের জন্য গভীর লিঙ্ক ব্যবহার করতে পারেন। এই FAQ পড়ুন |
তারিখ প্রকাশ করুন | ঐচ্ছিক | প্রদান করা হলে যুগের মিলিসেকেন্ডে। |
বর্ণনা | ঐচ্ছিক | প্রদান করা হলে 200 অক্ষরের মধ্যে হতে হবে। |
দাম | ঐচ্ছিক | বিনামূল্যে পাঠ্য |
সময়কাল | ঐচ্ছিক | প্রদান করা হলে অবশ্যই একটি ইতিবাচক মান হতে হবে। |
ধারা | ঐচ্ছিক | বইয়ের সাথে সম্পর্কিত ঘরানার তালিকা। |
সিরিজের নাম | ঐচ্ছিক | সিরিজের নাম যে অডিওবুকটির অন্তর্গত (উদাহরণস্বরূপ, হ্যারি পটার । |
সিরিজ ইউনিট সূচক | ঐচ্ছিক | সিরিজের অডিওবুকের সূচী, যেখানে 1 সিরিজের প্রথম অডিওবুক। উদাহরণস্বরূপ, হ্যারি পটার অ্যান্ড দ্য প্রিজনার অফ আজকাবান সিরিজের 3য় বই হলে, এটি 3-এ সেট করা উচিত। |
বইয়ের ধরন চালিয়ে যান | ঐচ্ছিক | TYPE_CONTINUE - একটি অসমাপ্ত বইতে পুনরায় শুরু করুন। TYPE_NEXT - একটি সিরিজের একটি নতুন চালিয়ে যান। TYPE_NEW - সদ্য প্রকাশিত হয়েছে৷ |
শেষ বাগদানের সময় | শর্তসাপেক্ষে প্রয়োজন | আইটেমটি যখন কন্টিনিউয়েশন ক্লাস্টারে থাকে তখন অবশ্যই প্রদান করতে হবে। যুগের মিলিসেকেন্ডে। |
শতকরা অগ্রগতি সম্পূর্ণ | শর্তসাপেক্ষে প্রয়োজন | আইটেমটি যখন কন্টিনিউয়েশন ক্লাস্টারে থাকে তখন অবশ্যই প্রদান করতে হবে। *নতুন* অর্জিত অডিওবুকগুলি অবিরত পড়ার ক্লাস্টারের একটি অংশ হতে পারে। মান অবশ্যই 0-এর বেশি এবং 100-এর কম হতে হবে। |
DisplayTimeWindow - পৃষ্ঠে দেখানোর জন্য একটি বিষয়বস্তুর জন্য একটি সময় উইন্ডো সেট করুন | ||
টাইমস্ট্যাম্প শুরু করুন | ঐচ্ছিক | যুগের টাইমস্ট্যাম্প যার পরে বিষয়বস্তু পৃষ্ঠে দেখানো উচিত। যদি সেট না করা হয়, তাহলে বিষয়বস্তু পৃষ্ঠে দেখানোর যোগ্য। যুগের মিলিসেকেন্ডে। |
শেষ টাইমস্ট্যাম্প | ঐচ্ছিক | যুগের টাইমস্ট্যাম্প যার পরে বিষয়বস্তু পৃষ্ঠে আর দেখানো হয় না। যদি সেট না করা হয়, তাহলে বিষয়বস্তু পৃষ্ঠে দেখানোর যোগ্য। যুগের মিলিসেকেন্ডে। |
BookSeriesEntity
BookSeriesEntity
অবজেক্ট একটি বই সিরিজের প্রতিনিধিত্ব করে (উদাহরণস্বরূপ, হ্যারি পটার বই সিরিজ, যাতে 7টি বই রয়েছে)।
বৈশিষ্ট্য | প্রয়োজনীয়তা | নোট |
---|---|---|
নাম | প্রয়োজন | |
পোস্টার ছবি | প্রয়োজন | অন্তত একটি ছবি প্রদান করা আবশ্যক. নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন. |
লেখক | প্রয়োজন | অন্তত একজন লেখকের নাম উপস্থিত থাকতে হবে। |
অ্যাকশন লিঙ্ক ইউরি | প্রয়োজন | অডিওবুক বা ইবুকের জন্য প্রদানকারী অ্যাপের গভীর লিঙ্ক। দ্রষ্টব্য: আপনি অ্যাট্রিবিউশনের জন্য গভীর লিঙ্ক ব্যবহার করতে পারেন। এই FAQ পড়ুন |
বই গণনা | প্রয়োজন | সিরিজের বইয়ের সংখ্যা। |
বর্ণনা | ঐচ্ছিক | প্রদান করা হলে 200 অক্ষরের মধ্যে হতে হবে। |
ধারা | ঐচ্ছিক | বইয়ের সাথে সম্পর্কিত ঘরানার তালিকা। |
বইয়ের ধরন চালিয়ে যান | ঐচ্ছিক | TYPE_CONTINUE - একটি অসমাপ্ত বইতে পুনরায় শুরু করুন। TYPE_NEXT - একটি সিরিজের একটি নতুন চালিয়ে যান। TYPE_NEW - সদ্য প্রকাশিত হয়েছে৷ |
শেষ বাগদানের সময় | শর্তসাপেক্ষে প্রয়োজন | আইটেমটি যখন কন্টিনিউয়েশন ক্লাস্টারে থাকে তখন অবশ্যই প্রদান করতে হবে। যুগের মিলিসেকেন্ডে। |
শতকরা অগ্রগতি সম্পূর্ণ | শর্তসাপেক্ষে প্রয়োজন | আইটেমটি যখন কন্টিনিউয়েশন ক্লাস্টারে থাকে তখন অবশ্যই প্রদান করতে হবে। *নতুন* অর্জিত বই সিরিজটি অবিরত পড়ার ক্লাস্টারের একটি অংশ হতে পারে। মান অবশ্যই 0-এর বেশি এবং 100-এর কম হতে হবে। |
DisplayTimeWindow - পৃষ্ঠে দেখানোর জন্য একটি বিষয়বস্তুর জন্য একটি সময় উইন্ডো সেট করুন | ||
টাইমস্ট্যাম্প শুরু করুন | ঐচ্ছিক | যুগের টাইমস্ট্যাম্প যার পরে বিষয়বস্তু পৃষ্ঠে দেখানো উচিত। যদি সেট না করা হয়, তাহলে বিষয়বস্তু পৃষ্ঠে দেখানোর যোগ্য। যুগের মিলিসেকেন্ডে। |
শেষ টাইমস্ট্যাম্প | ঐচ্ছিক | যুগের টাইমস্ট্যাম্প যার পরে বিষয়বস্তু পৃষ্ঠে আর দেখানো হয় না। যদি সেট না করা হয়, তাহলে বিষয়বস্তু পৃষ্ঠে দেখানোর যোগ্য। যুগের মিলিসেকেন্ডে। |
ইমেজ স্পেসিফিকেশন
ইমেজ সম্পদের জন্য প্রয়োজনীয় স্পেসিফিকেশন নীচে তালিকাভুক্ত করা হয়েছে:
আকৃতির অনুপাত | প্রয়োজনীয়তা | ন্যূনতম পিক্সেল | প্রস্তাবিত পিক্সেল |
---|---|---|---|
বর্গক্ষেত্র (1x1) | প্রয়োজন | 300x300 | 1200x1200 |
ল্যান্ডস্কেপ (1.91x1) | ঐচ্ছিক | 600x314 | 1200x628 |
প্রতিকৃতি (4x5) | ঐচ্ছিক | 480x600 | 960x1200 |
ফাইল ফরম্যাট
PNG, JPG, স্ট্যাটিক GIF, WebP
সর্বোচ্চ ফাইলের আকার
5120 KB
অতিরিক্ত সুপারিশ
- ছবি নিরাপদ এলাকা: ছবির 80% কেন্দ্রে আপনার গুরুত্বপূর্ণ বিষয়বস্তু রাখুন।
উদাহরণ
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();
ধাপ 2: ক্লাস্টার ডেটা প্রদান করুন
বিষয়বস্তু প্রকাশের কাজটি ব্যাকগ্রাউন্ডে কার্যকর করা বাঞ্ছনীয় (উদাহরণস্বরূপ, WorkManager ব্যবহার করে) এবং একটি নিয়মিত ভিত্তিতে বা একটি ইভেন্টের ভিত্তিতে নির্ধারিত (উদাহরণস্বরূপ, ব্যবহারকারী যখনই অ্যাপটি খোলে বা যখন ব্যবহারকারী তাদের কিছু যোগ করে কার্ট)।
AppEngagePublishClient
ক্লাস্টার প্রকাশের জন্য দায়ী। নিম্নলিখিত APIগুলি ক্লায়েন্টে উপলব্ধ:
-
isServiceAvailable
-
publishRecommendationClusters
-
publishFeaturedCluster
-
publishContinuationCluster
-
publishUserAccountManagementRequest
-
updatePublishStatus
-
deleteRecommendationsClusters
-
deleteFeaturedCluster
-
deleteContinuationCluster
-
deleteUserManagementCluster
-
deleteClusters
isServiceAvailable
পরিষেবাটি ইন্টিগ্রেশনের জন্য উপলব্ধ কিনা এবং ডিভাইসে সামগ্রী উপস্থাপন করা যেতে পারে কিনা তা পরীক্ষা করতে এই API ব্যবহার করা হয়।
কোটলিন
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 ব্যবহার করা হয়।
কোটলিন
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
এই APIটি FeaturedCluster
অবজেক্টের একটি তালিকা প্রকাশ করতে ব্যবহৃত হয়।
কোটলিন
client.publishFeaturedCluster( PublishFeaturedClusterRequest.Builder() .setFeaturedCluster( FeaturedCluster.Builder() ... .build()) .build())
জাভা
client.publishFeaturedCluster( new PublishFeaturedClusterRequest.Builder() .setFeaturedCluster( new FeaturedCluster.Builder() ... .build()) .build());
যখন পরিষেবাটি অনুরোধটি গ্রহণ করে, নিম্নলিখিত ক্রিয়াগুলি একটি লেনদেনের মধ্যে সঞ্চালিত হয়:
- বিকাশকারী অংশীদার থেকে বিদ্যমান
FeaturedCluster
ডেটা সরানো হয়েছে৷ - অনুরোধের ডেটা পার্স করা হয় এবং আপডেট করা বৈশিষ্ট্যযুক্ত ক্লাস্টারে সংরক্ষণ করা হয়।
একটি ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধ প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
publishContinuationCluster
এই API একটি ContinuationCluster
অবজেক্ট প্রকাশ করতে ব্যবহৃত হয়।
কোটলিন
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 একটি সাইন ইন কার্ড প্রকাশ করতে ব্যবহৃত হয়। সাইন ইন অ্যাকশন ব্যবহারকারীদের অ্যাপের সাইন ইন পৃষ্ঠায় নির্দেশ করে যাতে অ্যাপটি সামগ্রী প্রকাশ করতে পারে (বা আরও ব্যক্তিগতকৃত সামগ্রী সরবরাহ করতে পারে)
নিম্নলিখিত মেটাডেটা সাইন ইন কার্ডের অংশ -
বৈশিষ্ট্য | প্রয়োজনীয়তা | বর্ণনা |
---|---|---|
অ্যাকশন উরি | প্রয়োজন | ডিপলিংক টু অ্যাকশন (অর্থাৎ অ্যাপ সাইন ইন পৃষ্ঠায় নেভিগেট করে) |
ছবি | ঐচ্ছিক - প্রদান করা না হলে, শিরোনাম প্রদান করা আবশ্যক | কার্ডে দেখানো ছবি 1264x712 রেজোলিউশন সহ 16x9 আকৃতির অনুপাতের ছবি |
শিরোনাম | ঐচ্ছিক - প্রদান না করা হলে, ছবি প্রদান করতে হবে | কার্ডে শিরোনাম |
অ্যাকশন টেক্সট | ঐচ্ছিক | CTA-তে টেক্সট দেখানো হয়েছে (যেমন সাইন ইন) |
সাবটাইটেল | ঐচ্ছিক | কার্ডে ঐচ্ছিক সাবটাইটেল |
কোটলিন
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
যদি কোনও অভ্যন্তরীণ ব্যবসায়িক কারণে, ক্লাস্টারগুলির কোনওটিই প্রকাশিত না হয়, আমরা দৃঢ়ভাবে আপডেট পাবলিশ স্ট্যাটাস API ব্যবহার করে প্রকাশের স্থিতি আপডেট করার সুপারিশ করি৷ এটি গুরুত্বপূর্ণ কারণ:
- সমস্ত পরিস্থিতিতে স্ট্যাটাস প্রদান করা, এমনকি যখন বিষয়বস্তু প্রকাশিত হয় (স্ট্যাটাস == প্রকাশিত), ড্যাশবোর্ডগুলিকে পপুলেট করার জন্য গুরুত্বপূর্ণ যেগুলি আপনার ইন্টিগ্রেশনের স্বাস্থ্য এবং অন্যান্য মেট্রিক্স জানাতে এই স্পষ্ট স্ট্যাটাস ব্যবহার করে।
- যদি কোনো বিষয়বস্তু প্রকাশিত না হয় কিন্তু ইন্টিগ্রেশন স্ট্যাটাস ভাঙা না হয় (STATUS == NOT_PUBLISHED), 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 কল করার পরামর্শ দিই
কোটলিন
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());
deleteRecommendationClusters
এই APIটি সুপারিশ ক্লাস্টারের বিষয়বস্তু মুছে ফেলার জন্য ব্যবহার করা হয়।
কোটলিন
client.deleteRecommendationClusters()
জাভা
client.deleteRecommendationClusters();
যখন পরিষেবাটি অনুরোধ গ্রহণ করে, তখন এটি সুপারিশ ক্লাস্টারগুলি থেকে বিদ্যমান ডেটা সরিয়ে দেয়। একটি ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধ প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
deleteFeaturedCluster
এই APIটি বৈশিষ্ট্যযুক্ত ক্লাস্টারের বিষয়বস্তু মুছে ফেলার জন্য ব্যবহৃত হয়।
কোটলিন
client.deleteFeaturedCluster()
জাভা
client.deleteFeaturedCluster();
যখন পরিষেবাটি অনুরোধ গ্রহণ করে, এটি বৈশিষ্ট্যযুক্ত ক্লাস্টার থেকে বিদ্যমান ডেটা সরিয়ে দেয়। একটি ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধ প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
deleteContinuationCluster
এই API কন্টিনিউয়েশন ক্লাস্টারের বিষয়বস্তু মুছে ফেলার জন্য ব্যবহার করা হয়।
কোটলিন
client.deleteContinuationCluster()
জাভা
client.deleteContinuationCluster();
যখন পরিষেবাটি অনুরোধটি গ্রহণ করে, তখন এটি কন্টিনিউয়েশন ক্লাস্টার থেকে বিদ্যমান ডেটা সরিয়ে দেয়। একটি ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধ প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
deleteUserManagementCluster
UserAccountManagement Cluster-এর বিষয়বস্তু মুছতে এই API ব্যবহার করা হয়।
কোটলিন
client.deleteUserManagementCluster()
জাভা
client.deleteUserManagementCluster();
যখন পরিষেবাটি অনুরোধটি গ্রহণ করে, তখন এটি UserAccountManagement ক্লাস্টার থেকে বিদ্যমান ডেটা সরিয়ে দেয়। একটি ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধ প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
deleteClusters
এই API একটি প্রদত্ত ক্লাস্টার ধরনের বিষয়বস্তু মুছে ফেলার জন্য ব্যবহার করা হয়.
কোটলিন
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());
যখন পরিষেবাটি অনুরোধটি গ্রহণ করে, তখন এটি নির্দিষ্ট ক্লাস্টার প্রকারের সাথে মিলে যাওয়া সমস্ত ক্লাস্টার থেকে বিদ্যমান ডেটা সরিয়ে দেয়। ক্লায়েন্টরা এক বা একাধিক ক্লাস্টার প্রকার পাস করতে বেছে নিতে পারেন। একটি ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধ প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
ত্রুটি হ্যান্ডলিং
পাবলিশ এপিআই থেকে টাস্ক রেজাল্ট শোনার জন্য অত্যন্ত সুপারিশ করা হয় যাতে একটি সফল টাস্ক পুনরুদ্ধার এবং পুনরায় জমা দেওয়ার জন্য একটি ফলো-আপ পদক্ষেপ নেওয়া যেতে পারে।
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 | পরিষেবা কল খুব ঘন ঘন করা হয়. |
ধাপ 3: সম্প্রচারের উদ্দেশ্য পরিচালনা করুন
একটি কাজের মাধ্যমে প্রকাশ সামগ্রী API কল করার পাশাপাশি, একটি বিষয়বস্তু প্রকাশের জন্য অনুরোধ পাওয়ার জন্য একটি BroadcastReceiver
সেট আপ করতে হবে৷
সম্প্রচার অভিপ্রায়ের লক্ষ্য মূলত অ্যাপ পুনরায় সক্রিয়করণ এবং ডেটা সিঙ্ককে বাধ্য করা। সম্প্রচারের অভিপ্রায়গুলি খুব ঘন ঘন পাঠানোর জন্য ডিজাইন করা হয়নি। এটি শুধুমাত্র তখনই ট্রিগার হয় যখন এনগেজ সার্ভিস নির্ধারণ করে যে বিষয়বস্তুটি বাসি হতে পারে (উদাহরণস্বরূপ, এক সপ্তাহ পুরানো)। এইভাবে, ব্যবহারকারীর একটি নতুন বিষয়বস্তুর অভিজ্ঞতা থাকতে পারে এমন আত্মবিশ্বাস রয়েছে, এমনকি যদি অ্যাপ্লিকেশনটি দীর্ঘ সময়ের জন্য কার্যকর না হয়।
BroadcastReceiver
নিম্নলিখিত দুটি উপায়ে সেট আপ করা আবশ্যক:
-
Context.registerReceiver()
ব্যবহার করেBroadcastReceiver
ক্লাসের একটি উদাহরণ ডায়নামিকভাবে নিবন্ধন করুন। এটি এখনও মেমরিতে লাইভ থাকা অ্যাপ্লিকেশনগুলি থেকে যোগাযোগ সক্ষম করে৷
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));
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));
// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));
}
- আপনার
AndroidManifest.xml
ফাইলে<receiver>
ট্যাগ দিয়ে স্থিরভাবে একটি বাস্তবায়ন ঘোষণা করুন। এটি অ্যাপ্লিকেশনটিকে সম্প্রচারের অভিপ্রায় প্রাপ্ত করার অনুমতি দেয় যখন এটি চলছে না, এবং অ্যাপ্লিকেশনটিকে সামগ্রী প্রকাশ করার অনুমতি দেয়৷
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
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 a
৷
ইন্টিগ্রেশন ওয়ার্কফ্লো
আপনার ইন্টিগ্রেশন সম্পূর্ণ হওয়ার পরে যাচাই করার জন্য ধাপে ধাপে গাইডের জন্য, Engage ডেভেলপার ইন্টিগ্রেশন ওয়ার্কফ্লো দেখুন।
FAQs
প্রায়শই জিজ্ঞাসিত প্রশ্নগুলির জন্য Engage SDK দেখুন।
যোগাযোগ
ইন্টিগ্রেশন প্রক্রিয়া চলাকালীন কোনো প্রশ্ন থাকলে entering-developers@google.com- এ যোগাযোগ করুন। আমাদের দল যত তাড়াতাড়ি সম্ভব উত্তর দেবে।
পরবর্তী পদক্ষেপ
এই ইন্টিগ্রেশন সম্পন্ন করার পরে, আপনার পরবর্তী পদক্ষেপগুলি নিম্নরূপ:
- Enge-developers@google.com- এ একটি ইমেল পাঠান এবং আপনার সমন্বিত APK সংযুক্ত করুন যা Google দ্বারা পরীক্ষার জন্য প্রস্তুত৷
- ইন্টিগ্রেশন আশানুরূপ কাজ করছে তা নিশ্চিত করতে Google একটি যাচাইকরণ করবে এবং অভ্যন্তরীণভাবে পর্যালোচনা করবে। পরিবর্তনের প্রয়োজন হলে, Google যেকোনো প্রয়োজনীয় বিবরণের সাথে আপনার সাথে যোগাযোগ করবে।
- যখন পরীক্ষা সম্পূর্ণ হয় এবং কোন পরিবর্তনের প্রয়োজন হয় না, তখন Google আপনাকে অবহিত করার জন্য আপনার সাথে যোগাযোগ করবে যে আপনি প্লে স্টোরে আপডেট করা এবং সমন্বিত APK প্রকাশ করা শুরু করতে পারেন।
- Google আপনার আপডেট করা APK প্লে স্টোরে প্রকাশ করা হয়েছে তা নিশ্চিত করার পরে, আপনার সুপারিশ , বৈশিষ্ট্যযুক্ত , এবং ধারাবাহিকতা ক্লাস্টারগুলি প্রকাশ করা হবে এবং ব্যবহারকারীদের কাছে দৃশ্যমান হবে৷