জড়িত SDK সামাজিক: তৃতীয় পক্ষের প্রযুক্তিগত ইন্টিগ্রেশন নির্দেশাবলী

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

এই নির্দেশিকায় ডেভেলপার পার্টনারদের জন্য Engage কন্টেন্ট সারফেসে সোশ্যাল মিডিয়া কন্টেন্ট সরবরাহ করার নির্দেশনা রয়েছে।

একীকরণের বিবরণ

নিম্নলিখিত অংশে একীকরণের বিস্তারিত বিবরণ তুলে ধরা হয়েছে।

পরিভাষা

সুপারিশ ক্লাস্টারগুলো একজন নির্দিষ্ট ডেভেলপার পার্টনারের কাছ থেকে ব্যক্তিগতকৃত পরামর্শ দেখায়।

আপনার সুপারিশগুলোর কাঠামোটি নিম্নরূপ:

সুপারিশ ক্লাস্টার : একটি UI ভিউ যেখানে একই ডেভেলপার পার্টনারের দেওয়া একাধিক সুপারিশ থাকে।

প্রতিটি সুপারিশ ক্লাস্টার নিম্নলিখিত দুই ধরনের সত্তার যেকোনো একটি নিয়ে গঠিত:

  • পোর্ট্রেটমিডিয়াএন্টিটি
  • সোশ্যালপোস্টএন্টিটি

পোস্টের জন্য PortraitMediaEntity-তে অবশ্যই ১টি পোর্ট্রেট ছবি থাকতে হবে। প্রোফাইল এবং ইন্টারঅ্যাকশন সম্পর্কিত মেটাডেটা ঐচ্ছিক।

  • পোস্ট

    • পোর্ট্রেট মোডে ছবি এবং টাইমস্ট্যাম্প, অথবা
    • পোর্ট্রেট মোডে ছবি + টেক্সট কন্টেন্ট এবং টাইমস্ট্যাম্প
  • প্রোফাইল

    • অবতার, নাম বা হ্যান্ডেল, অতিরিক্ত ছবি
  • মিথস্ক্রিয়া

    • শুধু গণনা করুন এবং চিহ্নিত করুন, অথবা
    • গণনা এবং চাক্ষুষ (আইকন)

SocialPostEntity-তে প্রোফাইল, পোস্ট এবং ইন্টারঅ্যাকশন সম্পর্কিত মেটাডেটা থাকে।

  • প্রোফাইল

    • অবতার, নাম বা হ্যান্ডেল, অতিরিক্ত লেখা, অতিরিক্ত ছবি
  • পোস্ট

    • টেক্সট এবং টাইমস্ট্যাম্প, অথবা
    • রিচ মিডিয়া (ছবি বা রিচ ইউআরএল) এবং টাইমস্ট্যাম্প, অথবা
    • টেক্সট এবং রিচ মিডিয়া (ছবি বা রিচ ইউআরএল) এবং টাইমস্ট্যাম্প, অথবা
    • ভিডিও প্রিভিউ (থাম্বনেইল ও সময়কাল) এবং টাইমস্ট্যাম্প
  • মিথস্ক্রিয়া

    • শুধুমাত্র গণনা ও চিহ্নিত করুন, অথবা
    • গণনা ও দৃশ্যমান (আইকন)

প্রাক-কাজ

সর্বনিম্ন এপিআই স্তর: ১৯

আপনার অ্যাপে 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'
}

সারসংক্ষেপ

ডিজাইনটি একটি বাউন্ড সার্ভিসের বাস্তবায়নের উপর ভিত্তি করে তৈরি।

বিভিন্ন ক্লাস্টার প্রকারের জন্য একজন ক্লায়েন্ট যে ডেটা প্রকাশ করতে পারে তা নিম্নলিখিত সীমাবদ্ধতার অধীন:

ক্লাস্টার টাইপ ক্লাস্টার সীমা একটি ক্লাস্টারে সর্বনিম্ন সত্তার সীমা একটি ক্লাস্টারে সত্তার সর্বোচ্চ সীমা
সুপারিশ ক্লাস্টার(গুলি) সর্বাধিক ৭ কমপক্ষে ১টি ( PortraitMediaEntity , অথবা SocialPostEntity ) সর্বাধিক ৫০ ( PortraitMediaEntity , অথবা SocialPostEntity )

ধাপ ১: সত্তার তথ্য প্রদান করুন

এসডিকে প্রতিটি আইটেমের ধরনকে উপস্থাপন করার জন্য বিভিন্ন এনটিটি সংজ্ঞায়িত করেছে। এসডিকে সোশ্যাল ক্যাটাগরির জন্য নিম্নলিখিত এনটিটিগুলো সমর্থন করে:

  1. PortraitMediaEntity
  2. SocialPostEntity

নিচের চার্টগুলোতে প্রতিটি প্রকারের জন্য উপলব্ধ বৈশিষ্ট্য এবং প্রয়োজনীয়তাগুলো তুলে ধরা হয়েছে।

PortraitMediaEntity

বৈশিষ্ট্য প্রয়োজনীয়তা বর্ণনা ফর্ম্যাট
অ্যাকশন ইউআরআই গুগল টিভি ছাড়া অন্য সব পৃষ্ঠতলের জন্য প্রয়োজন

প্রোভাইডার অ্যাপে থাকা এনটিটির ডিপ লিঙ্ক।

দ্রষ্টব্য: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ) দেখুন।

ইউআরআই
প্ল্যাটফর্ম-নির্দিষ্ট প্লেব্যাক গুগল টিভি সারফেসের জন্য প্রয়োজন

গুগল টিভি এবং মোবাইলের মতো প্ল্যাটফর্মের জন্য প্রোভাইডার অ্যাপে সত্তাটির ডিপ লিঙ্ক।

PlatformSpecificPlayback অবজেক্টের তালিকা
সুপারিশের কারণ ঐচ্ছিক ব্যবহারকারীকে বিষয়বস্তুটি সুপারিশ করার যৌক্তিকতা। সুপারিশের কারণ বস্তু
মন্তব্যের সারাংশ ঐচ্ছিক পোস্টটির মন্তব্যসমূহের সারসংক্ষেপ। স্ট্রিং
পোস্ট সম্পর্কিত মেটাডেটা (আবশ্যক)
ছবি(গুলি) প্রয়োজনীয়

ছবিগুলো পোর্ট্রেট অ্যাস্পেক্ট রেশিওতে হতে হবে।

একাধিক ছবি দেওয়া হলেও UI-তে কেবল একটি ছবি দেখানো হতে পারে। তবে, অ্যাপটিতে যে আরও ছবি আছে, তার দৃশ্যমান ইঙ্গিত UI দিতে পারে।

পোস্টটি যদি একটি ভিডিও হয়, তবে প্রদানকারীকে ভিডিওটির একটি থাম্বনেইল ছবি হিসেবে প্রদান করতে হবে।

নির্দেশনার জন্য ছবির বিবরণ দেখুন।
পাঠ্য বিষয়বস্তু ঐচ্ছিক কোনো পোস্ট, আপডেট ইত্যাদির মূল লেখা। স্ট্রিং (সর্বোচ্চ ১৪০ অক্ষর ব্যবহারের পরামর্শ দেওয়া হচ্ছে)
টাইমস্ট্যাম্প ঐচ্ছিক পোস্টটি প্রকাশিত হওয়ার সময়। মিলিসেকেন্ডে ইপক টাইমস্ট্যাম্প
ভিডিও কন্টেন্ট ঐচ্ছিক পোস্টটি কি একটি ভিডিও? বুলিয়ান
ভিডিওর সময়কাল ঐচ্ছিক ভিডিওটির সময়কাল মিলিসেকেন্ডে। দীর্ঘ
প্রোফাইল সম্পর্কিত মেটাডেটা (ঐচ্ছিক)
নাম প্রয়োজনীয় প্রোফাইলের নাম বা আইডি বা হ্যান্ডেল, যেমন 'জন ডো', '@টিমপিক্সেল' স্ট্রিং (সর্বোচ্চ ২৫ অক্ষর ব্যবহারের পরামর্শ দেওয়া হচ্ছে)
অবতার প্রয়োজনীয়

ব্যবহারকারীর প্রোফাইল ছবি বা অ্যাভাটার ছবি।

বর্গাকার ১:১ ছবি

নির্দেশনার জন্য ছবির বিবরণ দেখুন।
অতিরিক্ত ছবি ঐচ্ছিক

প্রোফাইল ব্যাজ। উদাহরণস্বরূপ - ভেরিফাইড ব্যাজ

বর্গাকার ১:১ ছবি

নির্দেশনার জন্য ছবির বিবরণ দেখুন।
মিথস্ক্রিয়া সম্পর্কিত মেটাডেটা (ঐচ্ছিক)
গণনা ঐচ্ছিক

মিথস্ক্রিয়ার সংখ্যা উল্লেখ করুন, যেমন - "৩.৭ মিলিয়ন"।

দ্রষ্টব্য: যদি Count এবং Count Value উভয়ই প্রদান করা হয়, তবে Count ব্যবহৃত হবে।

দ্রষ্টব্য: অংশীদারদের Count অথবা CountWithOptionalLabel ব্যবহার করা উচিত।

স্ট্রিং

ঐচ্ছিক লেবেল সহ গণনা ঐচ্ছিক

একটি ঐচ্ছিক লেবেলের সাহায্যে ইন্টারঅ্যাকশনের সংখ্যা উল্লেখ করুন, যেমন - "৩.৭ মিলিয়ন লাইক"।

দ্রষ্টব্য: যদি CountWithOptionalLabel এবং Count Value উভয়ই প্রদান করা হয়, তবে এদের মধ্যে একটি ব্যবহৃত হবে।

দ্রষ্টব্য: অংশীদারদের Count অথবা CountWithOptionalLabel ব্যবহার করা উচিত।

স্ট্রিং

গণনার মান ঐচ্ছিক

মান হিসেবে মিথস্ক্রিয়ার সংখ্যা।

Note: Provide Count Value instead of Count if your app doesn't handle logic on how a large number should be optimized for different display sizes. If both Count and Count Value are provided, Count is used.

দীর্ঘ
লেবেল ঐচ্ছিক ইন্টারঅ্যাকশন লেবেলটি কীসের জন্য তা উল্লেখ করুন। উদাহরণস্বরূপ - "লাইক"।

স্ট্রিং

চাক্ষুষ ঐচ্ছিক

ইন্টারঅ্যাকশনটি কীসের জন্য তা উল্লেখ করুন। উদাহরণস্বরূপ - লাইক আইকন, ইমোজি দেখানো ছবি।

একাধিক ছবি দেওয়া যেতে পারে, তবে সবগুলো ছবি সব ফর্ম ফ্যাক্টরে দেখানো নাও যেতে পারে।

দ্রষ্টব্য: ছবিটি অবশ্যই ১:১ বর্গাকার হতে হবে।

নির্দেশনার জন্য ছবির বিবরণ দেখুন।
DisplayTimeWindow (ঐচ্ছিক) - সারফেসে কোনো কন্টেন্ট প্রদর্শনের জন্য একটি সময়সীমা নির্ধারণ করুন।
শুরুর সময় ঐচ্ছিক

ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হবে।

সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য।

মিলিসেকেন্ডে ইপক টাইমস্ট্যাম্প
শেষ টাইমস্ট্যাম্প ঐচ্ছিক

ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি আর পৃষ্ঠে প্রদর্শিত হয় না।

সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য।

মিলিসেকেন্ডে ইপক টাইমস্ট্যাম্প

SocialPostEntity

বৈশিষ্ট্য প্রয়োজনীয়তা বর্ণনা ফর্ম্যাট
অ্যাকশন ইউআরআই প্রয়োজনীয়

প্রোভাইডার অ্যাপে থাকা এনটিটির ডিপ লিঙ্ক।

দ্রষ্টব্য: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ) দেখুন।

ইউআরআই
প্ল্যাটফর্ম-নির্দিষ্ট প্লেব্যাক ইউআরআই গুগল টিভি সারফেসের জন্য প্রয়োজন

গুগল টিভি এবং মোবাইলের মতো প্ল্যাটফর্মের জন্য প্রোভাইডার অ্যাপে সত্তাটির ডিপ লিঙ্ক।

PlatformSpecificPlayback অবজেক্টের তালিকা
সুপারিশের কারণ ঐচ্ছিক ব্যবহারকারীকে বিষয়বস্তুটি সুপারিশ করার যৌক্তিকতা। সুপারিশের কারণ বস্তু
মন্তব্যের সারাংশ ঐচ্ছিক পোস্টটির মন্তব্যসমূহের সারসংক্ষেপ। স্ট্রিং

পোস্ট সম্পর্কিত মেটাডেটা (আবশ্যক)

টেক্সট কন্টেন্ট, ছবি অথবা ওয়েব কন্টেন্টের মধ্যে অন্তত একটি থাকা আবশ্যক।

ছবি(গুলি) ঐচ্ছিক

ছবিগুলো পোর্ট্রেট অ্যাস্পেক্ট রেশিওতে হতে হবে।

একাধিক ছবি দেওয়া হলেও UI-তে কেবল একটি ছবি দেখানো হতে পারে। তবে, অ্যাপটিতে যে আরও ছবি আছে, তার দৃশ্যমান ইঙ্গিত UI দিতে পারে।

পোস্টটি যদি একটি ভিডিও হয়, তবে প্রদানকারীকে ভিডিওটির একটি থাম্বনেইল ছবি হিসেবে প্রদান করতে হবে।

নির্দেশনার জন্য ছবির বিবরণ দেখুন।
পাঠ্য বিষয়বস্তু ঐচ্ছিক কোনো পোস্ট, আপডেট ইত্যাদির মূল লেখা। স্ট্রিং (সর্বোচ্চ ১৪০ অক্ষর ব্যবহারের পরামর্শ দেওয়া হচ্ছে)
ভিডিও কন্টেন্ট (ঐচ্ছিক)
সময়কাল প্রয়োজনীয় ভিডিওটির সময়কাল মিলিসেকেন্ডে। দীর্ঘ
ছবি প্রয়োজনীয় ভিডিও কন্টেন্টের প্রিভিউ ছবি। নির্দেশনার জন্য ছবির বিবরণ দেখুন।
লিঙ্ক প্রিভিউ (ঐচ্ছিক)
লিঙ্ক প্রিভিউ - শিরোনাম প্রয়োজনীয় ওয়েব পেজের বিষয়বস্তুর শিরোনাম নির্দেশ করার জন্য টেক্সট স্ট্রিং
লিঙ্ক প্রিভিউ - হোস্টনেম প্রয়োজনীয় ওয়েব পেজের মালিককে নির্দেশ করার জন্য টেক্সট, যেমন "ইনসাইডার" স্ট্রিং
লিঙ্ক প্রিভিউ - ছবি ঐচ্ছিক ওয়েব কন্টেন্টের জন্য হিরো ইমেজ নির্দেশনার জন্য ছবির বিবরণ দেখুন।
টাইমস্ট্যাম্প ঐচ্ছিক পোস্টটি প্রকাশিত হওয়ার সময়। মিলিসেকেন্ডে ইপক টাইমস্ট্যাম্প
প্রোফাইল সম্পর্কিত মেটাডেটা (ঐচ্ছিক)
নাম প্রয়োজনীয় প্রোফাইলের নাম বা আইডি বা হ্যান্ডেল, যেমন 'জন ডো', '@টিমপিক্সেল'। স্ট্রিং (সর্বোচ্চ ২৫ অক্ষর ব্যবহারের পরামর্শ দেওয়া হচ্ছে)
অতিরিক্ত পাঠ্য ঐচ্ছিক

প্রোফাইল আইডি, হ্যান্ডেল বা অতিরিক্ত মেটাডেটা হিসেবে ব্যবহার করা যেতে পারে।

উদাহরণস্বরূপ "@John-Doe", "৫ মিলিয়ন ফলোয়ার", "আপনার ভালো লাগতে পারে", "ট্রেন্ডিং", "৫টি নতুন পোস্ট"

স্ট্রিং (সর্বোচ্চ ৪০ অক্ষর ব্যবহারের পরামর্শ দেওয়া হচ্ছে)
অবতার প্রয়োজনীয়

ব্যবহারকারীর প্রোফাইল ছবি বা অ্যাভাটার ছবি।

বর্গাকার ১:১ ছবি

নির্দেশনার জন্য ছবির বিবরণ দেখুন।
অতিরিক্ত ছবি ঐচ্ছিক

উদাহরণস্বরূপ, প্রোফাইল ব্যাজ - যাচাইকৃত ব্যাজ

বর্গাকার ১:১ ছবি

নির্দেশনার জন্য ছবির বিবরণ দেখুন।
মিথস্ক্রিয়া সম্পর্কিত মেটাডেটা (ঐচ্ছিক)
গণনা প্রয়োজনীয়

মিথস্ক্রিয়ার সংখ্যা উল্লেখ করুন, যেমন - "৩.৭ মিলিয়ন"।

দ্রষ্টব্য: অংশীদারদের Count অথবা CountWithOptionalLabel ব্যবহার করা উচিত।

স্ট্রিং
ঐচ্ছিক লেবেল সহ গণনা প্রয়োজনীয়

একটি ঐচ্ছিক লেবেলের সাহায্যে ইন্টারঅ্যাকশনের সংখ্যা উল্লেখ করুন, যেমন - "৩.৭ মিলিয়ন লাইক"।

দ্রষ্টব্য: অংশীদারদের Count অথবা CountWithOptionalLabel ব্যবহার করা উচিত।

স্ট্রিং
লেবেল

ঐচ্ছিক

প্রদান করা না হলে, ভিজ্যুয়াল অবশ্যই প্রদান করতে হবে।

ইন্টারঅ্যাকশনটি কীসের জন্য তা উল্লেখ করুন। উদাহরণস্বরূপ - "পছন্দ"। স্ট্রিং (গণনা ও লেবেল মিলিয়ে সর্বোচ্চ ২০টি অক্ষর ব্যবহারের পরামর্শ দেওয়া হচ্ছে)
চাক্ষুষ

ঐচ্ছিক

প্রদান করা না হলে, লেবেল অবশ্যই প্রদান করতে হবে।

ইন্টারঅ্যাকশনটি কীসের জন্য তা উল্লেখ করুন। উদাহরণস্বরূপ - লাইক আইকন, ইমোজি দেখানো ছবি।

একাধিক ছবি দেওয়া যেতে পারে, তবে সবগুলো ছবি সব ফর্ম ফ্যাক্টরে দেখানো নাও যেতে পারে।

বর্গাকার ১:১ ছবি

নির্দেশনার জন্য ছবির বিবরণ দেখুন।
DisplayTimeWindow (ঐচ্ছিক) - সারফেসে কোনো কন্টেন্ট প্রদর্শনের জন্য একটি সময়সীমা নির্ধারণ করুন।
শুরুর সময় ঐচ্ছিক

ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হবে।

সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য।

মিলিসেকেন্ডে ইপক টাইমস্ট্যাম্প
শেষ টাইমস্ট্যাম্প ঐচ্ছিক

ইপক টাইমস্ট্যাম্প, যার পরে বিষয়বস্তুটি আর পৃষ্ঠে প্রদর্শিত হয় না।

সেট করা না থাকলে, বিষয়বস্তুটি পৃষ্ঠে প্রদর্শিত হওয়ার যোগ্য।

মিলিসেকেন্ডে ইপক টাইমস্ট্যাম্প

ছবির স্পেসিফিকেশন

ছবিগুলো পাবলিক সিডিএন-এ হোস্ট করা প্রয়োজন, যাতে গুগল সেগুলোতে অ্যাক্সেস করতে পারে।

ফাইল ফরম্যাট

PNG, JPG, স্ট্যাটিক GIF, WebP

সর্বোচ্চ ফাইলের আকার

৫১২০ কেবি

অতিরিক্ত সুপারিশ

  • ছবির নিরাপদ এলাকা: আপনার গুরুত্বপূর্ণ বিষয়বস্তু ছবির মাঝের ৮০% অংশে রাখুন।
  • একটি স্বচ্ছ ব্যাকগ্রাউন্ড ব্যবহার করুন, যাতে ছবিটি ডার্ক এবং লাইট থিম সেটিংসে সঠিকভাবে প্রদর্শিত হয়।

ধাপ ২: ক্লাস্টার ডেটা প্রদান করুন

কন্টেন্ট প্রকাশের কাজটি ব্যাকগ্রাউন্ডে (যেমন, WorkManager ব্যবহার করে) সম্পাদন করার এবং নিয়মিতভাবে বা কোনো নির্দিষ্ট ইভেন্টের ভিত্তিতে (যেমন, প্রতিবার ব্যবহারকারী অ্যাপটি খুললে অথবা যখন ব্যবহারকারী কোনো নতুন অ্যাকাউন্ট ফলো করেন) শিডিউল করার পরামর্শ দেওয়া হয়।

AppEngageSocialClient সামাজিক ক্লাস্টার প্রকাশ করার জন্য দায়ী।

ক্লায়েন্টে ক্লাস্টার প্রকাশ করার জন্য নিম্নলিখিত API গুলো রয়েছে:

  • isServiceAvailable
  • publishRecommendationClusters
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • 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 অবজেক্টের একটি তালিকা প্রকাশ করতে ব্যবহৃত হয়।

একটি RecommendationCluster অবজেক্টের নিম্নলিখিত অ্যাট্রিবিউটগুলো থাকতে পারে:

বৈশিষ্ট্য প্রয়োজনীয়তা বর্ণনা
SocialPostEntity বা PortraitMediaEntity-এর তালিকা প্রয়োজনীয় এই সুপারিশ ক্লাস্টারের সুপারিশগুলো গঠনকারী সত্তাগুলোর একটি তালিকা। একটি ক্লাস্টারের অন্তর্ভুক্ত সত্তাগুলো অবশ্যই একই ধরনের হতে হবে।
শিরোনাম প্রয়োজনীয়

সুপারিশ ক্লাস্টারের শিরোনাম (উদাহরণস্বরূপ, আপনার বন্ধুদের কাছ থেকে সর্বশেষ )।

প্রস্তাবিত লেখার আকার: ২৫ অক্ষরের কম (অতিরিক্ত দীর্ঘ লেখার শেষে ডট ডট চিহ্ন দেখা যেতে পারে)

উপশিরোনাম ঐচ্ছিক সুপারিশ ক্লাস্টারের উপশিরোনাম।
অ্যাকশন উরি ঐচ্ছিক

পার্টনার অ্যাপের সেই পৃষ্ঠার ডিপ লিঙ্ক, যেখানে ব্যবহারকারীরা সুপারিশগুলোর সম্পূর্ণ তালিকা দেখতে পারবেন।

দ্রষ্টব্য: অ্যাট্রিবিউশনের জন্য আপনি ডিপ লিঙ্ক ব্যবহার করতে পারেন। এই প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী (FAQ) দেখুন।

কোটলিন

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Latest from your friends")
                        .build())
                .build())

জাভা

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Latest from your friends")
                        .build())
                .build());

যখন পরিষেবাটি অনুরোধটি গ্রহণ করে, তখন একটি লেনদেনের মধ্যে নিম্নলিখিত পদক্ষেপগুলি সম্পন্ন হয়:

  • বিদ্যমান সমস্ত সুপারিশ ক্লাস্টার ডেটা মুছে ফেলা হয়েছে।
  • অনুরোধ থেকে প্রাপ্ত ডেটা পার্স করে নতুন সুপারিশ ক্লাস্টারগুলিতে সংরক্ষণ করা হয়।

কোনো ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধটি প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।

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();

সার্ভিসটি অনুরোধটি গ্রহণ করলে, এটি রিকমেন্ডেশন ক্লাস্টারগুলো থেকে বিদ্যমান ডেটা মুছে ফেলে। কোনো ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধটি প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।

deleteUserManagementCluster

এই এপিআইটি UserAccountManagement ক্লাস্টারের বিষয়বস্তু মুছে ফেলার জন্য ব্যবহৃত হয়।

কোটলিন

client.deleteUserManagementCluster()

জাভা

client.deleteUserManagementCluster();

সার্ভিসটি অনুরোধটি গ্রহণ করলে, এটি UserAccountManagement ক্লাস্টার থেকে বিদ্যমান ডেটা মুছে ফেলে। কোনো ত্রুটির ক্ষেত্রে, সম্পূর্ণ অনুরোধটি প্রত্যাখ্যান করা হয় এবং বিদ্যমান অবস্থা বজায় রাখা হয়।

deleteClusters

এই এপিআইটি একটি নির্দিষ্ট ক্লাস্টার টাইপের কন্টেন্ট মুছে ফেলার জন্য ব্যবহৃত হয়।

কোটলিন

client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_RECOMMENDATION)
      ...
      .build())

জাভা

client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .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
}

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)
}

জাভা

class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION 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);
}
  • আপনার 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>
   </receiver>
</application>

পরিষেবাটির পক্ষ থেকে নিম্নলিখিত অভিপ্রায়গুলো পাঠানো হবে:

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION এই ইন্টেন্টটি গ্রহণ করার সময় একটি publishRecommendationClusters কল শুরু করার পরামর্শ দেওয়া হয়।

ইন্টিগ্রেশন ওয়ার্কফ্লো

আপনার ইন্টিগ্রেশন সম্পন্ন হওয়ার পর তা যাচাই করার ধাপে ধাপে নির্দেশিকার জন্য, Engage ডেভেলপার ইন্টিগ্রেশন ওয়ার্কফ্লো দেখুন।

প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী

প্রায়শই জিজ্ঞাসিত প্রশ্নগুলির জন্য Engage SDK-এর প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী দেখুন।

যোগাযোগ করুন

ইন্টিগ্রেশন প্রক্রিয়া চলাকালীন কোনো প্রশ্ন থাকলে engage-developers@google.com এ যোগাযোগ করুন। আমাদের টিম যত তাড়াতাড়ি সম্ভব উত্তর দেবে।

পরবর্তী পদক্ষেপ

এই ইন্টিগ্রেশনটি সম্পন্ন করার পর, আপনার পরবর্তী পদক্ষেপগুলো নিম্নরূপ:

  • engage-developers@google.com এ একটি ইমেল পাঠান এবং আপনার ইন্টিগ্রেটেড APK-টি সংযুক্ত করুন, যা গুগলের পরীক্ষার জন্য প্রস্তুত।
  • ইন্টিগ্রেশনটি প্রত্যাশিতভাবে কাজ করছে কিনা তা নিশ্চিত করার জন্য গুগল অভ্যন্তরীণভাবে যাচাই ও পর্যালোচনা করে। কোনো পরিবর্তনের প্রয়োজন হলে, গুগল প্রয়োজনীয় বিবরণসহ আপনার সাথে যোগাযোগ করে।
  • টেস্টিং সম্পন্ন হলে এবং কোনো পরিবর্তনের প্রয়োজন না থাকলে, গুগল আপনার সাথে যোগাযোগ করে জানিয়ে দেয় যে আপনি আপডেট করা ও সমন্বিত APK ফাইলটি প্লে স্টোরে প্রকাশ করা শুরু করতে পারেন।
  • আপনার আপডেট করা APK ফাইলটি প্লে স্টোরে প্রকাশিত হয়েছে বলে গুগল নিশ্চিত করার পর, আপনার রিকমেন্ডেশন ও ক্লাস্টারগুলো প্রকাশিত হবে এবং ব্যবহারকারীরা তা দেখতে পাবেন।