إرشادات نشر مجموعة حِزم تطوير البرامج (SDK) للتفاعل

يتضمّن هذا الدليل مجموعة من الإرشادات المتعلّقة بالنشر الجماعي التي ينشرها المطوّرون. التي يمكنك استخدامها عند الدمج مع حزمة تطوير البرامج (SDK) لـ Engage

مجموعات الاقتراحات

عنوان المجموعة

ننصح بتوفير عنوان مجموعة فريد وذي صلة يمنح المستخدمين. على مزيد من المعرفة حول محتوى المجموعة العنقودية.

في ما يلي بعض الأمثلة على العناوين الجيدة للمجموعات القائمة على المحتوى:

  • المجموعات ذات الصلة بالتسوّق
    • Lightning Deals
    • ضرورة شراء المنتجات أسبوعيًا
    • ذات صلة بشراء سمّاعات الأذن Pixel Buds
    • أحذية طويلة الرقبة للنساء
  • مجموعات من الكتب حول الصحة
    • الصحة والعقل النص الأساسي
    • محتوى مقترَح لك في تطبيق Health
    • الأكثر مبيعًا في مجال اللياقة البدنية

محتوى المجموعة

عند نشر مجموعات اقتراحات، على المطوّرين مراعاة ما إذا كان سيتم تسجيل دخول المستخدم إلى تطبيق مطور البرامج.

عندما يكون المستخدم مسجّلاً الدخول

إذا سجَّل المستخدم الدخول إلى تطبيق المطوِّر، نقترح نشره مجموعات المحتوى المخصصة أو من إنشاء المستخدمين. نظرًا لأن التخصيص المحتوى من إنشاء المستخدمين أكثر ملاءمة للمستخدم، وهم أكثر حماسًا انتقل إلى تطبيق مطوّر البرامج من مساحة عرض Google.

  • يمكن نشر اقتراحات مخصّصة.
    • في ما يلي بعض الأمثلة على الاقتراحات المخصّصة:
      • أبرز الاختيارات استنادًا إلى سجلّ المشاهدة الخاص بالمستخدم.
      • الكتب المشابهة للكتب المتوفرة في سجلّ القراءة لدى المستخدم
      • الأغاني للفنانين المفضلين لدى المستخدم.
  • يمكن نشر مكتبات المحتوى من إنشاء المستخدمين.
    • في ما يلي بعض الأمثلة على مكتبات المحتوى من إنشاء المستخدمين:
      • قائمة مشاهدة المستخدم من تطبيق المطوِّر
      • قائمة أبلغت عنها بنفسك من المطوّر تضم الفنّانين المفضّلين لدى المستخدم التطبيق.
نوع الاقتراح استراتيجية حداثة المحتوى الإرشادات المتعلقة بحداثة المحتوى
التوصيات المخصصة

محدودة

نوصي بتعديل الاقتراحات مرة واحدة في اليوم يمكن للمستخدمين الاطّلاع على الاقتراحات الجديدة يوميًا.

ولأن المستخدمين لا يتوقعون بدقة ما المحتوى المقترح، يمكن وضع استراتيجية حداثة المحتوى متساهلًا.
مكتبات المحتوى من إنشاء المستخدمين

متشدّد

ننصح بتحديث مكتبة المحتوى عند خروج المستخدمين من مطور البرامج.

من المهم أن يكون هذا المحتوى متزامنًا مع البيانات المعروضة على منصات Google ويرجع ذلك إلى أنّه على عكس الاقتراحات المخصّصة ويتوقع المستخدم مجموعة دقيقة من المحتوى. أي تأخير كبير في النشر إرباك المستخدمين. وبالتالي، يجب اتّباع استراتيجية "حداثة المحتوى" أن تكون صارمة.

في حال عدم تسجيل المستخدم الدخول

إذا لم يسجّل المستخدم الدخول إلى تطبيق المطوّر، نقترح نشر التطبيق. بحيث يتم تشجيع المستخدمين على زيارة تطبيق المطوّرين من خلال السطح.

  • يجب نشر مجموعات الاقتراحات غير المخصّصة.
    • في ما يلي بعض الأمثلة على الاقتراحات غير المخصّصة:
      • أفضل 10 كتب تمت قراءتها هذا العام
      • الأفلام الصادرة حديثًا
      • برامج البودكاست الرائجة
  • انشر بطاقة تسجيل الدخول.
    • لتشجيع المستخدمين على تسجيل الدخول إلى تطبيق المطوِّر، يحتاج المطوّرون نشر بطاقة تسجيل الدخول مع مجموعة التوصيات. يمكنك الاطّلاع على القسم أدناه للحصول على مزيد من التفاصيل حول كيفية نشر بطاقة تسجيل الدخول
نوع الاقتراح استراتيجية حداثة المحتوى الإرشادات المتعلقة بحداثة المحتوى
اقتراحات غير مخصّصة

محدودة

نوصي بتحديث التوصيات مرة واحدة في .

ولأن المستخدمين لا يتوقعون بدقة ما المحتوى المقترح، يمكن وضع استراتيجية حداثة المحتوى متساهلًا.
بطاقة تسجيل الدخول في الاقتراحات

متشدّد

ننصح بتعديل حالة بطاقة تسجيل الدخول عند خروج المستخدمين من الحساب. تطبيق المطور.

بعد أن يسجّل المستخدمون الدخول، على المطوّرين حذف البطاقة من خلال الاتصال واجهة برمجة تطبيقات deleteUserManagementCluster().

من المهم أن تكون حالة تسجيل الدخول متزامنة مع حساب Google. السطح. ويتسبّب ظهور بطاقة تسجيل الدخول على حساب Google للمستخدمين في تظهر إذا سبق لهم تسجيل الدخول. وبالتالي، فإن حداثة المحتوى الإستراتيجية يجب أن تكون صارمة.

مجموعات المتابعة

عند نشر مجموعات المتابعة، على المطوّرين مراعاة ما إذا كان سيتم تسجيل دخول المستخدم إلى تطبيق مطور البرامج.

عندما يكون المستخدم مسجّلاً الدخول

  • يجب نشر مجموعات المتابعة التي ينشئها المستخدمون.
    • في ما يلي بعض الأمثلة على مجموعات المتابعة التي أنشأها المستخدم:
      • مواصلة المشاهدة من حيث توقّف المستخدم
      • مواصلة القراءة من حيث توقّف المستخدم
نوع المتابعة استراتيجية حداثة المحتوى الإرشادات المتعلقة بحداثة المحتوى
مجموعات المتابعة التي أنشأها المستخدمون

متشدّد

ننصح بتحديث مكتبة المحتوى عند خروج المستخدمين من مطور البرامج.

من المهم أن يكون هذا المحتوى متزامنًا مع البيانات المعروضة على مساحات العرض في Google ويرجع ذلك إلى أنّه على عكس الاقتراحات المخصّصة ويتوقع المستخدم مجموعة دقيقة من المحتوى. أي تأخير كبير في النشر إرباك المستخدمين. وبالتالي، يجب اتّباع استراتيجية "حداثة المحتوى" أن تكون صارمة.

في حال عدم تسجيل المستخدم الدخول

رحلات المتابعة مصمّمة في المقام الأول للمستخدمين الذين سجّلوا الدخول وَلَكِنْ يمكنك أيضًا نشر مجموعات المتابعة للمستخدمين الذين سجّلوا الخروج إذا كان تطبيقك يتيح جلسات الضيف

مجموعة إدارة المستخدمين

الهدف الرئيسي من "مجموعة إدارة المستخدمين" هو تشجيع المستخدمين على تنفيذ إجراءات الإجراءات على تطبيق المزود. يوجّه إجراء تسجيل الدخول المستخدمين إلى علامة التطبيق. لكي يتمكن التطبيق من نشر المحتوى (أو توفير معلومات المحتوى)

بطاقة تسجيل الدخول

السمة المتطلب الوصف
معرّف الموارد المنتظم (URI) الحركة مطلوب رابط لصفحة في التطبيق (أي الانتقال إلى صفحة تسجيل الدخول إلى التطبيق)
صورة اختياري - يجب توفير العنوان في حال عدم تقديمه

الصورة المعروضة على البطاقة

صور بنسبة عرض إلى ارتفاع تبلغ 16×9 بدقة 1264×712

العنوان اختياري - يجب تقديم الصورة إذا لم يتم توفيرها العنوان على البطاقة
نص الإجراء اختياري النص المعروض في عبارة الحث على اتخاذ إجراء (أي تسجيل الدخول)
العنوان الفرعي اختياري عنوان فرعي اختياري على البطاقة

Kotlin


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

appEngagePublishClient.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Java


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

appEngagePublishClient.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

بعد أن يسجّل المستخدمون الدخول، على المطوّرين حذف البطاقة من خلال الاتصال واجهة برمجة تطبيقات deleteUserManagementCluster().

تعديل حالة النشر

إذا لم يتم نشر أي من المجموعات لأي سبب داخلي لنشاطك التجاري، ننصحك بشدة بتعديل حالة النشر باستخدام updatePublishStatus في واجهة برمجة التطبيقات. وهذا أمر مهم للأسباب التالية :

  • توفير حالة المحتوى في جميع الحالات، حتى عند نشر المحتوى (الحالة == تم النشر)، أمر بالغ الأهمية لتعبئة لوحات البيانات التي تستخدم هذه والحالة الصريحة لتوضيح حالة الدمج والمقاييس الأخرى.
  • إذا لم يتم نشر أي محتوى ولكن لم تكن حالة الدمج معطّلة (STATUS == NOT_HOSTED)، يمكن أن تتجنب Google تشغيل التنبيهات في التطبيق ولوحات معلومات الصحة. وهي تؤكّد عدم نشر المحتوى بسبب المتوقع من وجهة نظر مقدّم الخدمة.
  • تساعد المطوّرين على تقديم إحصاءات حول وقت نشر البيانات مقارنةً بعدم نشرها.
  • يجوز أن تستخدم 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

إذا لم يتم نشر المحتوى لأنّ المستخدم لم يسجّل الدخول، ننصحك بنشر بطاقة تسجيل الدخول في حال تعذّر على مقدّمي الخدمات نشر "بطاقة تسجيل الدخول" لأي سبب من الأسباب ننصحك باستدعاء واجهة برمجة التطبيقات updatePublishStatus برمز الحالة NOT_MANAGEED_REQUIRES_SIGN_IN

Kotlin


client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Java


client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

WorkManager لنشر المجموعات

ننصحك باستخدام WorkManager من أجل نشر المجموعات، لأنها الحل الموصى به للعمل في الخلفية حيث يجب أن يكون التنفيذ انتهازيًا ومضمونًا في الوقت نفسه.

  • يؤدي WorkManager عملك في الخلفية في أسرع وقت ممكن.
  • يتعامل WorkManager مع المنطق لبدء عملك ضمن مجموعة متنوعة من الحالات، حتى في حال انتقال أحد المستخدمين بعيدًا عن تطبيقك.

عندما ينتقل المستخدم بعيدًا عن التطبيق، ننصحك ببدء تشغيل الخلفية. الوظيفة التي تنشر مجموعات المتابعة إلى جانب مجموعات التوصيات. حاسمة هناك مكان جيد للتعامل مع هذا المنطق Activity.onStop()، وهو ما يسمى عند انتقال المستخدم بعيدًا عن التطبيق.

نقترح استخدام PeriodicWorkRequest لجدولة مهمة متكررة تنشر المجموعات كل 24 ساعة. باستخدام CANCEL_AND_REENQUEUE لتشغيل العمل، يمكن للمطورين التأكد من إرسال WorkManager البيانات المحدثة في كل مرة ينتقل فيها المستخدم بعيدًا عن التطبيق. ويساعد هذا في منع المستخدمين من مشاهدة البيانات القديمة.

ويوضح المثال التالي هذا:

// Define the PublishClusters Worker requiring input
public class PublishClusters extends Worker {

   public PublishClusters(Context appContext, WorkerParameters workerParams) {
       super(appContext, workerParams);
   }

   @NonNull
   @Override
   public Result doWork() {
       // publish clusters
   }
   ...
}

public static void schedulePublishClusters(Context appContext) {
// Create a PeriodicWorkRequest to schedule a recurring job to update
// clusters at a regular interval
PeriodicWorkRequest publishClustersEntertainmentSpace =
// Define the time for the periodic job
       new PeriodicWorkRequest.Builder(PublishClusters.class, 24, TimeUnit.HOURS)
// Set up a tag for the worker.
// Tags are Unique identifier, which can be used to identify that work
// later in order to cancel the work or observe its progress.
          .addTag("Publish Clusters to Entertainment Space")
          .build();

// Trigger Periodic Job, this will ensure that the periodic job is triggered
// only once since we have defined a uniqueWorkName
WorkManager.getInstance(appContext).enqueueUniquePeriodicWork(
// uniqueWorkName
     "publishClustersEntertainmentSpace",
// If a work with the uniqueWorkName is already running, it will cancel the
// existing running jobs and replace it with the new instance.
// ExistingPeriodicWorkPolicy#CANCEL_AND_REENQUEUE
     ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE,
// Recurring Work Request
publishClustersEntertainmentSpace);

}

التعامل مع أهداف البث

وبالإضافة إلى إجراء طلبات البيانات من واجهة برمجة التطبيقات للمحتوى المنشور من خلال إحدى المهام، يتم أيضًا مطلوبة لإعداد BroadcastReceiver لاستلام الإشعارات طلب نشر المحتوى.

مع ذلك، يجب أن يحرص المطوّرون على عدم الاعتماد على عمليات البث فقط، لأنّه يتم تشغيلها فقط في سيناريوهات معيّنة، أساسًا في التطبيقات إعادة التفعيل وفرض مزامنة البيانات. لا يتم تشغيلها إلا عندما يكون التفاعل تحدِّد الخدمة أنّ المحتوى قد يكون قديمًا. بهذه الطريقة، يكون هناك أكبر من تقديم تجربة جديدة للمستخدم، حتى التطبيق لم يتم فتحه منذ فترة طويلة.

يجب إعداد جهاز BroadcastReceiver بالطريقتَين التاليتَين:

  • التسجيل ديناميكيًا لمثيل فئة BroadcastReceiver باستخدام Context.registerReceiver() ويتيح ذلك التواصل من خلال التطبيقات. التي لا تزال حية في الذاكرة.
  • الإعلان بشكل ثابت عن عملية تنفيذ باستخدام العلامة <receiver> في ملف AndroidManifest.xml. يتيح هذا الإجراء للتطبيق تلقّي البث. عندما لا يكون قيد التشغيل، ويسمح أيضًا للتطبيق بالنشر المحتوى.