Engage SDK Social: دستورالعمل های یکپارچه سازی فنی شخص ثالث

با دسترسی به کاربران خود در هر کجا که هستند، تعامل با برنامه را افزایش دهید. Engage SDK را ادغام کنید تا توصیه‌های شخصی‌سازی‌شده و محتوای مداوم را مستقیماً به کاربران در سطوح مختلف روی دستگاه، مانند Collections ، Entertainment Space و Play Store ارائه دهید. این ادغام کمتر از ۵۰ کیلوبایت (فشرده‌شده) به میانگین APK اضافه می‌کند و برای اکثر برنامه‌ها حدود یک هفته از زمان توسعه‌دهنده را می‌گیرد. برای اطلاعات بیشتر به سایت تجاری ما مراجعه کنید.

این راهنما شامل دستورالعمل‌هایی برای شرکای توسعه‌دهنده است تا محتوای رسانه‌های اجتماعی را به سطوح محتوای Engage ارائه دهند.

جزئیات ادغام

بخش زیر جزئیات ادغام را شرح می‌دهد.

اصطلاحات

خوشه‌های توصیه ، پیشنهادهای شخصی‌سازی‌شده از یک شریک توسعه‌دهنده‌ی منفرد را نشان می‌دهند.

توصیه‌های شما ساختار زیر را دارند:

خوشه توصیه : نمای رابط کاربری که شامل گروهی از توصیه‌ها از یک شریک توسعه‌دهنده است.

هر خوشه توصیه شامل یکی از دو نوع موجودیت زیر است:

  • نهاد رسانه‌ای پرتره
  • نهاد اجتماعی

PortraitMediaEntity باید شامل یک تصویر عمودی برای پست باشد. متادیتای مربوط به پروفایل و تعامل اختیاری است.

  • پست

    • تصویر در حالت عمودی و برچسب زمان، یا
    • تصویر در حالت عمودی + محتوای متن و برچسب زمان
  • پروفایل

    • آواتار، نام یا شناسه، تصویر اضافی
  • تعاملات

    • فقط بشمارید و برچسب بزنید، یا
    • تعداد و تصویر (آیکون)

SocialPostEntity شامل فراداده‌های مربوط به پروفایل، پست و تعامل است.

  • پروفایل

    • آواتار، نام یا شناسه، متن اضافی، تصویر اضافی
  • پست

    • متن و مهر زمان، یا
    • رسانه‌های غنی (تصویر یا URL غنی) و مهر زمان، یا
    • متن و رسانه‌های غنی (تصویر یا URL غنی) و مهر زمان، یا
    • پیش‌نمایش ویدیو (تصویر بندانگشتی و مدت زمان) و برچسب زمانی
  • تعاملات

    • فقط بشمارید و برچسب بزنید، یا
    • تعداد و تصویر (آیکون)

پیش کار

حداقل سطح API: ۱۹

کتابخانه com.google.android.engage:engage-core به برنامه خود اضافه کنید:

dependencies {
    // Make sure you also include that repository in your project's build.gradle file.
    implementation 'com.google.android.engage:engage-core:1.5.12'
}

خلاصه

طراحی بر اساس پیاده‌سازی یک سرویس محدود (bound service) است.

داده‌هایی که یک کلاینت می‌تواند منتشر کند، برای انواع مختلف خوشه‌ها مشمول محدودیت‌های زیر است:

نوع خوشه محدودیت‌های خوشه حداقل محدودیت موجودیت در یک خوشه حداکثر محدودیت‌های موجودیت در یک خوشه
خوشه(های) پیشنهادی حداکثر ۷ عدد حداقل ۱ ( PortraitMediaEntity یا SocialPostEntity ) حداکثر ۵۰ ( PortraitMediaEntity یا SocialPostEntity )

مرحله ۱: ارائه داده‌های موجودیت

SDK موجودیت‌های مختلفی را برای نمایش هر نوع آیتم تعریف کرده است. SDK از موجودیت‌های زیر برای دسته‌ی Social پشتیبانی می‌کند:

  1. PortraitMediaEntity
  2. SocialPostEntity

نمودارهای زیر ویژگی‌ها و الزامات موجود برای هر نوع را شرح می‌دهند.

PortraitMediaEntity

ویژگی مورد نیاز توضیحات قالب
آدرس اینترنتی اقدام مورد نیاز برای همه سطوح غیر از گوگل تی‌وی

پیوند عمیق به موجودیت در برنامه ارائه دهنده.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

یو آر آی
پخش ویژه پلتفرم مورد نیاز برای سطح تلویزیون گوگل

پیوند عمیق به نهاد در برنامه ارائه دهنده برای پلتفرم‌هایی مانند Google TV و Mobile.

فهرست اشیاء PlatformSpecificPlayback
دلیل توصیه اختیاری توجیهی برای توصیه محتوا به کاربر. شیء RecommendationReason
خلاصه نظرات اختیاری خلاصه نظرات مربوط به پست رشته
متادیتای مرتبط با پست (الزامی)
تصویر(ها) مورد نیاز

تصویر(ها) باید با نسبت ابعاد عمودی باشند.

ممکن است رابط کاربری فقط یک تصویر را در صورت ارائه چندین تصویر نشان دهد. با این حال، رابط کاربری ممکن است نشانگر بصری ارائه دهد که تصاویر بیشتری در برنامه وجود دارد.

اگر پست یک ویدیو است، ارائه دهنده باید یک تصویر کوچک از ویدیو ارائه دهد تا به عنوان تصویر نمایش داده شود.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
محتوای متنی اختیاری متن اصلی یک پست، به‌روزرسانی و غیره رشته (حداکثر ۱۴۰ کاراکتر توصیه می‌شود)
مهر زمانی اختیاری زمان انتشار پست. مهر زمانی عصر بر حسب میلی ثانیه
آیا محتوای ویدیویی اختیاری پست ویدیویی هست؟ بولی
مدت زمان ویدیو اختیاری مدت زمان ویدیو بر حسب میلی ثانیه. طولانی
فراداده‌های مرتبط با پروفایل (اختیاری)
نام مورد نیاز نام یا شناسه یا شناسه پروفایل، مثلاً "John Doe"، "@TeamPixel" رشته (حداکثر ۲۵ کاراکتر توصیه می‌شود)
آواتار مورد نیاز

تصویر پروفایل یا تصویر آواتار کاربر.

تصویر مربعی ۱:۱

برای راهنمایی به مشخصات تصویر مراجعه کنید.
تصویر اضافی اختیاری

نشان پروفایل. برای مثال - نشان تأیید شده

تصویر مربعی ۱:۱

برای راهنمایی به مشخصات تصویر مراجعه کنید.
فراداده‌های مرتبط با تعاملات (اختیاری)
تعداد اختیاری

تعداد تعاملات را مشخص کنید، مثلاً - "3.7 میلیون".

نکته: اگر هم تعداد و هم مقدار تعداد ارائه شوند، از تعداد استفاده خواهد شد.

نکته: شرکا باید از Count یا CountWithOptionalLabel استفاده کنند.

رشته

شمارش با برچسب اختیاری اختیاری

تعداد تعاملات را با یک برچسب اختیاری مشخص کنید، برای مثال - "۳.۷ میلیون لایک".

نکته: اگر هر دو گزینه CountWithOptionalLabel و Count Value ارائه شده باشند، یکی از آنها استفاده خواهد شد.

نکته: شرکا باید از Count یا CountWithOptionalLabel استفاده کنند.

رشته

مقدار شمارش اختیاری

تعداد تعاملات به عنوان یک مقدار.

نکته: اگر برنامه شما منطق مربوط به چگونگی بهینه‌سازی یک عدد بزرگ برای اندازه‌های مختلف نمایشگر را مدیریت نمی‌کند، به جای Count، Count Value را ارائه دهید. اگر هم Count و هم Count Value ارائه شوند، از Count استفاده می‌شود.

طولانی
برچسب اختیاری مشخص کنید که برچسب تعامل برای چیست. برای مثال - "لایک".

رشته

بصری اختیاری

مشخص کنید که این تعامل برای چیست. برای مثال - تصویری که آیکون لایک یا ایموجی را نشان می‌دهد.

می‌تواند بیش از یک تصویر ارائه دهد، هرچند ممکن است همه آنها در همه فرم فاکتورها نمایش داده نشوند.

توجه: تصویر باید مربعی شکل و با نسبت تصویر ۱:۱ باشد.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
DisplayTimeWindow (اختیاری) - یک پنجره زمانی برای نمایش محتوا روی سطح تنظیم کنید
شروع مهر زمانی اختیاری

مهر زمانیِ دوره‌ای که پس از آن محتوا باید روی سطح نمایش داده شود.

اگر تنظیم نشده باشد، محتوا واجد شرایط نمایش روی سطح است.

مهر زمانی عصر بر حسب میلی‌ثانیه
مهر زمان پایان اختیاری

مهر زمانیِ دوره‌ای که پس از آن محتوا دیگر روی سطح نمایش داده نمی‌شود.

اگر تنظیم نشده باشد، محتوا واجد شرایط نمایش روی سطح است.

مهر زمانی عصر بر حسب میلی‌ثانیه

SocialPostEntity

ویژگی مورد نیاز توضیحات قالب
آدرس اینترنتی اقدام مورد نیاز

پیوند عمیق به موجودیت در برنامه ارائه دهنده.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

یو آر آی
URI های پخش ویژه پلتفرم مورد نیاز برای سطح تلویزیون گوگل

پیوند عمیق به نهاد در برنامه ارائه دهنده برای پلتفرم‌هایی مانند Google TV و Mobile.

فهرست اشیاء PlatformSpecificPlayback
دلیل توصیه اختیاری توجیهی برای توصیه محتوا به کاربر. شیء RecommendationReason
خلاصه نظرات اختیاری خلاصه نظرات مربوط به پست رشته

فراداده‌های مرتبط با پست (الزامی)

حداقل یکی از موارد زیر الزامی است: محتوای متن، تصویر یا محتوای وب

تصویر(ها) اختیاری

تصویر(ها) باید با نسبت ابعاد عمودی باشند.

ممکن است رابط کاربری فقط یک تصویر را در صورت ارائه چندین تصویر نشان دهد. با این حال، رابط کاربری ممکن است نشانگر بصری ارائه دهد که تصاویر بیشتری در برنامه وجود دارد.

اگر پست یک ویدیو است، ارائه دهنده باید یک تصویر کوچک از ویدیو ارائه دهد تا به عنوان تصویر نمایش داده شود.

برای راهنمایی به مشخصات تصویر مراجعه کنید.
محتوای متنی اختیاری متن اصلی یک پست، به‌روزرسانی و غیره رشته (حداکثر ۱۴۰ کاراکتر توصیه می‌شود)
محتوای ویدیویی (اختیاری)
مدت زمان مورد نیاز مدت زمان ویدیو بر حسب میلی ثانیه. طولانی
تصویر مورد نیاز پیش‌نمایش تصویر از محتوای ویدیویی. برای راهنمایی به مشخصات تصویر مراجعه کنید.
پیش‌نمایش لینک (اختیاری)
پیش‌نمایش لینک - عنوان مورد نیاز متنی برای نشان دادن عنوان محتوای صفحه وب رشته
پیش‌نمایش لینک - نام میزبان مورد نیاز متنی برای مشخص کردن مالک صفحه وب، مثلاً "INSIDER" رشته
پیش‌نمایش لینک - تصویر اختیاری تصویر قهرمان برای محتوای وب برای راهنمایی به مشخصات تصویر مراجعه کنید.
مهر زمانی اختیاری زمان انتشار پست. مهر زمانی عصر بر حسب میلی ثانیه
فراداده‌های مرتبط با پروفایل (اختیاری)
نام مورد نیاز نام یا شناسه یا شناسه پروفایل، مثلاً "John Doe"، "@TeamPixel." رشته (حداکثر ۲۵ کاراکتر توصیه می‌شود)
متن اضافی اختیاری

می‌تواند به عنوان شناسه یا شناسه پروفایل یا فراداده اضافی استفاده شود

برای مثال «@John-Doe»، «۵ میلیون دنبال‌کننده»، «ممکن است بپسندید»، «پرطرفدار»، «۵ پست جدید»

رشته (حداکثر ۴۰ کاراکتر توصیه می‌شود)
آواتار مورد نیاز

تصویر پروفایل یا تصویر آواتار کاربر.

تصویر مربعی ۱:۱

برای راهنمایی به مشخصات تصویر مراجعه کنید.
تصویر اضافی اختیاری

نشان پروفایل، برای مثال - نشان تأیید شده

تصویر مربعی ۱:۱

برای راهنمایی به مشخصات تصویر مراجعه کنید.
فراداده‌های مرتبط با تعاملات (اختیاری)
تعداد مورد نیاز

تعداد تعاملات را مشخص کنید، مثلاً - "3.7 میلیون".

نکته: شرکا باید از Count یا CountWithOptionalLabel استفاده کنند.

رشته
شمارش با برچسب اختیاری مورد نیاز

تعداد تعاملات را با یک برچسب اختیاری مشخص کنید، برای مثال - "۳.۷ میلیون لایک".

نکته: شرکا باید از Count یا CountWithOptionalLabel استفاده کنند.

رشته
برچسب

اختیاری

اگر ارائه نشده باشد، Visual باید ارائه شود.

مشخص کنید که تعامل برای چیست. برای مثال - "لایک". رشته (حداکثر ۲۰ کاراکتر برای تعداد + برچسب توصیه می‌شود)
بصری

اختیاری

در صورت عدم ارائه، ارائه برچسب الزامی است.

مشخص کنید که این تعامل برای چیست. برای مثال - تصویری که آیکون لایک یا ایموجی را نشان می‌دهد.

می‌تواند بیش از یک تصویر ارائه دهد، هرچند ممکن است همه آنها در همه فرم فاکتورها نمایش داده نشوند.

تصویر مربعی ۱:۱

برای راهنمایی به مشخصات تصویر مراجعه کنید.
DisplayTimeWindow (اختیاری) - یک پنجره زمانی برای نمایش محتوا روی سطح تنظیم کنید
شروع مهر زمانی اختیاری

مهر زمانیِ دوره‌ای که پس از آن محتوا باید روی سطح نمایش داده شود.

اگر تنظیم نشده باشد، محتوا واجد شرایط نمایش روی سطح است.

مهر زمانی عصر بر حسب میلی ثانیه
مهر زمان پایان اختیاری

مهر زمانیِ دوره‌ای که پس از آن محتوا دیگر روی سطح نمایش داده نمی‌شود.

اگر تنظیم نشده باشد، محتوا واجد شرایط نمایش روی سطح است.

مهر زمانی عصر بر حسب میلی ثانیه

مشخصات تصویر

تصاویر باید روی CDN های عمومی میزبانی شوند تا گوگل بتواند به آنها دسترسی داشته باشد.

فرمت‌های فایل

PNG، JPG، GIF ثابت، WebP

حداکثر اندازه فایل

۵۱۲۰ کیلوبایت

توصیه‌های اضافی

  • ناحیه امن تصویر: محتوای مهم خود را در مرکز ۸۰٪ تصویر قرار دهید.
  • از یک پس‌زمینه شفاف استفاده کنید تا تصویر در تنظیمات تم تیره و روشن به درستی نمایش داده شود.

مرحله ۲: ارائه داده‌های خوشه‌ای

توصیه می‌شود که کار انتشار محتوا در پس‌زمینه اجرا شود (برای مثال، با استفاده از 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 مورد نیاز فهرستی از موجودیت‌هایی که توصیه‌های این خوشه توصیه را تشکیل می‌دهند. موجودیت‌های موجود در یک خوشه واحد باید از یک نوع باشند.
عنوان مورد نیاز

عنوان خوشه توصیه (برای مثال، جدیدترین‌ها از دوستانتان ).

اندازه متن پیشنهادی: کمتر از ۲۵ کاراکتر (متن خیلی طولانی ممکن است بیضی نشان دهد)

زیرنویس اختیاری عنوان فرعی برای خوشه توصیه‌ها.
اکشن اوری اختیاری

لینک عمیق به صفحه‌ای در برنامه‌ی همکار که کاربران می‌توانند لیست کامل توصیه‌ها را در آن مشاهده کنند.

توجه: می‌توانید از لینک‌های عمیق برای ارجاع استفاده کنید. به این سوالات متداول مراجعه کنید.

کاتلین

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 برای انتشار یک کارت ورود به سیستم استفاده می‌شود. عمل ورود به سیستم، کاربران را به صفحه ورود به سیستم برنامه هدایت می‌کند تا برنامه بتواند محتوا را منتشر کند (یا محتوای شخصی‌سازی‌شده‌تری ارائه دهد).

فراداده‌های زیر بخشی از کارت ورود به سیستم هستند -

ویژگی مورد نیاز توضیحات
اکشن اوری مورد نیاز پیوند عمیق به اقدام (یعنی به صفحه ورود به برنامه هدایت می‌شود)
تصویر اختیاری - در صورت عدم ارائه، عنوان باید ارائه شود

تصویر نشان داده شده روی کارت

تصاویر با نسبت تصویر ۱۶x۹ و وضوح تصویر ۱۲۶۴x۷۱۲

عنوان اختیاری - در صورت عدم ارائه، تصویر باید ارائه شود عنوان روی کارت
متن اکشن اختیاری متن نمایش داده شده در فراخوان عمل (مثلاً ورود)
زیرنویس اختیاری زیرنویس اختیاری روی کارت

کاتلین

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 مربوط به updatePublishStatus به‌روزرسانی کنید. این مهم است زیرا:

  • ارائه وضعیت در همه سناریوها، حتی زمانی که محتوا منتشر شده است (وضعیت == منتشر شده)، برای پر کردن داشبوردهایی که از این وضعیت صریح برای انتقال سلامت و سایر معیارهای ادغام شما استفاده می‌کنند، بسیار مهم است.
  • اگر هیچ محتوایی منتشر نشده باشد اما وضعیت ادغام خراب نباشد (STATUS == NOT_PUBLISHED)، گوگل می‌تواند از نمایش هشدارها در داشبوردهای سلامت برنامه جلوگیری کند. این تأیید می‌کند که محتوا به دلیل وضعیت مورد انتظار از دیدگاه ارائه‌دهنده منتشر نشده است.
  • این به توسعه‌دهندگان کمک می‌کند تا بینشی در مورد زمان انتشار داده‌ها در مقابل عدم انتشار آنها ارائه دهند.
  • گوگل ممکن است از کدهای وضعیت برای ترغیب کاربر به انجام اقدامات خاصی در برنامه استفاده کند تا بتواند محتوای برنامه را ببیند یا از آن عبور کند.

لیست کدهای وضعیت انتشار واجد شرایط عبارتند از:

// 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

اگر محتوا به دلیل عدم ورود کاربر منتشر نشود، گوگل انتشار کارت ورود به سیستم را توصیه می‌کند. اگر به هر دلیلی ارائه دهندگان خدمات قادر به انتشار کارت ورود به سیستم نیستند، توصیه می‌کنیم API مربوط به updatePublishStatus را با کد وضعیت NOT_PUBLISHED_REQUIRES_SIGN_IN فراخوانی کنید.

کاتلین

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

این API برای حذف محتوای کلاستر UserAccountManagement استفاده می‌شود.

کاتلین

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

وقتی سرویس درخواست را دریافت می‌کند، داده‌های موجود را از تمام خوشه‌هایی که با انواع خوشه‌های مشخص‌شده مطابقت دارند، حذف می‌کند. کلاینت‌ها می‌توانند یک یا چند نوع خوشه را ارسال کنند. در صورت بروز خطا، کل درخواست رد می‌شود و وضعیت موجود حفظ می‌شود.

مدیریت خطا

اکیداً توصیه می‌شود که به نتیجه‌ی وظیفه از 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 اجرای وظیفه به دلیل مشکلات نخ‌بندی (threading) با شکست مواجه شد. در این صورت، می‌توان آن را دوباره امتحان کرد.
4 SERVICE_CALL_PERMISSION_DENIED تماس گیرنده مجاز به برقراری تماس خدماتی نیست.
5 SERVICE_CALL_INVALID_ARGUMENT درخواست شامل داده‌های نامعتبر است (برای مثال، بیش از تعداد مجاز خوشه‌ها).
6 SERVICE_CALL_INTERNAL در سمت سرویس خطایی رخ داده است.
7 SERVICE_CALL_RESOURCE_EXHAUSTED تماس با سرویس خیلی زیاد انجام می‌شود.

مرحله ۳: مدیریت اهداف پخش

علاوه بر فراخوانی‌های API مربوط به انتشار محتوا از طریق یک job، لازم است یک BroadcastReceiver نیز برای دریافت درخواست انتشار محتوا راه‌اندازی شود.

هدف از اعلان‌های هدف عمدتاً فعال‌سازی مجدد برنامه و همگام‌سازی اجباری داده‌ها است. اعلان‌های هدف برای ارسال مکرر طراحی نشده‌اند. این اعلان‌ها فقط زمانی فعال می‌شوند که سرویس Engage تشخیص دهد محتوا ممکن است قدیمی باشد (مثلاً یک هفته قدیمی). به این ترتیب، حتی اگر برنامه برای مدت طولانی اجرا نشده باشد، اطمینان بیشتری وجود دارد که کاربر می‌تواند تجربه محتوای جدیدی داشته باشد.

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);
}
  • یک پیاده‌سازی را به صورت ایستا با تگ <receiver> در فایل AndroidManifest.xml خود تعریف کنید. این به برنامه اجازه می‌دهد تا در زمانی که در حال اجرا نیست، اهداف پخش (broadcast intents) را دریافت کند و همچنین به برنامه اجازه می‌دهد تا محتوا را منتشر کند.

<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 توصیه می‌شود هنگام دریافت این intent، یک فراخوانی publishRecommendationClusters آغاز شود.

گردش کار یکپارچه‌سازی

برای راهنمای گام به گام تأیید ادغام پس از تکمیل، به گردش کار ادغام توسعه‌دهنده مراجعه کنید.

سوالات متداول

برای سوالات متداول به بخش سوالات متداول Engage SDK مراجعه کنید.

تماس

در صورت وجود هرگونه سوال در طول فرآیند ادغام، engage-developers@google.com تماس بگیرید. تیم ما در اسرع وقت پاسخ خواهد داد.

مراحل بعدی

پس از تکمیل این ادغام، مراحل بعدی به شرح زیر است:

  • یک ایمیل به engage-developers@google.com ارسال کنید و APK یکپارچه خود را که آماده آزمایش توسط گوگل است، پیوست کنید.
  • گوگل یک بررسی داخلی انجام می‌دهد تا مطمئن شود که ادغام طبق انتظار کار می‌کند. در صورت نیاز به تغییرات، گوگل با شما تماس می‌گیرد و جزئیات لازم را ارائه می‌دهد.
  • وقتی آزمایش کامل شد و نیازی به تغییر نبود، گوگل با شما تماس می‌گیرد تا به شما اطلاع دهد که می‌توانید APK به‌روزرسانی‌شده و یکپارچه‌شده را در فروشگاه Play منتشر کنید.
  • پس از اینکه گوگل تأیید کرد که APK به‌روزرسانی‌شده شما در فروشگاه Play منتشر شده است، خوشه‌های توصیه شما منتشر شده و برای کاربران قابل مشاهده خواهند بود.