تنشئ Google سطحًا على الجهاز ينظم بيانات المستخدمين التطبيقات حسب المجالات وتوفّر تجربة غامرة جديدة لاستهلاك ��حتوى التطبيق المخصَّص والاكتشاف. توفّر تجربة وضع ملء الشاشة هذه للشركاء من المطوّرين فرصة لعرض أفضل المحتوى الوافي في قناة مخصصة خارج تطبيقها.
يتضمّن هذا المستند تعليمات للشركاء من المطوّرين حول كيفية دمج للمحتوى الاجتماعي باستخدام حزمة Engage SDK لتعبئة هذه المساحة الجديدة.
تفاصيل عملية الدمج
يعرض القسم التالي تفاصيل عملية الدمج.
المصطلحات
تعرض مجموعات الاقتراحات اقتراحات مخصّصة من فرد. شريك المطوّرين.
تأخذ توصياتك البنية التالية:
مجموعة الاقتراحات: عرض واجهة مستخدم يحتوي على مجموعة من الاقتراحات من نفس الشريك المطور.
تتألف كل مجموعة توصيات من أحد النوعين التاليين من :
- كيان الوسائط العمودية
- كيان SocialPostEntity
يجب أن يحتوي PortraitMediaEntity على صورة عمودية واحدة للمشاركة. الملف الشخصي إنّ البيانات الوصفية المتعلقة بالتفاعل اختيارية.
مشاركة
- صورة في الوضع العمودي والطابع الزمني
- الصورة في الوضع العمودي + محتوى النص والطابع الزمني
الملف الشخصي
- صورة رمزية، الاسم أو الاسم المعرِّف، صورة إضافية
التفاعل
- العدّ والتصنيف فقط
- العدد والعناصر المرئية (رمز)
تحتوي SocialPostEntity على بيانات وصفية مرتبطة بالملفات الشخصية والمشاركات والتفاعلات.
الملف الشخصي
- صورة رمزية أو اسم أو اسم معرِّف، نص إضافي، صورة إضافية
مشاركة
- النص والطابع الزمني
- الوسائط المتعددة التفاعلية (الصورة أو عنوان URL الغني) والطابع الزمني
- النصوص والوسائط التفاعلية المتقدّمة (صورة أو عنوان URL منسّق) والطابع الزمني
- معاينة الفيديو (الصورة المصغّرة والمدة) والطابع الزمني
التفاعلات
- العدّ تصنيف فقط، أو
- العدّ مرئي (رمز)
المرحلة التمهيدية
الحد الأدنى لمستوى واجهة برمجة التطبيقات: 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 يدعم الكيانات التالية للفئة الاجتماعية:
PortraitMediaEntity
SocialPostEntity
توضّح الرسوم البيانية أدناه السمات والمتطلبات المتاحة لكل نوع.
PortraitMediaEntity
السمة | المتطلب | الوصف | التنسيق |
---|---|---|---|
معرف الموارد المنتظم (URI) للإجراء | مطلوب |
رابط لصفحة في التطبيق يؤدي إلى الكيان في تطبيق الموفّر ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
URI |
البيانات الوصفية ذات الصلة بالمشاركة (مطلوبة) | |||
صورة (صور) | مطلوب |
يجب أن تكون الصور بنسبة العرض إلى الارتفاع العمودية. قد تعرض واجهة المستخدم صورة واحدة فقط عند توفير صور متعددة. ومع ذلك، قد توفر واجهة المستخدم مؤشرًا مرئيًا يشير إلى وجود المزيد من الصور في التطبيق. إذا كانت المشاركة فيديو، على مقدّم الخدمة توفير صورة مصغّرة الفيديو الجديد كصورة |
راجِع مواصف��ت الصور للحصول على إرشادات. |
محتوى النص | اختياري | تمثّل هذه السمة النص الأساسي للمنشور أو آخر المعلومات أو غير ذلك. | سلسلة (يُنصح بأن يكون الحد الأقصى 140 حرفًا) |
الطابع الزمني | اختياري | يشير إلى الوقت الذي تم فيه نشر المشاركة. | الطابع الزمني للحقبة بالمللي ثانية |
عبارة عن محتوى فيديو | اختياري | هل المشاركة عبارة عن فيديو؟ | منطقية |
مدة الفيديو | اختياري | مدة الفيديو بالمللي ثانية. | الصيغة الطويلة |
البيانات الوصفية ذات الصلة بالملف الشخصي (اختيارية) | |||
الاسم | مطلوب | اسم الملف الشخصي أو رقم تعريفه أو اسم معرِّفه، مثل "سامح رضا" أو " @TeamPixel" | سلسلة(يُنصح بأن يكون الحد الأقصى 25 حرفًا) |
الصورة الرمزية | مطلوب |
صورة الملف الشخصي أو الصورة الرمزية للمستخدم صورة مربّعة 1:1 |
راجِع مواصفات الصور للحصول على إرشادات. |
صورة إضافية | اختياري |
شارة الملف الشخصي على سبيل المثال، شارة التحقق صورة مربّعة 1:1 |
راجِع مواصفات الصور للحصول على إرشادات. |
البيانات الوصفية ذات الصلة بالتفاعلات (اختيارية) | |||
العدد | اختياري |
تشير إلى عدد التفاعلات، على سبيل المثال - "3.7 مليون". ملاحظة: في حال توفير كلّ من قيمة العدّ وقيمة العدد، سيتم استخدام العدد. |
سلسلة حجم النص المقترَح: 20 حرفًا كحدٍ أقصى للعدد + التصنيف مجتمعة |
قيمة العدد | اختياري | عدد التفاعلات كقيمة. ملاحظة: أدخِل قيمة العدد بدلاً من العدد. إذا كان تطبيقك لا يتعامل مع المنطق الذي قد يستند إليه عدد كبير من يجب تحسينها للتوافق مع أحجام العرض المختلفة. إذا كان كلاهما مهمًا ويتم توفير "Count Value" (قيمة العدد)، ويتم استخدام "Count" (العدد). |
الصيغة الطويلة |
التصنيف | اختياري | حدد الغرض من تصنيف التفاعل. على سبيل المثال، "المعجبون". | سلسلة حجم النص المقترَح: 20 حرفًا كحدٍ أقصى للعدد + التصنيف مجتمعة |
مرئي | اختياري |
حدد الغرض من التفاعل. على سبيل المثال، تعرض صورة رمز الإعجابات والرموز التعبيرية يمكن تقديم أكثر من صورة واحدة، ولكن قد لا تظهر كلها على بعض الصور من أشكال الأجهزة. ملاحظة: يجب أن تكون صورة مربّعة 1:1 |
راجِع مواصفات الصور للحصول على إرشادات. |
DisplayTimeWindow (اختياري) - تحديد فترة زمنية لعرض المحتوى في نتائج البحث | |||
الطابع الزمني للبدء | اختياري |
الطابع الزمني للحقبة الذي يجب أن يظهر المحتوى بعده على السطح. وإذا لم يتم ضبط السياسة، سيكون المحتوى مؤهلاً للظهور ��لى مساحات العرض. |
الطابع الزمني للحقبة بالمللي ثانية |
الطابع الزمني للانتهاء | اختياري |
الطابع الزمني للحقبة الذي لن يظهر المحتوى بعده السطح. وإذا لم يتم ضبط السياسة، سيكون المحتوى مؤهلاً للظهور على مساحات العرض. |
الطابع الزمني للحقبة بالمللي ثانية |
SocialPostEntity
السمة | المتطلب | الوصف | التنسيق |
---|---|---|---|
معرف الموارد المنتظم (URI) للإجراء | مطلوب |
رابط لصفحة في التطبيق يؤدي إلى الكيان في تطبيق الموفّر ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
URI |
البيانات الوصفية ذات الصلة بالمشاركة (مطلوبة) يجب توفير نوع واحد على الأقل من TextContent أو Image أو WebContent |
|||
صورة (صور) | اختياري |
يجب أن تكون الصور بنسبة العرض إلى الارتفاع العمودية. قد تعرض واجهة المستخدم صورة واحدة فقط عند توفير صور متعددة. ومع ذلك، قد توفر واجهة المستخدم مؤشرًا مرئيًا يشير إلى وجود المزيد من الصور في التطبيق. إذا كانت المشاركة فيديو، على مقدّم الخدمة توفير صورة مصغّرة الفيديو الجديد كصورة |
راجِع مواصفات الصور للحصول على إرشادات. |
محتوى النص | اختياري | تمثّل هذه السمة النص الأساسي للمنشور أو آخر المعلومات أو غير ذلك. | سلسلة (يُنصح بأن يكون الحد الأقصى 140 حرفًا) |
محتوى الفيديو (اختياري) | |||
المدة | مطلوب | مدة الفيديو بالمللي ثانية. | الصيغة الطويلة |
صورة | مطلوب | صورة معاينة محتوى الفيديو | راجِع مواصفات الصور للحصول على إرشادات. |
معاينة الرابط (اختياري) | |||
معاينة الرابط - العنوان | مطلوب | نص للإشارة إلى عنوان محتوى صفحة الويب | سلسلة |
معاينة الرابط - اسم المضيف | مطلوب | نص للإشارة إلى مالك صفحة الويب، مثلاً "INSIDER" | سلسلة |
معاينة الرابط - صورة | اختياري | صورة رئيسية لمحتوى الويب | راجِع مواصفات الصور للحصول على إرشادات. |
الطابع الزمني | اختياري | يشير إلى الوقت الذي تم فيه نشر المشاركة. | الطابع الزمني للحقبة بالمللي ثانية |
البيانات الوصفية ذات الصلة بالملف الشخصي (اختيارية) | |||
الاسم | مطلوب | اسم الملف الشخصي أو رقم تعريفه أو اسمه المعرِّف، مثل "سامح رضا" أو " @TeamPixel" | سلسلة(يُنصح بأن يكون الحد الأقصى 25 حرفًا) |
نص إضافي | اختياري |
يمكن استخدامها كمعرّف أو اسم معرِّف للملف الشخصي أو بيانات وصفية إضافية على سبيل المثال " @John-Doe" أو "5 مليون متابع" أو "قد يعجبك" أو "رائج" "5 مشاركات جديدة" |
سلسلة(يُنصح بأن يكون 40 حرفًا كحدّ أقصى) |
الصورة الرمزية | مطلوب |
صورة الملف الشخصي أو الصورة الرمزية للمستخدم صورة مربّعة 1:1 |
راجِع مواصفات الصور للحصول على إرشادات. |
صورة إضافية | اختياري |
شارة إثبات الملف الشخصي، على سبيل المثال: شارة إثبات القناة صورة مربّعة 1:1 |
راجِع مواصفات الصور للحصول على إرشادات. |
البيانات الوصفية ذات الصلة بالتفاعلات (اختيارية) | |||
العدد | مطلوب | وضّح عدد التفاعلات، على سبيل المثال - "3.7 مليون". | سلسلة (يُنصح باستخدام 20 حرفًا كحدّ أقصى للعدد والتصنيف معًا) |
التصنيف |
اختياري وإذا لم يتم توفير هذه السمة، يجب تقديم القيمة مرئية. |
حدد الغرض من التفاعل. على سبيل المثال - "المعجبون". | سلسلة (يُنصح باستخدام 20 حرفًا كحدّ أقصى للعدد والتصنيف معًا) |
مرئي |
اختياري وإذا لم يتم تقديم التصنيف، يجب توفيره. |
حدد الغرض من التفاعل. على سبيل المثال، صورة تعرض رمز الإعجابات والرموز التعبيرية. يمكن تقديم أكثر من صورة واحدة، ولكن قد لا تظهر كلها على بعض الصور من أشكال الأجهزة. صورة مربّعة 1:1 |
راجِع مواصفات الصور للحصول على إرشادات. |
DisplayTimeWindow (اختياري) - تحديد فترة زمنية لعرض المحتوى في نتائج البحث | |||
الطابع الزمني للبدء | اختياري |
الطابع الزمني للحقبة الذي يجب أن يظهر المحتوى بعده على السطح. وإذا لم يتم ضبط السياسة، سيكون المحتوى مؤهلاً للظهور على مساحات العرض. |
الطابع الزمني للحقبة بالمللي ثانية |
الطابع الزمني للانتهاء | اختياري |
الطابع الزمني للحقبة الذي لن يظهر المحتوى بعده السطح. وإذا لم يتم ضبط السياسة، سيكون المحتوى مؤهلاً للظهور على مساحات العرض. |
الطابع الزمني للحقبة بالمللي ثانية |
مواصفات الصور
يجب استضافة الصور على شبكات توصيل محتوى (CDN) عامة حتى تتمكّن Google من الوصول إليها. معهم.
تنسيقات الملفات
PNG أو JPG أو GIF ثابت أو WebP
الحد الأقصى لحجم الملف
5120 كيلوبايت
اقتراحات إضافية
- المنطقة الآمنة للصور: ضَع المحتوى المهم في الوسط بحيث يشغل% 80 من .
- استخدام خلفية شفافة بحيث يمكن عرض الصورة بشكل صحيح في إعد��دات المظهرَين الداكن والفاتح
الخطوة 2: تقديم بيانات المجموعة
ننصحك بتنفيذ مهمة نشر المحتوى في الخلفية. (على سبيل المثال، استخدام WorkManager) وجدولتها بشكل منتظم أو على أساس حدث (على سبيل المثال، في كل مرة يفتح المستخدم التطبيق أو عندما يتبع المستخدم حسابًا جديدًا)
AppEngageSocialClient
مسؤول عن نشر المجموعات الاجتماعية.
تتوفّر واجهات برمجة التطبيقات التالية لنشر المجموعات في الجهاز العميل:
isServiceAvailable
publishRecommendationClusters
publishUserAccountManagementRequest
updatePublishStatus
deleteRecommendationsClusters
deleteUserManagementCluster
deleteClusters
isServiceAvailable
تُستخدم واجهة برمجة التطبيقات هذه للتحقق مما إذا كانت الخدمة متاحة للدمج ما إذا كان من الممكن عرض المحتوى على الجهاز أم لا.
Kotlin
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. } }
Java
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 | مطلوب | قائمة بالكيانات التي تشكّل الاقتراحات لهذا الغرض مجموعة الاقتراحات. يجب أن تكون الكيانات الموجودة في المجموعة العنقودية الواحدة متماثلة الكتابة. |
العنوان | مطلوب | عنوان مجموعة الاقتراحات (على سبيل المثال، الأحدث من أصدقائك). حجم النص الموصى به: أقل من 25 حرفًا (النص الذي يكون طويلة جدًا قد تظهر علامات حذف) |
العنوان الفرعي | اختياري | العنوان الفرعي لمجموعة الاقتراحات. |
معرّف الموارد المنتظم (URI) الحركة | اختياري |
الرابط لصفحة في تطبيق الشريك حيث يمكن للمستخدمين الاطّلاع على قائمة كاملة بالتوصيات. ملاحظة: يمكنك استخدام الروابط لصفحات معيّنة في عملية تحديد المصدر. يُرجى مراجعة هذه الأسئلة الشائعة. |
Kotlin
client.publishRecommendationClusters( PublishRecommendationClustersRequest.Builder() .addRecommendationCluster( RecommendationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .setTitle("Latest from your friends") .build()) .build())
Java
client.publishRecommendationClusters( new PublishRecommendationClustersRequest.Builder() .addRecommendationCluster( new RecommendationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .setTitle("Latest from your friends") .build()) .build());
عندما تتلقى الخدمة الطلب، يتم تنفيذ الإجراءات التالية خلال معاملة واحدة:
- تتم إزالة جميع بيانات مجموعة الاقتراحات الحالية.
- يتم تحليل البيانات الواردة ��ن الطلب وتخزينها في مجموعات الاقتراحات الجديدة.
في حالة حدوث خطأ، يتم رفض الطلب بأكمله وتكون الحالة الحالية هي وصيانته.
publishUserAccountManagementRequest
تُستخدم واجهة برمجة التطبيقات هذه لنشر بطاقة تسجيل الدخول . يوجه إجراء تسجيل الدخول المستخدمين إلى صفحة تسجيل الدخول إلى التطبيق حتى يتمكن التطبيق من نشر المحتوى (أو تقديم المزيد من محتوى مخصّص)
البيانات الوصفية التالية هي جزء من بطاقة تسجيل الدخول:
السمة | المتطلب | الوصف |
---|---|---|
معرّف الموارد المنتظم (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() client.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(); client.publishUserAccountManagementRequest( new PublishUserAccountManagementRequest.Builder() .setSignInCardEntity(SIGN_IN_CARD_ENTITY) .build());
عندما تتلقى الخدمة الطلب، يتم تنفيذ الإجراءات التالية خلال معاملة واحدة:
- بيانات
UserAccountManagementCluster
الحالية من الشريك ال��ط��ّر هي تمت إزالته. - يتم تحليل البيانات الواردة من الطلب وتخزينها في ملف المجموعة UserAccountManagementCluster.
في حالة حدوث خطأ، يتم رفض الطلب بأكمله وتكون الحالة الحالية هي وصيانته.
updatePublishStatus
إذا لم يتم نشر أي من المجموعات لأي سبب داخلي لنشاطك التجاري، ننصحك بشدة بتعديل حالة النشر باستخدام 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
إذا لم يتم نشر المحتوى لأنّ المستخدم لم يسجّل الدخول، تنصح Google بنشر بطاقة تسجيل الدخول. في حال تعذّر على مقدّمي الخدمات نشر "بطاقة تسجيل الدخول" لأي سبب من الأسباب ننصحك باستدعاء واجهة برمجة التطبيقات 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());
deleteRecommendationClusters
تُستخدَم واجهة برمجة التطبيقات هذه لحذف محتوى مجموعات الاقتراحات.
Kotlin
client.deleteRecommendationClusters()
Java
client.deleteRecommendationClusters();
عندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من مجموعات الاقتراحات: في حال حدوث خطأ، يتم رفض الطلب بأكمله. ويتم الحفاظ على الحالة الحالية.
deleteUserManagementCluster
يتم استخدام واجهة برمجة التطبيقات هذه لحذف محتوى مجموعة UserAccountManagement.
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
عندما تتلقّى الخدمة الطلب، تزيل البيانات الحالية من المجموعة UserAccountManagement. في حالة حدوث خطأ، يتم التعامل مع الطلب بأكمله الرفض والحفاظ على الحالة الحالية.
deleteClusters
تُستخدَم واجهة برمجة التطبيقات هذه لحذف محتوى نوع مجموعة معيّن.
Kotlin
client.deleteClusters( DeleteClustersRequest.Builder() .addClusterType(ClusterType.TYPE_RECOMMENDATION) ... .build())
Java
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
مع تضمين السبب باعتباره
رمز الخطأ.
رمز الخطأ | ملاحظة |
---|---|
SERVICE_NOT_FOUND |
الخدمة غير متوفّرة على الجهاز المحدّد. |
SERVICE_NOT_AVAILABLE |
الخدمة متوفّرة على الجهاز المحدّد، ولكنّها غير متاحة وقت المكالمة (على سبيل المثال، تم إيقافه بشكل صريح). |
SERVICE_CALL_EXECUTION_FAILURE |
تعذّر تنفيذ المهمة بسبب حدوث مشاكل في سلاسل المحادثات. في هذه الحالة، يمكنه إعادة المحاولة. |
SERVICE_CALL_PERMISSION_DENIED |
غير مسموح للمتصل بإجراء اتصال الخدمة. |
SERVICE_CALL_INVALID_ARGUMENT |
يحتوي الطلب على بيانات غير صالحة (على سبيل المثال، تتجاوز القيمة المسموح بها عدد المجموعات العنقودية). |
SERVICE_CALL_INTERNAL |
حدث خطأ من جانب الخدمة. |
SERVICE_CALL_RESOURCE_EXHAUSTED |
يتم إجراء استدعاء الخدمة بشكل متكرر جدًا. |
الخطوة 3: التعامل مع أهداف البث
وبالإضافة إلى إجراء طلبات البيانات من واجهة برمجة التطبيقات للمحتوى المنشور من خلال إحدى المهام، يتم أيضًا
مطلوبة لإعداد
BroadcastReceiver
لاستلام الإشعارات
طلب نشر المحتوى.
إنّ الهدف من أهداف البث هو بشكل أساسي إعادة تفعيل التطبيقات وفرض فرض البيانات. المزامنة. إنّ الأهداف المتعلقة بالبث ليست مصمّمة ليتم إرسالها بشكل متكرّر. إنه فقط يتم تشغيله عندما تحدد خدمة Engage أن المحتوى قد يكون قديمًا (على سبيل المثال منذ أسبوع مثلاً). بهذه الطريقة، تكون هناك ثقة أكبر في أنه يمكن للمستخدم تجربة محتوى جديدة، حتى إذا لم يتم تنفيذ التطبيق لفترة زمنية طويلة.
يجب إعداد جهاز BroadcastReceiver
بالطريقتَين التاليتَين:
- التسجيل ديناميكيًا لمثيل فئة
BroadcastReceiver
باستخدامContext.registerReceiver()
ويتيح ذلك التواصل من خلال التطبيقات. التي لا تزال حية في الذاكرة.
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));
}
- الإعلان بشكل ثابت عن عملية تنفيذ باستخدام العلامة
<receiver>
في ملفAndroidManifest.xml
. يتيح هذا الإجراء للتطبيق تلقّي البث. عندما لا يكون قيد التشغيل، ويسمح أيضًا للتطبيق بالنشر المحتوى.
<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 SDK لمعرفة الأسئلة الشائعة
Contact
معلومات التواصل Engage-developers@google.com إذا كانت هناك لأي أسئلة أثناء عملية الدمج. سيردّ فريقنا عليك في أقرب وقت ممكن. ممكن.
ال��طوات التالية
بعد إكمال عملية الدمج هذه، ستكون خطواتك التالية هي التالية:
- إرسال رسالة إلكترونية إلى engagement-developers@google.com وإرفاق حِزمة APK المدمجة والجاهزة للاختبار من قِبل Google.
- تُجري Google عملية تحقق وتراجع المراجعات داخليًا للتأكد من أنّ والتكامل كما هو متوقع. إذا لزم الأمر، سيتواصل معك فريق Google. بأي تفاصيل ضرورية.
- عند اكتمال الاختبار وعدم الحاجة إلى إجراء أي تغييرات، تتواصل معك Google من أجل يمكنك بدء نشر حزمة APK المعدّلة والمتكاملة على "متجر Play".
- بعد أن تتأكد Google من نشر ملف APK المُعدَّل على سيتم نشر المجموعات والاقتراح في "متجر Play" وستكون مرئية لـ المستخدمين.