আপনার ব্যবহারকারীরা যেখানেই থাকুক না কেন, তাদের কাছে পৌঁছে অ্যাপের সম্পৃক্ততা বাড়ান। কালেকশন , এন্টারটেইনমেন্ট স্পেস এবং প্লে স্টোরের মতো ডিভাইসের বিভিন্ন প্ল্যাটফর্মে ব্যবহারকারীদের কাছে সরাসরি ব্যক্তিগতকৃত সুপারিশ এবং ধারাবাহিক কন্টেন্ট পৌঁছে দিতে Engage SDK ইন্টিগ্রেট করুন। এই ইন্টিগ্রেশনটি গড় APK-তে ৫০ কেবি-রও কম (কম্প্রেসড) সাইজ যোগ করে এবং বেশিরভাগ অ্যাপের জন্য ডেভেলপারদের প্রায় এক সপ্তাহ সময় লাগে। আমাদের বিজনেস সাইটে আরও জানুন।
এই নির্দেশিকায় ডেভেলপার পার্টনারদের জন্য Engage কন্টেন্ট সারফেসে পঠন সামগ্রী (ই-বুক, অডিওবুক, কমিকস/মাঙ্গা) সরবরাহ করার নির্দেশনা রয়েছে।
একীকরণের বিবরণ
পরিভাষা
এই ইন্টিগ্রেশনে নিম্নলিখিত তিন ধরনের ক্লাস্টার অন্তর্ভুক্ত রয়েছে: রিকমেন্ডেশন , কন্টিনিউয়েশন এবং ফিচার্ড ।
সুপারিশ ক্লাস্টারগুলো কোনো একজন নির্দিষ্ট ডেভেলপার পার্টনারের তৈরি পড়ার জন্য ব্যক্তিগতকৃত কন্টেন্টের পরামর্শ দেখায়।
আপনার সুপারিশগুলোর কাঠামোটি নিম্নরূপ:
সুপারিশ ক্লাস্টার: একটি UI ভিউ, যেখানে একজন নির্দিষ্ট ডেভেলপার পার্টনারের দেওয়া একাধিক সুপারিশ থাকে।

চিত্র ১. বিনোদন স্থানের UI, যেখানে একজন অংশীদারের পক্ষ থেকে একটি সুপারিশ ক্লাস্টার দেখানো হচ্ছে। এনটিটি: একটি ক্লাস্টারের কোনো একটি আইটেমকে প্রতিনিধিত্বকারী একটি অবজেক্ট। একটি এনটিটি হতে পারে একটি ই-বুক, একটি অডিও-বুক, একটি বইয়ের সিরিজ, এবং আরও অনেক কিছু। সমর্থিত এনটিটি টাইপগুলোর তালিকার জন্য ‘এনটিটি ডেটা সরবরাহ করুন’ বিভাগটি দেখুন।

চিত্র ২. এন্টারটেইনমেন্ট স্পেস UI, যেখানে একজন পার্টনারের রিকমেন্ডেশন ক্লাস্টারের মধ্যে একটিমাত্র এনটিটি দেখানো হচ্ছে।
কন্টিনিউয়েশন ক্লাস্টার একাধিক ডেভেলপার পার্টনারের অসমাপ্ত বইগুলোকে একটি একক UI গ্রুপে প্রদর্শন করে। প্রত্যেক ডেভেলপার পার্টনারকে কন্টিনিউয়েশন ক্লাস্টারে সর্বোচ্চ ১০টি এনটিটি ব্রডকাস্ট করার অনুমতি দেওয়া হবে।

চিত্র ৩। এন্টারটেইনমেন্ট স্পেস UI, যেখানে একাধিক পার্টনারের অসমাপ্ত সুপারিশসহ একটি কন্টিনিউয়েশন ক্লাস্টার দেখানো হচ্ছে (বর্তমানে কেবল একটি সুপারিশ দৃশ্যমান)। ফিচার্ড ক্লাস্টার একাধিক ডেভেলপার পার্টনারের নির্বাচিত কিছু আইটেমকে একটি একক UI গ্রুপে প্রদর্শন করে। একটিমাত্র ফিচার্ড ক্লাস্টার থাকবে, যা UI-এর উপরের দিকে প্রদর্শিত হবে এবং সমস্ত রিকমেন্ডেশন ক্লাস্টারের উপরে অগ্রাধিকার পাবে। প্রতিটি ডেভেলপার পার্টনার ফিচার্ড ক্লাস্টারে সর্বোচ্চ ১০টি এনটিটি ব্রডকাস্ট করার অনুমতি পাবে।

চিত্র ৪। এন্টারটেইনমেন্ট স্পেস UI, যেখানে একাধিক পার্টনারের সুপারিশসহ একটি ফিচার্ড ক্লাস্টার দেখানো হচ্ছে (বর্তমানে কেবল একটি সুপারিশ দৃশ্যমান)।
প্রাক-কাজ
সর্বনিম্ন এপিআই স্তর: ১৯
আপনার অ্যাপে 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.12'
}
সারসংক্ষেপ
ডিজাইনটি একটি বাউন্ড সার্ভিসের বাস্তবায়নের উপর ভিত্তি করে তৈরি।
বিভিন্ন ক্লাস্টার প্রকারের জন্য একজন ক্লায়েন্ট যে ডেটা প্রকাশ করতে পারে তা নিম্নলিখিত সীমাবদ্ধতার অধীন:
| ক্লাস্টার টাইপ | ক্লাস্টার সীমা | একটি ক্লাস্টারে সত্তার সর্বোচ্চ সীমা |
|---|---|---|
| সুপারিশ ক্লাস্টার(গুলি) | সর্বাধিক ৭ | সর্বাধিক ৫০ |
| ধারাবাহিকতা ক্লাস্টার | সর্বাধিক ১ | সর্বাধিক ২০ |
| বৈশিষ্ট্যযুক্ত ক্লাস্টার | সর্বাধিক ১ | সর্বাধিক ২০ |
ধাপ ১: সত্তার তথ্য প্রদান করুন
এসডিকে প্রতিটি আইটেমের ধরন বোঝানোর জন্য বিভিন্ন এনটিটি সংজ্ঞায়িত করেছে। আমরা 'রিড' ক্যাটাগরির জন্য নিম্নলিখিত এনটিটিগুলো সমর্থন করি:
-
EbookEntity -
AudiobookEntity -
BookSeriesEntity
নিচের চার্টগুলোতে প্রতিটি প্রকারের জন্য উপলব্ধ বৈশিষ্ট্য এবং প্রয়োজনীয়তাগুলো তুলে ধরা হয়েছে।
EbookEntity
EbookEntity অবজেক্টটি একটি ইবুককে প্রতিনিধিত্ব করে (উদাহরণস্বরূপ, মিশেল ওবামার লেখা ‘ Becoming ’ ইবুকটি)।
| বৈশিষ্ট্য | প্রয়োজনীয়তা | নোট |
|---|---|---|
| নাম | প্রয়োজনীয় | |
| পোস্টারের ছবি | প্রয়োজনীয় | কমপক্ষে একটি ছবি অবশ্যই প্রদান করতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন। |
| লেখক | প্রয়োজনীয় | অন্তত একজন লেখকের নাম অবশ্যই উল্লেখ করতে হবে। |
| অ্যাকশন লিঙ্ক ইউআরআই | প্রয়োজনীয় | ইবুকটির জন্য প্রোভাইডার অ্যাপের ডিপ লিঙ্ক। দ্রষ্টব্য: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ) দেখুন। |
| প্রকাশের তারিখ | ঐচ্ছিক | প্রদান করা হলে ইপক মিলিসেকেন্ডে। |
| বর্ণনা | ঐচ্ছিক | প্রদান করা হলে তা অবশ্যই ২০০ অক্ষরের মধ্যে হতে হবে। |
| মূল্য | ঐচ্ছিক | মুক্ত পাঠ্য |
| পৃষ্ঠা সংখ্যা | ঐচ্ছিক | প্রদান করা হলে তা অবশ্যই একটি ধনাত্মক পূর্ণসংখ্যা হতে হবে। |
| ধরণ | ঐচ্ছিক | বইটির সাথে সম্পর্কিত সাহিত্য প্রকারের তালিকা। |
| সিরিজের নাম | ঐচ্ছিক | ইবুকটি যে সিরিজের অন্তর্গত তার নাম (উদাহরণস্বরূপ, হ্যারি পটার )। |
| সিরিজ একক সূচক | ঐচ্ছিক | সিরিজের ইবুকগুলোর সূচী, যেখানে ১ হলো সিরিজের প্রথম ইবুক। উদাহরণস্বরূপ, যদি 'হ্যারি পটার অ্যান্ড দ্য প্রিজনার অফ আজকাবান' সিরিজের ৩য় বই হয়, তবে এটি ৩-এ সেট করতে হবে। |
| বইয়ের ধরণ চালিয়ে যান | ঐচ্ছিক | TYPE_CONTINUE - অসমাপ্ত বই পুনরায় শুরু করুন। TYPE_NEXT - ধারাবাহিকের নতুন একটি পর্বে চালিয়ে যান। TYPE_NEW - সদ্য প্রকাশিত। |
| শেষ বাগদানের সময় | শর্তসাপেক্ষে আবশ্যক | আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি অবশ্যই প্রদান করতে হবে। নতুন কেনা ই-বুকগুলো 'পড়া চালিয়ে যান' ক্লাস্টারের অংশ হতে পারে। ইপক মিলিসেকেন্ডে। |
| অগ্রগতির শতাংশ সম্পন্ন | শর্তসাপেক্ষে আবশ্যক | আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি অবশ্যই প্রদান করতে হবে। মান অবশ্যই ০-এর চেয়ে বেশি এবং ১০০-এর চেয়ে কম হতে হবে। |
| DisplayTimeWindow - কোনো কন্টেন্ট সারফেসে প্রদর্শিত হওয়ার জন্য একটি সময়সীমা নির্ধারণ করুন। | ||
| শুরুর সময় | ঐচ্ছিক | ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হবে। সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য। ইপক মিলিসেকেন্ডে। |
| শেষ টাইমস্ট্যাম্প | ঐচ্ছিক | ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি আর পৃষ্ঠে প্রদর্শিত হয় না। সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য। ইপক মিলিসেকেন্ডে। |
AudiobookEntity
AudiobookEntity অবজেক্টটি একটি অডিওবুককে উপস্থাপন করে (উদাহরণস্বরূপ, মিশেল ওবামার লেখা ‘ Becoming ’ বইটির অডিওবুক)।
| বৈশিষ্ট্য | প্রয়োজনীয়তা | নোট |
|---|---|---|
| নাম | প্রয়োজনীয় | |
| পোস্টারের ছবি | প্রয়োজনীয় | কমপক্ষে একটি ছবি অবশ্যই প্রদান করতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন। |
| লেখক | প্রয়োজনীয় | অন্তত একজন লেখকের নাম অবশ্যই উল্লেখ করতে হবে। |
| অ্যাকশন লিঙ্ক ইউআরআই | প্রয়োজনীয় | অডিওবুকটির জন্য প্রদানকারী অ্যাপের ডিপ লিঙ্ক। দ্রষ্টব্য: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ) দেখুন। |
| বর্ণনাকারী | ঐচ্ছিক | অন্তত একজন বর্ণনাকারীর নাম অবশ্যই উল্লেখ করতে হবে। |
| প্রকাশের তারিখ | ঐচ্ছিক | প্রদান করা হলে ইপক মিলিসেকেন্ডে। |
| বর্ণনা | ঐচ্ছিক | প্রদান করা হলে তা অবশ্যই ২০০ অক্ষরের মধ্যে হতে হবে। |
| মূল্য | ঐচ্ছিক | মুক্ত পাঠ্য |
| সময়কাল | ঐচ্ছিক | প্রদান করা হলে মানটি অবশ্যই ধনাত্মক হতে হবে। |
| ধরণ | ঐচ্ছিক | বইটির সাথে সম্পর্কিত সাহিত্য প্রকারের তালিকা। |
| সিরিজের নাম | ঐচ্ছিক | অডিওবুকটি যে সিরিজের অন্তর্গত তার নাম (উদাহরণস্বরূপ, হ্যারি পটার )। |
| সিরিজ একক সূচক | ঐচ্ছিক | সিরিজের অডিওবুকগুলোর সূচী, যেখানে ১ হলো সিরিজের প্রথম অডিওবুক। উদাহরণস্বরূপ, যদি 'হ্যারি পটার অ্যান্ড দ্য প্রিজনার অফ আজকাবান' সিরিজের ৩য় বই হয়, তবে এটি ৩-এ সেট করতে হবে। |
| বইয়ের ধরণ চালিয়ে যান | ঐচ্ছিক | TYPE_CONTINUE - অসমাপ্ত বই পুনরায় শুরু করুন। TYPE_NEXT - ধারাবাহিকের নতুন একটি পর্বে চালিয়ে যান। TYPE_NEW - সদ্য প্রকাশিত। |
| শেষ বাগদানের সময় | শর্তসাপেক্ষে আবশ্যক | আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি অবশ্যই প্রদান করতে হবে। ইপক মিলিসেকেন্ডে। |
| অগ্রগতির শতাংশ সম্পন্ন | শর্তসাপেক্ষে আবশ্যক | আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি অবশ্যই প্রদান করতে হবে। নতুন কেনা অডিওবুকগুলো 'পড়া চালিয়ে যান' ক্লাস্টারের অংশ হতে পারে। মান অবশ্যই ০-এর চেয়ে বেশি এবং ১০০-এর চেয়ে কম হতে হবে। |
| DisplayTimeWindow - কোনো কন্টেন্ট সারফেসে প্রদর্শিত হওয়ার জন্য একটি সময়সীমা নির্ধারণ করুন। | ||
| শুরুর সময় | ঐচ্ছিক | ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হবে। সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য। ইপক মিলিসেকেন্ডে। |
| শেষ টাইমস্ট্যাম্প | ঐচ্ছিক | ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি আর পৃষ্ঠে প্রদর্শিত হয় না। সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য। ইপক মিলিসেকেন্ডে। |
BookSeriesEntity
BookSeriesEntity অবজেক্টটি একটি বইয়ের সিরিজকে বোঝায় (উদাহরণস্বরূপ, হ্যারি পটার বইয়ের সিরিজ, যেটিতে ৭টি বই রয়েছে)।
| বৈশিষ্ট্য | প্রয়োজনীয়তা | নোট |
|---|---|---|
| নাম | প্রয়োজনীয় | |
| পোস্টারের ছবি | প্রয়োজনীয় | কমপক্ষে একটি ছবি অবশ্যই প্রদান করতে হবে। নির্দেশনার জন্য ছবির স্পেসিফিকেশন দেখুন। |
| লেখক | প্রয়োজনীয় | অন্তত একজন লেখকের নাম অবশ্যই থাকতে হবে। |
| অ্যাকশন লিঙ্ক ইউআরআই | প্রয়োজনীয় | অডিওবুক বা ইবুকের জন্য প্রদানকারী অ্যাপের ডিপ লিঙ্ক। দ্রষ্টব্য: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ) দেখুন। |
| বইয়ের সংখ্যা | প্রয়োজনীয় | সিরিজে বইয়ের সংখ্যা। |
| বর্ণনা | ঐচ্ছিক | প্রদান করা হলে তা অবশ্যই ২০০ অক্ষরের মধ্যে হতে হবে। |
| ধরণ | ঐচ্ছিক | বইটির সাথে সম্পর্কিত সাহিত্য প্রকারের তালিকা। |
| বইয়ের ধরণ চালিয়ে যান | ঐচ্ছিক | TYPE_CONTINUE - অসমাপ্ত বই পুনরায় শুরু করুন। TYPE_NEXT - ধারাবাহিকের নতুন একটি পর্বে চালিয়ে যান। TYPE_NEW - সদ্য প্রকাশিত। |
| শেষ বাগদানের সময় | শর্তসাপেক্ষে আবশ্যক | আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি অবশ্যই প্রদান করতে হবে। ইপক মিলিসেকেন্ডে। |
| অগ্রগতির শতাংশ সম্পন্ন | শর্তসাপেক্ষে আবশ্যক | আইটেমটি কন্টিনিউয়েশন ক্লাস্টারে থাকলে এটি অবশ্যই প্রদান করতে হবে। নতুন কেনা বইয়ের সিরিজগুলো ‘পড়া চালিয়ে যান’ ক্লাস্টারের অংশ হতে পারে। মান অবশ্যই ০-এর চেয়ে বেশি এবং ১০০-এর চেয়ে কম হতে হবে। |
| DisplayTimeWindow - কোনো কন্টেন্ট সারফেসে প্রদর্শিত হওয়ার জন্য একটি সময়সীমা নির্ধারণ করুন। | ||
| শুরুর সময় | ঐচ্ছিক | ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হবে। সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য। ইপক মিলিসেকেন্ডে। |
| শেষ টাইমস্ট্যাম্প | ঐচ্ছিক | ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি আর পৃষ্ঠে প্রদর্শিত হয় না। সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য। ইপক মিলিসেকেন্ডে। |
ছবির স্পেসিফিকেশন
ইমেজ অ্যাসেটগুলির জন্য প্রয়োজনীয় স্পেসিফিকেশনগুলি নিচে তালিকাভুক্ত করা হলো:
| আকৃতির অনুপাত | সমর্থিত ক্লাস্টার(গুলি) | সর্বনিম্ন পিক্সেল | প্রস্তাবিত পিক্সেল |
|---|---|---|---|
| বর্গক্ষেত্র (১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-গুলো উপলব্ধ আছে:
-
isServiceAvailable -
publishRecommendationClusters -
publishFeaturedCluster -
publishContinuationCluster -
publishUserAccountManagementRequest -
updatePublishStatus -
deleteRecommendationsClusters -
deleteFeaturedCluster -
deleteContinuationCluster -
deleteUserManagementCluster -
deleteClusters
isServiceAvailable
পরিষেবাটি ইন্টিগ্রেশনের জন্য উপলব্ধ কিনা এবং কন্টেন্টটি ডিভাইসে প্রদর্শন করা যাবে কিনা, তা যাচাই করতে এই এপিআইটি ব্যবহৃত হয়।
কোটলিন
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 অবজেক্টগুলোর একটি তালিকা প্রকাশ করতে ব্যবহৃত হয়।
কোটলিন
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 অবজেক্টগুলোর একটি তালিকা প্রকাশ করতে ব্যবহৃত হয়।
কোটলিন
client.publishFeaturedCluster(
PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
FeaturedCluster.Builder()
...
.build())
.build())
জাভা
client.publishFeaturedCluster(
new PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
new FeaturedCluster.Builder()
...
.build())
.build());
যখন পরিষেবাটি অনুরোধটি গ্রহণ করে, তখন একটি লেনদেনের মধ্যে নিম্নলিখিত পদক্ষেপগুলি সম্পন্ন হয়:
- ডেভেলপার পার্টনারের বিদ্যমান
FeaturedClusterডেটা মুছে ফেলা হয়েছে। - অনুরোধ থেকে প্রাপ্ত ডেটা পার্স করে আপডেট করা ফিচার্ড ক্লাস্টারে সংরক্ষণ করা হয়।
কোনো ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধটি প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
publishContinuationCluster
এই এপিআইটি একটি 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
এই এপিআইটি একটি সাইন ইন কার্ড প্রকাশ করতে ব্যবহৃত হয়। সাইন ইন অ্যাকশনটি ব্যবহারকারীদের অ্যাপের সাইন ইন পৃষ্ঠায় নিয়ে যায়, যাতে অ্যাপটি কন্টেন্ট প্রকাশ করতে (বা আরও ব্যক্তিগতকৃত কন্টেন্ট সরবরাহ করতে) পারে।
নিম্নলিখিত মেটাডেটা সাইন ইন কার্ডের একটি অংশ -
| বৈশিষ্ট্য | প্রয়োজনীয়তা | বর্ণনা |
|---|---|---|
| অ্যাকশন উরি | প্রয়োজনীয় | অ্যাকশনের জন্য ডিপলিঙ্ক (অর্থাৎ অ্যাপ সাইন ইন পেজে নিয়ে যায়) |
| ছবি | ঐচ্ছিক - প্রদান করা না হলে, শিরোনাম অবশ্যই প্রদান করতে হবে। | কার্ডে দেখানো ছবি 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
যদি কোনো অভ্যন্তরীণ ব্যবসায়িক কারণে কোনো ক্লাস্টারই প্রকাশিত না হয়, তাহলে আমরা 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
যদি কোনো ব্যবহারকারী লগ ইন না করার কারণে কন্টেন্টটি প্রকাশিত না হয়, তাহলে গুগল সাইন ইন কার্ডটি প্রকাশ করার পরামর্শ দেবে। যদি কোনো কারণে প্রোভাইডাররা সাইন ইন কার্ডটি প্রকাশ করতে না পারেন, তাহলে আমরা 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
এই এপিআইটি রিকমেন্ডেশন ক্লাস্টারগুলোর কন্টেন্ট মুছে ফেলার জন্য ব্যবহৃত হয়।
কোটলিন
client.deleteRecommendationClusters()
জাভা
client.deleteRecommendationClusters();
সার্ভিসটি অনুরোধটি গ্রহণ করলে, এটি রিকমেন্ডেশন ক্লাস্টারগুলো থেকে বিদ্যমান ডেটা মুছে ফেলে। কোনো ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধটি প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
deleteFeaturedCluster
এই এপিআইটি ফিচার্ড ক্লাস্টারের কন্টেন্ট মুছে ফেলার জন্য ব্যবহৃত হয়।
কোটলিন
client.deleteFeaturedCluster()
জাভা
client.deleteFeaturedCluster();
সার্ভিসটি অনুরোধটি গ্রহণ করলে, এটি ফিচার্ড ক্লাস্টার থেকে বিদ্যমান ডেটা মুছে ফেলে। কোনো ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধটি প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
deleteContinuationCluster
এই এপিআইটি কন্টিনিউয়েশন ক্লাস্টারের কন্টেন্ট মুছে ফেলার জন্য ব্যবহৃত হয়।
কোটলিন
client.deleteContinuationCluster()
জাভা
client.deleteContinuationCluster();
সার্ভিসটি অনুরোধটি গ্রহণ করলে, এটি কন্টিনিউয়েশন ক্লাস্টার থেকে বিদ্যমান ডেটা মুছে ফেলে। কোনো ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধটি প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
deleteUserManagementCluster
এই এপিআইটি UserAccountManagement ক্লাস্টারের বিষয়বস্তু মুছে ফেলার জন্য ব্যবহৃত হয়।
কোটলিন
client.deleteUserManagementCluster()
জাভা
client.deleteUserManagementCluster();
সার্ভিসটি অনুরোধটি গ্রহণ করলে, এটি UserAccountManagement ক্লাস্টার থেকে বিদ্যমান ডেটা মুছে ফেলে। কোনো ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধটি প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
deleteClusters
এই এপিআইটি একটি নির্দিষ্ট ক্লাস্টার টাইপের কন্টেন্ট মুছে ফেলার জন্য ব্যবহৃত হয়।
কোটলিন
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());
সার্ভিসটি অনুরোধটি গ্রহণ করলে, এটি নির্দিষ্ট ক্লাস্টার টাইপের সাথে মিলে যাওয়া সমস্ত ক্লাস্টার থেকে বিদ্যমান ডেটা মুছে ফেলে। ক্লায়েন্টরা একটি বা একাধিক ক্লাস্টার টাইপ বেছে নিতে পারেন। কোনো ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধটি প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।
ত্রুটি পরিচালনা
পাবলিশ এপিআই (publish 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 | সার্ভিস কলটি খুব ঘন ঘন করা হয়। |
ধাপ ৩: ব্রডকাস্ট ইন্টেন্ট পরিচালনা করুন
একটি জবের মাধ্যমে কন্টেন্ট পাবলিশ এপিআই কল করার পাশাপাশি, কন্টেন্ট পাবলিশের অনুরোধ গ্রহণ করার জন্য একটি BroadcastReceiver সেট আপ করা প্রয়োজন।
ব্রডকাস্ট ইন্টেন্টের মূল উদ্দেশ্য হলো অ্যাপ পুনরায় সক্রিয় করা এবং ডেটা সিঙ্ক করতে বাধ্য করা। ব্রডকাস্ট ইন্টেন্ট খুব ঘন ঘন পাঠানোর জন্য ডিজাইন করা হয়নি। এটি কেবল তখনই ট্রিগার হয় যখন এনগেজ সার্ভিস মনে করে যে কন্টেন্টটি পুরনো হয়ে যেতে পারে (উদাহরণস্বরূপ, এক সপ্তাহ পুরনো)। এর ফলে, এই বিষয়ে আরও বেশি নিশ্চয়তা থাকে যে ব্যবহারকারী একটি নতুন কন্টেন্টের অভিজ্ঞতা পাবেন, এমনকি যদি অ্যাপ্লিকেশনটি দীর্ঘ সময় ধরে চালানো না হয়।
BroadcastReceiver নিম্নলিখিত দুটি উপায়ে সেট আপ করতে হবে:
Context.registerReceiver()ব্যবহার করেBroadcastReceiverক্লাসের একটি ইনস্ট্যান্স ডায়নামিকভাবে রেজিস্টার করুন। এটি মেমরিতে সক্রিয় থাকা অ্যাপ্লিকেশনগুলো থেকে যোগাযোগ সক্ষম করে।
কোটলিন
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 a।
ইন্টিগ্রেশন ওয়ার্কফ্লো
আপনার ইন্টিগ্রেশন সম্পন্ন হওয়ার পর তা যাচাই করার ধাপে ধাপে নির্দেশিকার জন্য, Engage ডেভেলপার ইন্টিগ্রেশন ওয়ার্কফ্লো দেখুন।
প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
প্রায়শই জিজ্ঞাসিত প্রশ্নগুলির জন্য Engage SDK-এর প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী দেখুন।
যোগাযোগ করুন
ইন্টিগ্রেশন প্রক্রিয়া চলাকালীন কোনো প্রশ্ন থাকলে engage-developers@google.com এ যোগাযোগ করুন। আমাদের টিম যত তাড়াতাড়ি সম্ভব উত্তর দেবে।
পরবর্তী পদক্ষেপ
এই ইন্টিগ্রেশনটি সম্পন্ন করার পর, আপনার পরবর্তী পদক্ষেপগুলো নিম্নরূপ:
-
engage-developers@google.comএ একটি ইমেল পাঠান এবং আপনার ইন্টিগ্রেটেড APK-টি সংযুক্ত করুন, যা গুগলের পরীক্ষার জন্য প্রস্তুত। - ইন্টিগ্রেশনটি প্রত্যাশিতভাবে কাজ করছে কিনা তা নিশ্চিত করার জন্য গুগল অভ্যন্তরীণভাবে একটি যাচাই ও পর্যালোচনা করবে। কোনো পরিবর্তনের প্রয়োজন হলে, গুগল প্রয়োজনীয় বিবরণসহ আপনার সাথে যোগাযোগ করবে।
- টেস্টিং সম্পন্ন হলে এবং কোনো পরিবর্তনের প্রয়োজন না থাকলে, গুগল আপনার সাথে যোগাযোগ করে জানিয়ে দেবে যে আপনি আপডেট করা ও সমন্বিত APK ফাইলটি প্লে স্টোরে প্রকাশ করা শুরু করতে পারেন।
- আপনার আপডেট করা APK প্লে স্টোরে প্রকাশিত হয়েছে বলে গুগল নিশ্চিত করার পর, আপনার Recommendation , Featured , এবং Continuation ক্লাস্টারগুলো প্রকাশিত হবে এবং ব্যবহারকারীরা তা দেখতে পাবেন।