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

Google একটি অন-ডিভাইস পৃষ্ঠ তৈরি করছে যা ব্যবহারকারীদের অ্যাপগুলিকে উল্লম্বভাবে সংগঠিত করে এবং ব্যক্তিগতকৃত অ্যাপ সামগ্রী ব্যবহার এবং আবিষ্কারের জন্য একটি নতুন নিমজ্জিত অভিজ্ঞতা সক্ষম করে৷ এই পূর্ণ স্ক্রীন অভিজ্ঞতা ডেভেলপার অংশীদারদের তাদের অ্যাপের বাইরে একটি ডেডিকেটেড চ্যানেলে তাদের সেরা সমৃদ্ধ সামগ্রী প্রদর্শন করার সুযোগ দেয়।

এই নথিতে বিকাশকারী অংশীদারদের জন্য নির্দেশাবলী রয়েছে যাতে তারা তাদের সামাজিক বিষয়বস্তু একত্রিত করতে এনগেজ SDK ব্যবহার করে এই নতুন পৃষ্ঠের ক্ষেত্রটি তৈরি করতে পারে৷

ইন্টিগ্রেশন বিস্তারিত

নিম্নলিখিত বিভাগে ইন্টিগ্রেশন বিস্তারিত ক্যাপচার.

পরিভাষা

প্রস্তাবনা ক্লাস্টারগুলি একজন স্বতন্ত্র বিকাশকারী অংশীদার থেকে ব্যক্তিগতকৃত পরামর্শগুলি দেখায়৷

আপনার সুপারিশগুলি নিম্নলিখিত কাঠামো গ্রহণ করে:

সুপারিশ ক্লাস্টার : UI ভিউ যাতে একই বিকাশকারী অংশীদারের কাছ থেকে সুপারিশের একটি গোষ্ঠী রয়েছে৷

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

  • PortraitMediaEntity
  • সামাজিক পোস্ট সত্তা

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

  • পোস্ট

    • পোর্ট্রেট মোডে ছবি এবং টাইমস্ট্যাম্প, বা
    • পোর্ট্রেট মোডে ছবি + পাঠ্য বিষয়বস্তু এবং টাইমস্ট্যাম্প
  • প্রোফাইল

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

    • শুধুমাত্র গণনা এবং লেবেল, বা
    • গণনা এবং ভিজ্যুয়াল (আইকন)

SocialPostEntity প্রোফাইল, পোস্ট এবং মিথস্ক্রিয়া সম্পর্কিত মেটাডেটা ধারণ করে।

  • প্রোফাইল

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

    • পাঠ্য এবং টাইমস্ট্যাম্প, বা
    • রিচ মিডিয়া (ছবি বা সমৃদ্ধ URL) এবং টাইমস্ট্যাম্প, বা
    • পাঠ্য এবং সমৃদ্ধ মিডিয়া (ছবি বা সমৃদ্ধ URL) এবং টাইমস্ট্যাম্প, বা
    • ভিডিও পূর্বরূপ (থাম্বনেল এবং সময়কাল) এবং টাইমস্ট্যাম্প
  • মিথস্ক্রিয়া

    • শুধুমাত্র গণনা এবং লেবেল, বা
    • গণনা এবং ভিজ্যুয়াল (আইকন)

প্রাক কাজ

ন্যূনতম 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 কমপক্ষে 5 ( PortraitMediaEntity , বা SocialPostEntity ) সর্বাধিক 25 ( PortraitMediaEntity , বা SocialPostEntity )

ধাপ 1: সত্তা তথ্য প্রদান

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

  1. PortraitMediaEntity
  2. SocialPostEntity

নীচের চার্টগুলি প্রতিটি ধরণের জন্য উপলব্ধ বৈশিষ্ট্য এবং প্রয়োজনীয়তার রূপরেখা দেয়।

PortraitMediaEntity

বৈশিষ্ট্য প্রয়োজনীয়তা বর্ণনা বিন্যাস
কর্ম URI প্রয়োজন

প্রদানকারী অ্যাপে সত্তার সাথে গভীর লিঙ্ক।

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

ইউআরআই
পোস্ট সম্পর্কিত মেটাডেটা (প্রয়োজনীয়)
ছবি(গুলি) প্রয়োজন

ছবি(গুলি) পোর্ট্রেট আকৃতির অনুপাতের মধ্যে হওয়া উচিত।

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

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

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.
পাঠ্য বিষয়বস্তু ঐচ্ছিক একটি পোস্টের মূল পাঠ্য, আপডেট, ইত্যাদি। স্ট্রিং (প্রস্তাবিত সর্বাধিক 140 অক্ষর)
টাইমস্ট্যাম্প ঐচ্ছিক পোস্টটি প্রকাশিত হওয়ার সময়। মিলিসেকেন্ডে যুগের টাইমস্ট্যাম্প
ভিডিও বিষয়বস্তু হয় ঐচ্ছিক পোস্টটি কি ভিডিও? বুলিয়ান
ভিডিও সময়কাল ঐচ্ছিক মিলিসেকেন্ডে ভিডিওটির সময়কাল। লম্বা
প্রোফাইল সম্পর্কিত মেটাডেটা (ঐচ্ছিক)
নাম প্রয়োজন প্রোফাইল নাম বা আইডি বা হ্যান্ডেল, যেমন "John Doe", "@TeamPixel" স্ট্রিং (প্রস্তাবিত সর্বাধিক 25 অক্ষর)
অবতার প্রয়োজন

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

বর্গক্ষেত্র 1:1 চিত্র

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.
অতিরিক্ত চিত্র ঐচ্ছিক

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

বর্গক্ষেত্র 1:1 চিত্র

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

মিথস্ক্রিয়া সংখ্যা নির্দেশ করুন, উদাহরণস্বরূপ - "3.7 M"।

দ্রষ্টব্য: গণনা এবং গণনা মান উভয় প্রদান করা হলে, গণনা ব্যবহার করা হবে

স্ট্রিং

প্রস্তাবিত পাঠ্যের আকার: গণনার জন্য সর্বাধিক 20 অক্ষর + লেবেল মিলিত

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

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

দ্রষ্টব্য: যদি আপনার অ্যাপটি বিভিন্ন ডিসপ্লে আকারের জন্য একটি বৃহৎ সংখ্যাকে অপ্টিমাইজ করা উচিত তা নিয়ে যুক্তি পরিচালনা না করে তাহলে গণনার পরিবর্তে গণনা মান প্রদান করুন। গণনা এবং গণনা মান উভয় প্রদান করা হলে, গণনা ব্যবহার করা হয়।

লম্বা
লেবেল ঐচ্ছিক মিথস্ক্রিয়া লেবেল কি জন্য ইঙ্গিত. যেমন- "লাইক"।

স্ট্রিং

প্রস্তাবিত পাঠ্যের আকার: গণনার জন্য সর্বাধিক 20 অক্ষর + লেবেল মিলিত

ভিজ্যুয়াল ঐচ্ছিক

মিথস্ক্রিয়া কি জন্য ইঙ্গিত. যেমন- ছবি লাইক আইকন, ইমোজি দেখাচ্ছে।

1টির বেশি চিত্র প্রদান করতে পারে, যদিও সবগুলি সমস্ত ফর্ম কারণগুলিতে দেখানো নাও হতে পারে৷

দ্রষ্টব্য: স্কোয়ার 1:1 চিত্র হতে হবে

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.
DisplayTimeWindow (ঐচ্ছিক) - একটি বিষয়বস্তুর পৃষ্ঠে দেখানোর জন্য একটি সময় উইন্ডো সেট করুন
টাইমস্ট্যাম্প শুরু করুন ঐচ্ছিক

যুগের টাইমস্ট্যাম্প যার পরে বিষয়বস্তু পৃষ্ঠে দেখানো উচিত।

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

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

যুগের টাইমস্ট্যাম্প যার পরে বিষয়বস্তু পৃষ্ঠে আর দেখানো হয় না।

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

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

SocialPostEntity

বৈশিষ্ট্য প্রয়োজনীয়তা বর্ণনা বিন্যাস
কর্ম URI প্রয়োজন

প্রদানকারী অ্যাপে সত্তার সাথে গভীর লিঙ্ক।

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

ইউআরআই

পোস্ট সম্পর্কিত মেটাডেটা (প্রয়োজনীয়)

কমপক্ষে একটি পাঠ্য বিষয়বস্তু, চিত্র বা ওয়েব সামগ্রী প্রয়োজন৷

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

ছবি(গুলি) পোর্ট্রেট আকৃতির অনুপাতের মধ্যে হওয়া উচিত।

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

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

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.
পাঠ্য বিষয়বস্তু ঐচ্ছিক একটি পোস্টের মূল পাঠ্য, আপডেট, ইত্যাদি। স্ট্রিং (প্রস্তাবিত সর্বাধিক 140 অক্ষর)
ভিডিও সামগ্রী (ঐচ্ছিক)
সময়কাল প্রয়োজন মিলিসেকেন্ডে ভিডিওটির সময়কাল। লম্বা
ছবি প্রয়োজন ভিডিও বিষয়বস্তুর পূর্বরূপ চিত্র। নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.
লিঙ্ক প্রিভিউ (ঐচ্ছিক)
লিঙ্ক প্রিভিউ - শিরোনাম প্রয়োজন ওয়েব পৃষ্ঠার বিষয়বস্তুর শিরোনাম নির্দেশ করার জন্য পাঠ্য স্ট্রিং
লিঙ্ক প্রিভিউ - হোস্টনাম প্রয়োজন ওয়েব পৃষ্ঠার মালিককে নির্দেশ করার জন্য পাঠ্য, যেমন "INSIDER" স্ট্রিং
লিঙ্ক প্রিভিউ - ছবি ঐচ্ছিক ওয়েব কন্টেন্টের জন্য হিরো ইমেজ নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.
টাইমস্ট্যাম্প ঐচ্ছিক পোস্টটি প্রকাশিত হওয়ার সময়। মিলিসেকেন্ডে যুগের টাইমস্ট্যাম্প
প্রোফাইল সম্পর্কিত মেটাডেটা (ঐচ্ছিক)
নাম প্রয়োজন প্রোফাইল নাম বা আইডি বা হ্যান্ডেল, যেমন "John Doe", "@TeamPixel।" স্ট্রিং (প্রস্তাবিত সর্বাধিক 25 অক্ষর)
অতিরিক্ত পাঠ্য ঐচ্ছিক

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

যেমন "@John-Doe", "5M অনুসরণকারী", "আপনি পছন্দ করতে পারেন", "ট্রেন্ডিং", "5টি নতুন পোস্ট"

স্ট্রিং (প্রস্তাবিত সর্বাধিক 40 অক্ষর)
অবতার প্রয়োজন

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

বর্গক্ষেত্র 1:1 চিত্র

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.
অতিরিক্ত চিত্র ঐচ্ছিক

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

বর্গক্ষেত্র 1:1 চিত্র

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.
মিথস্ক্রিয়া সম্পর্কিত মেটাডেটা (ঐচ্ছিক)
গণনা প্রয়োজন মিথস্ক্রিয়া সংখ্যা নির্দেশ করুন, উদাহরণস্বরূপ - "3.7 M।" স্ট্রিং (প্রস্তাবিত সর্বাধিক 20 অক্ষর গণনা + লেবেল মিলিত)
লেবেল

ঐচ্ছিক

প্রদান করা না হলে, ভিজ্যুয়াল প্রদান করা আবশ্যক.

মিথস্ক্রিয়া কি জন্য ইঙ্গিত. যেমন- "পছন্দ।" স্ট্রিং (প্রস্তাবিত সর্বাধিক 20 অক্ষর গণনা + লেবেল মিলিত)
ভিজ্যুয়াল

ঐচ্ছিক

প্রদান করা না হলে, লেবেল প্রদান করা আবশ্যক.

মিথস্ক্রিয়া কি জন্য ইঙ্গিত. যেমন- ছবি লাইক আইকন, ইমোজি দেখাচ্ছে।

1টির বেশি চিত্র প্রদান করতে পারে, যদিও সবগুলি সমস্ত ফর্ম কারণগুলিতে দেখানো নাও হতে পারে৷

বর্গক্ষেত্র 1:1 চিত্র

নির্দেশিকা জন্য ইমেজ স্পেসিফিকেশন দেখুন.
DisplayTimeWindow (ঐচ্ছিক) - একটি বিষয়বস্তুর পৃষ্ঠে দেখানোর জন্য একটি সময় উইন্ডো সেট করুন
টাইমস্ট্যাম্প শুরু করুন ঐচ্ছিক

যুগের টাইমস্ট্যাম্প যার পরে বিষয়বস্তু পৃষ্ঠে দেখানো উচিত।

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

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

যুগের টাইমস্ট্যাম্প যার পরে বিষয়বস্তু পৃষ্ঠে আর দেখানো হয় না।

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

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

ইমেজ স্পেসিফিকেশন

ছবিগুলিকে সর্বজনীন CDN-এ হোস্ট করতে হবে যাতে Google সেগুলি অ্যাক্সেস করতে পারে৷

ফাইল ফরম্যাট

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

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

5120 KB

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

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

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

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

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

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

  • isServiceAvailable
  • publishRecommendationClusters
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • 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

এই API একটি তালিকা RecommendationCluster অবজেক্ট প্রকাশ করতে ব্যবহৃত হয়।

একটি RecommendationCluster অবজেক্টের নিম্নলিখিত বৈশিষ্ট্য থাকতে পারে:

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

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

প্রস্তাবিত পাঠ্যের আকার: 25 অক্ষরের নিচে (অত্যধিক দীর্ঘ পাঠ্য উপবৃত্ত দেখাতে পারে)

সাবটাইটেল ঐচ্ছিক সুপারিশ ক্লাস্টার জন্য সাবটাইটেল.
অ্যাকশন উরি ঐচ্ছিক

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

দ্রষ্টব্য: আপনি অ্যাট্রিবিউশনের জন্য গভীর লিঙ্ক ব্যবহার করতে পারেন। এই 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

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

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

deleteUserManagementCluster

UserAccountManagement Cluster-এর বিষয়বস্তু মুছতে এই API ব্যবহার করা হয়।

কোটলিন

client.deleteUserManagementCluster()

জাভা

client.deleteUserManagementCluster();

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

deleteClusters

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

কোটলিন

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

জাভা

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

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

}

  • আপনার 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>
   </receiver>
</application>

নিম্নলিখিত উদ্দেশ্যগুলি পরিষেবা দ্বারা পাঠানো হবে:

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

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

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

FAQs

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

যোগাযোগ

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

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

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

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