Engage SDK Social: คำแนะนำการผสานรวมทางเทคนิคของบุคคลที่สาม

เพิ่มการมีส่วนร่วมในแอปด้วยการเข้าถึงผู้ใช้ในที่ที่ผู้ใช้อยู่ ผสานรวม Engage SDK เพื่อแสดงคำแนะนำที่ปรับเปลี่ยนตามการใช้งานของผู้ใช้และเนื้อหาที่ต่อเนื่องโดยตรงต่อ ผู้ใช้ในแพลตฟอร์มต่างๆ ในอุปกรณ์ เช่น คอลเล็กชัน, Entertainment Space และ Google Play Store การผสานรวมจะเพิ่มขนาด APK โดยเฉลี่ยไม่เกิน 50 KB (บีบอัด) และใช้เวลาของนักพัฒนาแอปประมาณ 1 สัปดาห์สำหรับแอปส่วนใหญ่ ดูข้อมูลเพิ่มเติมได้ที่เว็บไซต์ ธุรกิจ

คู่มือนี้มีวิธีการสำหรับพาร์ทเนอร์นักพัฒนาแอปในการส่งเนื้อหาโซเชียลมีเดียไปยังแพลตฟอร์มเนื้อหา Engage

การรองรับหมวดหมู่และแพลตฟอร์ม

การมีสิทธิ์แสดง Engage SDK จะขึ้นอยู่กับหมวดหมู่เนื้อหาของแอป ใช้ตารางต่อไปนี้เพื่อพิจารณาการมีสิทธิ์ของคุณสำหรับแพลตฟอร์มที่เฉพาะเจาะจง

สถานะ หมวดหมู่เนื้อหาหรือกรณีการใช้งาน พื้นผิวที่รองรับ
รองรับ
(มีสิทธิ์ในทุกแพลตฟอร์ม)
  • โซเชียลเน็ตเวิร์ก
  • รูปภาพ / มีม
  • วิดีโอคลิป / วิดีโอแบบสั้น
  • การพบปะกันในชีวิตจริง
  • พื้นที่เก็บข้อมูลรูปภาพในระบบคลาวด์
  • คอลเล็กชัน
  • แท็บแอปใน Play Store
  • แท็บ "คุณ" ใน Play Store
  • หน้าข้อมูลสินค้าใน Store ของ Play Store
สิ่งที่ทำไม่ได้
  • วิดีโอแชทสด
  • การรับส่งข้อความโต้ตอบแบบทันที การแชร์ตัวตนบนโลกออนไลน์ หรือข้อมูลสด
  • การแชร์ไฟล์และเครื่องมือดาวน์โหลด
  • การเดท
  • เครื่องมือสร้างอวาตาร์

รายละเอียดการผสานรวม

ส่วนต่อไปนี้จะแสดงรายละเอียดการผสานรวม

คำศัพท์

คลัสเตอร์คำแนะนำจะแสดงคำแนะนำที่ปรับเปลี่ยนในแบบของคุณจากพาร์ทเนอร์นักพัฒนาแอปแต่ละราย

คำแนะนำจะมีโครงสร้างดังนี้

คลัสเตอร์คำแนะนำ: มุมมอง UI ที่มีกลุ่มคำแนะนำ จากพาร์ทเนอร์นักพัฒนาแอปรายเดียวกัน

คลัสเตอร์คำแนะนำแต่ละรายการประกอบด้วยเอนทิตี 2 ประเภทต่อไปนี้

  • PortraitMediaEntity
  • SocialPostEntity

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.6.0'
}

สรุป

การออกแบบนี้อิงตามการใช้งานบริการ ที่เชื่อมโยง

ข้อมูลที่ไคลเอ็นต์เผยแพร่ได้จะขึ้นอยู่กับขีดจํากัดต่อไปนี้สําหรับคลัสเตอร์ประเภทต่างๆ

ประเภทคลัสเตอร์ ขีดจำกัดของคลัสเตอร์ ขีดจำกัดของเอนทิตีขั้นต่ำในคลัสเตอร์ ขีดจำกัดสูงสุดของเอนทิตีในคลัสเตอร์
คลัสเตอร์คำแนะนำ ไม่เกิน 7 อย่างน้อย 1 รายการ (PortraitMediaEntity หรือ SocialPostEntity) สูงสุด 50 (PortraitMediaEntity หรือ SocialPostEntity)

ขั้นตอนที่ 1: ระบุข้อมูลนิติบุคคล

SDK ได้กำหนดเอนทิตีต่างๆ เพื่อแสดงรายการแต่ละประเภท SDK รองรับเอนทิตีต่อไปนี้สำหรับหมวดหมู่โซเชียล

  1. PortraitMediaEntity
  2. SocialPostEntity

แผนภูมิด้านล่างแสดงแอตทริบิวต์และข้อกำหนดที่มีสำหรับแต่ละประเภท

PortraitMediaEntity

แอตทริบิวต์ ข้อกำหนด คำอธิบาย รูปแบบ
URI ของการดำเนินการ ต้องระบุสำหรับแพลตฟอร์มทั้งหมด ยกเว้น Google TV

ทำ Deep Link ไปยังเอนทิตีในแอปผู้ให้บริการ

หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้

URI
PlatformSpecificPlayback ต้องระบุสำหรับแพลตฟอร์ม Google TV

Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการสำหรับแพลตฟอร์มต่างๆ เช่น Google TV และอุปกรณ์เคลื่อนที่

รายการออบเจ็กต์ PlatformSpecificPlayback
เหตุผลของคำแนะนำ ไม่บังคับ เหตุผลในการแนะนำเนื้อหาให้ผู้ใช้ ออบเจ็กต์ RecommendationReason
สรุปความคิดเห็น ไม่บังคับ สรุปความคิดเห็นสำหรับโพสต์ สตริง
ข้อมูลเมตาที่เกี่ยวข้องกับโพสต์ (ต้องระบุ)
รูปภาพ ต้องระบุ

รูปภาพควรมีสัดส่วนภาพแนวตั้ง

UI อาจแสดงรูปภาพเพียง 1 รูปเมื่อมีการระบุรูปภาพหลายรูป อย่างไรก็ตาม UI อาจแสดงภาพที่บ่งบอกว่ามีรูปภาพเพิ่มเติมใน แอป

หากโพสต์เป็นวิดีโอ ผู้ให้บริการควรระบุภาพขนาดย่อของ วิดีโอเพื่อแสดงเป็นรูปภาพ

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
ชิ้นงานข้อความ ไม่บังคับ ข้อความหลักของโพสต์ การอัปเดต ฯลฯ สตริง (แนะนำสูงสุด 140 อักขระ)
การประทับเวลา ไม่บังคับ เวลาที่เผยแพร่โพสต์ การประทับเวลา Epoch ในหน่วยมิลลิวินาที
เป็นเนื้อหาวิดีโอ ไม่บังคับ โพสต์เป็นวิดีโอใช่ไหม บูลีน
ระยะเวลาของวิดีโอ ไม่บังคับ ระยะเวลาของวิดีโอเป็นมิลลิวินาที ยาว
ข้อมูลเมตาที่เกี่ยวข้องกับโปรไฟล์ (ไม่บังคับ)
ชื่อ ต้องระบุ ชื่อโปรไฟล์ รหัส หรือแฮนเดิล เช่น "John Doe" "@TeamPixel" สตริง(แนะนำสูงสุด 25 อักขระ)
รูปโปรไฟล์ ต้องระบุ

รูปโปรไฟล์หรือรูปโปรไฟล์ของผู้ใช้

รูปภาพสี่เหลี่ยมจัตุรัสสัดส่วน 1:1

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
รูปภาพเพิ่มเติม ไม่บังคับ

ป้ายโปรไฟล์ เช่น ป้ายยืนยัน

รูปภาพสี่เหลี่ยมจัตุรัสสัดส่วน 1:1

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
ข้อมูลเมตาที่เกี่ยวข้องกับการโต้ตอบ (ไม่บังคับ)
จำนวน ไม่บังคับ

ระบุจํานวนการโต้ตอบ เช่น "3.7 ล้าน"

หมายเหตุ: หากระบุทั้งจำนวนและมูลค่าของจำนวน ระบบจะใช้จำนวน

หมายเหตุ: พาร์ทเนอร์ควรใช้ Count หรือ CountWithOptionalLabel

สตริง

CountWithOptionalLabel ไม่บังคับ

ระบุจำนวนการโต้ตอบด้วยป้ายกำกับที่ไม่บังคับ เช่น "ชอบ 3.7 ล้านครั้ง"

หมายเหตุ: หากระบุทั้ง CountWithOptionalLabel และ Count Value ระบบจะใช้ค่าใดค่าหนึ่ง

หมายเหตุ: พาร์ทเนอร์ควรใช้ Count หรือ CountWithOptionalLabel

สตริง

ค่าจำนวน ไม่บังคับ

จำนวนการโต้ตอบเป็นค่า

หมายเหตุ: ระบุค่า Count แทน Count หากแอปของคุณไม่จัดการตรรกะเกี่ยวกับวิธีเพิ่มประสิทธิภาพ จำนวนมากสำหรับขนาดการแสดงผลต่างๆ หากระบุทั้ง Count และ Count Value ระบบจะใช้ Count

ยาว
ป้ายกำกับ ไม่บังคับ ระบุว่าป้ายกำกับการโต้ตอบใช้สำหรับอะไร เช่น "ชอบ"

สตริง

ภาพ ไม่บังคับ

ระบุวัตถุประสงค์ของการโต้ตอบ ตัวอย่าง - รูปภาพที่แสดง ไอคอนชอบ อีโมจิ

ระบุรูปภาพได้มากกว่า 1 รูป แต่ระบบอาจไม่แสดงรูปภาพทั้งหมดในอุปกรณ์บางรูปแบบ

หมายเหตุ: ต้องเป็นรูปภาพสี่เหลี่ยมจัตุรัส 1:1

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
DisplayTimeWindow (ไม่บังคับ) - ตั้งค่ากรอบเวลา เพื่อให้เนื้อหาแสดงในแพลตฟอร์ม
การประทับเวลาเริ่มต้น ไม่บังคับ

การประทับเวลา Epoch หลังจากที่ควรแสดงเนื้อหาบน แพลตฟอร์ม

หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม

การประทับเวลา Epoch ในหน่วยมิลลิวินาที
การประทับเวลาสิ้นสุด ไม่บังคับ

การประทับเวลา Epoch หลังจากที่ระบบจะไม่แสดงเนื้อหาบน แพลตฟอร์มอีกต่อไป

หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม

การประทับเวลา Epoch ในหน่วยมิลลิวินาที

SocialPostEntity

แอตทริบิวต์ ข้อกำหนด คำอธิบาย รูปแบบ
URI ของการดำเนินการ ต้องระบุ

ทำ Deep Link ไปยังเอนทิตีในแอปผู้ให้บริการ

หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้

URI
URI การเล่นเฉพาะแพลตฟอร์ม ต้องระบุสำหรับแพลตฟอร์ม Google TV

Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการสำหรับแพลตฟอร์มต่างๆ เช่น Google TV และอุปกรณ์เคลื่อนที่

รายการออบเจ็กต์ PlatformSpecificPlayback
เหตุผลของคำแนะนำ ไม่บังคับ เหตุผลในการแนะนำเนื้อหาให้ผู้ใช้ ออบเจ็กต์ RecommendationReason
สรุปความคิดเห็น ไม่บังคับ สรุปความคิดเห็นสำหรับโพสต์ สตริง

ข้อมูลเมตาที่เกี่ยวข้องกับโพสต์ (ต้องระบุ)

ต้องระบุ TextContent, Image หรือ WebContent อย่างน้อย 1 รายการ

รูปภาพ ไม่บังคับ

รูปภาพควรมีสัดส่วนภาพแนวตั้ง

UI อาจแสดงรูปภาพเพียง 1 รูปเมื่อมีการระบุรูปภาพหลายรูป อย่างไรก็ตาม UI อาจแสดงภาพที่บ่งบอกว่ามีรูปภาพเพิ่มเติมใน แอป

หากโพสต์เป็นวิดีโอ ผู้ให้บริการควรระบุภาพขนาดย่อของ วิดีโอเพื่อแสดงเป็นรูปภาพ

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
ชิ้นงานข้อความ ไม่บังคับ ข้อความหลักของโพสต์ การอัปเดต ฯลฯ สตริง (แนะนำสูงสุด 140 อักขระ)
เนื้อหาวิดีโอ (ไม่บังคับ)
ระยะเวลา ต้องระบุ ระยะเวลาของวิดีโอเป็นมิลลิวินาที ยาว
รูปภาพ ต้องระบุ แสดงตัวอย่างรูปภาพของเนื้อหาวิดีโอ ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
ตัวอย่างลิงก์ (ไม่บังคับ)
ตัวอย่างลิงก์ - ชื่อ ต้องระบุ ข้อความเพื่อระบุชื่อเนื้อหาของหน้าเว็บ สตริง
ตัวอย่างลิงก์ - ชื่อโฮสต์ ต้องระบุ ข้อความที่ระบุเจ้าของเว็บ เช่น "INSIDER" สตริง
ตัวอย่างลิงก์ - รูปภาพ ไม่บังคับ รูปภาพหลักสำหรับเนื้อหาเว็บ ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
การประทับเวลา ไม่บังคับ เวลาที่เผยแพร่โพสต์ การประทับเวลา Epoch ในหน่วยมิลลิวินาที
ข้อมูลเมตาที่เกี่ยวข้องกับโปรไฟล์ (ไม่บังคับ)
ชื่อ ต้องระบุ ชื่อโปรไฟล์ รหัส หรือแฮนเดิล เช่น "John Doe" "@TeamPixel" สตริง(แนะนำสูงสุด 25 อักขระ)
ข้อความเพิ่มเติม ไม่บังคับ

อาจใช้เป็นรหัสโปรไฟล์ แฮนเดิล หรือข้อมูลเมตาเพิ่มเติมได้

เช่น "@John-Doe", "ผู้ติดตาม 5 ล้านคน", "คุณอาจชอบ", "กำลังมาแรง", "โพสต์ใหม่ 5 รายการ"

สตริง(แนะนำสูงสุด 40 อักขระ)
รูปโปรไฟล์ ต้องระบุ

รูปโปรไฟล์หรือรูปโปรไฟล์ของผู้ใช้

รูปภาพสี่เหลี่ยมจัตุรัสสัดส่วน 1:1

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
รูปภาพเพิ่มเติม ไม่บังคับ

ป้ายโปรไฟล์ เช่น ป้ายยืนยัน

รูปภาพสี่เหลี่ยมจัตุรัสสัดส่วน 1:1

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
ข้อมูลเมตาที่เกี่ยวข้องกับการโต้ตอบ (ไม่บังคับ)
จำนวน ต้องระบุ

ระบุจํานวนการโต้ตอบ เช่น "3.7 ล้าน"

หมายเหตุ: พาร์ทเนอร์ควรใช้ Count หรือ CountWithOptionalLabel

สตริง
CountWithOptionalLabel ต้องระบุ

ระบุจำนวนการโต้ตอบด้วยป้ายกำกับที่ไม่บังคับ เช่น "3.7 ล้านรายการที่ชอบ"

หมายเหตุ: พาร์ทเนอร์ควรใช้ Count หรือ CountWithOptionalLabel

สตริง
ป้ายกำกับ

ไม่บังคับ

หากไม่ได้ระบุ Visual จะต้องระบุ

ระบุวัตถุประสงค์ของการโต้ตอบ เช่น "ชอบ" สตริง (แนะนำให้ใช้สูงสุด 20 อักขระสำหรับจำนวน + ป้ายกำกับรวมกัน)
ภาพ

ไม่บังคับ

หากไม่ได้ระบุไว้ คุณต้องระบุ Label

ระบุวัตถุประสงค์ของการโต้ตอบ เช่น รูปภาพที่แสดงไอคอนชอบ อีโมจิ

ระบุรูปภาพได้มากกว่า 1 รูป แต่ระบบอาจไม่แสดงรูปภาพทั้งหมดในอุปกรณ์บางรูปแบบ

รูปภาพสี่เหลี่ยมจัตุรัสสัดส่วน 1:1

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
DisplayTimeWindow (ไม่บังคับ) - ตั้งค่ากรอบเวลา เพื่อให้เนื้อหาแสดงในแพลตฟอร์ม
การประทับเวลาเริ่มต้น ไม่บังคับ

การประทับเวลา Epoch หลังจากที่ควรแสดงเนื้อหาบน แพลตฟอร์ม

หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม

การประทับเวลา Epoch ในหน่วยมิลลิวินาที
การประทับเวลาสิ้นสุด ไม่บังคับ

การประทับเวลา Epoch หลังจากที่ระบบจะไม่แสดงเนื้อหาบน แพลตฟอร์มอีกต่อไป

หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม

การประทับเวลา Epoch ในหน่วยมิลลิวินาที

ข้อกำหนดเกี่ยวกับรูปภาพ

คุณต้องโฮสต์รูปภาพใน CDN สาธารณะเพื่อให้ Google เข้าถึงรูปภาพได้

รูปแบบไฟล์

PNG, JPG, GIF แบบภาพนิ่ง, WebP

ขนาดไฟล์สูงสุด

5120 KB

คำแนะนำเพิ่มเติม

  • พื้นที่ปลอดภัยของรูปภาพ: ใส่เนื้อหาสำคัญไว้ตรงกลาง 80% ของ รูปภาพ
  • ใช้พื้นหลังโปร่งใสเพื่อให้รูปภาพแสดงอย่างถูกต้องในการตั้งค่าธีมมืดและธีมสว่าง

ขั้นตอนที่ 2: ระบุข้อมูลคลัสเตอร์

ขอแนะนำให้เรียกใช้ชื่องานเผยแพร่เนื้อหาในเบื้องหลัง (เช่น ใช้ WorkManager) และกำหนดเวลาเป็นประจำหรือตามเหตุการณ์ (เช่น ทุกครั้งที่ ผู้ใช้เปิดแอปหรือเมื่อผู้ใช้เพิ่งติดตามบัญชีใหม่)

AppEngageSocialClient มีหน้าที่เผยแพร่คลัสเตอร์โซเชียล

API ต่อไปนี้ใช้เพื่อเผยแพร่คลัสเตอร์ในไคลเอ็นต์

  • isServiceAvailable
  • publishRecommendationClusters
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

API นี้ใช้เพื่อตรวจสอบว่าบริการพร้อมใช้งานสำหรับการผสานรวมหรือไม่ และ สามารถแสดงเนื้อหาในอุปกรณ์ได้หรือไม่

คุณสามารถตรวจสอบความพร้อมให้บริการสำหรับคลัสเตอร์ทุกประเภทที่ต้องการ เผยแพร่ isServiceAvailable API ยอมรับออบเจ็กต์คำขอ ServiceAvailabilityRequest ซึ่งมีประเภทคลัสเตอร์ที่ต้องตรวจสอบความพร้อมให้บริการ คุณดูClusterTypeค่า enum ที่จำเป็นสำหรับ ServiceAvailabilityRequest ได้จากตารางต่อไปนี้

ประเภทคลัสเตอร์ ค่าคงที่ของประเภทคลัสเตอร์ ค่าจำนวนเต็ม
ไม่ทราบ TYPE_UNKNOWN 0
คลัสเตอร์คำแนะนำ TYPE_RECOMMENDATION 1
คลัสเตอร์แนะนำ TYPE_FEATURED 2
คลัสเตอร์ความต่อเนื่อง TYPE_CONTINUATION 3
คลัสเตอร์การจัดการผู้ใช้ TYPE_ENGAGEMENT 8
คลัสเตอร์การสมัครใช้บริการ TYPE_SUBSCRIPTION 12

Kotlin

val request = ServiceAvailabilityRequest.Builder()
    .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
    .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
    .build()

client.isServiceAvailable(request).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        val availabilityMap = task.result
        if (availabilityMap[ClusterType.TYPE_CONTINUATION] == true) {
            // Proceed with publishing continuation content
        }
        if (availabilityMap[ClusterType.TYPE_RECOMMENDATION] == true) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
}

Java

ServiceAvailabilityRequest request =
    new ServiceAvailabilityRequest.Builder()
        .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
        .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
        .build();

client.isServiceAvailable(request).addOnCompleteListener(task -> {
    if (task.isSuccessful()) {
        Map<Integer, Boolean> availabilityMap = task.getResult();
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_CONTINUATION))) {
            // Proceed with publishing continuation content
        }
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_RECOMMENDATION))) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
});
ฟีเจอร์ความพร้อมให้บริการแบบมีเงื่อนไข

แอปที่ผสานรวมบางแอปขอการกำหนดค่าพิเศษที่เปิดและปิดใช้ บริการ Engage เป็นระยะๆ เพื่อลดต้นทุนการแสดงโฆษณา แม้ว่ากลยุทธ์การนำเข้าเนื้อหาเป็นระยะๆ นี้จะทำได้ แต่ก็ส่งผลเสียต่อผู้ใช้และผลิตภัณฑ์ เนื่องจากระบบจะไม่แสดงเนื้อหาที่ไม่มีอัปเดต และบางแพลตฟอร์มจะไม่แสดงเนื้อหาเลย

ตั้งแต่เวอร์ชัน 1.6.0 เป็นต้นไป Engage SDK จะอนุญาตให้ตรวจสอบความพร้อมใช้งานสำหรับคลัสเตอร์ประเภทใดประเภทหนึ่ง หากสนใจเลือกใช้ฟีเจอร์นี้สำหรับคลัสเตอร์ประเภทใดก็ตาม โปรดติดต่อ engage-developers@google.com

สำหรับ SDK เวอร์ชันก่อน v1.6.0 (เลิกใช้งานแล้ว)

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

API นี้ใช้เพื่อเผยแพร่ออบเจ็กต์รายการ RecommendationCluster

ออบเจ็กต์ RecommendationCluster อาจมีแอตทริบิวต์ต่อไปนี้

แอตทริบิวต์ ข้อกำหนด คำอธิบาย
รายการ SocialPostEntity หรือ PortraitMediaEntity ต้องระบุ รายการเอนทิตีที่ประกอบกันเป็นคำแนะนำสำหรับ คลัสเตอร์คำแนะนำนี้ เอนทิตีในคลัสเตอร์เดียวต้องเป็นประเภทเดียวกัน
ชื่อ ต้องระบุ

ชื่อของคลัสเตอร์วิดีโอแนะนำ (เช่น ล่าสุด จากเพื่อนๆ)

ขนาดข้อความที่แนะนำ: ไม่เกิน 25 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา)

ชื่อรอง ไม่บังคับ คำบรรยายของคลัสเตอร์คำแนะนำ
URI การดำเนินการ ไม่บังคับ

Deep Link ไปยังหน้าในแอปพาร์ทเนอร์ที่ผู้ใช้จะดู รายการคำแนะนำทั้งหมดได้

หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้

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

API นี้ใช้เพื่อเผยแพร่การ์ดลงชื่อเข้าใช้ การดำเนินการลงชื่อเข้าใช้นำผู้ใช้ไปยังหน้าลงชื่อเข้าใช้ของแอปเพื่อให้แอปเผยแพร่เนื้อหาได้ (หรือแสดงเนื้อหาที่ปรับเปลี่ยนในแบบของคุณมากขึ้น)

ข้อมูลเมตาต่อไปนี้เป็นส่วนหนึ่งของการ์ดลงชื่อเข้าใช้

แอตทริบิวต์ ข้อกำหนด คำอธิบาย
URI การดำเนินการ ต้องระบุ Deep Link ไปยังการดำเนินการ (เช่น ไปยังหน้าลงชื่อเข้าใช้แอป)
รูปภาพ ไม่บังคับ - หากไม่ได้ระบุ ต้องระบุชื่อ

รูปภาพที่แสดงในการ์ด

รูปภาพที่มีสัดส่วนภาพ 16x9 และมีความละเอียด 1264x712

ชื่อ ไม่บังคับ - หากไม่ได้ระบุ ต้องระบุรูปภาพ ชื่อบนบัตร
ข้อความเกี่ยวกับการดำเนินการ ไม่บังคับ ข้อความที่แสดงใน CTA (เช่น ลงชื่อเข้าใช้)
ชื่อรอง ไม่บังคับ คำบรรยายแทนเสียงที่ไม่บังคับในการ์ด

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

หากไม่มีการเผยแพร่คลัสเตอร์ใดเลยเนื่องด้วยเหตุผลทางธุรกิจภายใน เราขอแนะนำให้อัปเดตสถานะการเผยแพร่โดยใช้ API updatePublishStatus ซึ่งเป็นสิ่งสำคัญเนื่องจากเหตุผลต่อไปนี้

  • การระบุสถานะในทุกสถานการณ์ แม้ว่าเนื้อหาจะเผยแพร่แล้ว (STATUS == PUBLISHED) ก็มีความสำคัญต่อการสร้างแดชบอร์ดที่ใช้สถานะที่ชัดเจนนี้เพื่อสื่อถึงสถานะและเมตริกอื่นๆ ของการผสานรวม
  • หากไม่มีการเผยแพร่เนื้อหา แต่สถานะการผสานรวมไม่ขาดตอน (STATUS == NOT_PUBLISHED) 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 ขอแนะนำให้เผยแพร่การ์ดลงชื่อเข้าใช้ หากผู้ให้บริการไม่สามารถเผยแพร่การ์ดลงชื่อเข้าใช้ได้ไม่ว่าด้วยเหตุผลใดก็ตาม เราขอแนะนำให้เรียกใช้ API updatePublishStatus ด้วยรหัสสถานะ NOT_PUBLISHED_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

API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์คำแนะนำ

Kotlin

client.deleteRecommendationClusters()

Java

client.deleteRecommendationClusters();

เมื่อได้รับคำขอ บริการจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์คำแนะนำ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้

deleteUserManagementCluster

API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ UserAccountManagement

Kotlin

client.deleteUserManagementCluster()

Java

client.deleteUserManagementCluster();

เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ UserAccountManagement ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้

deleteClusters

API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ประเภทที่กำหนด

Kotlin

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

Java

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

เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ทั้งหมดที่ตรงกับประเภทคลัสเตอร์ที่ระบุ ไคลเอ็นต์เลือกส่งประเภทคลัสเตอร์อย่างน้อย 1 ประเภทได้ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้

การจัดการข้อผิดพลาด

เราขอแนะนำอย่างยิ่งให้รับฟังผลลัพธ์ของงานจาก 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 การเรียกใช้บริการบ่อยเกินไป

ขั้นตอนที่ 3: จัดการ Intent การออกอากาศ

นอกจากการเรียก API การเผยแพร่เนื้อหาผ่านงานแล้ว คุณยังต้องตั้งค่า BroadcastReceiver เพื่อรับคำขอ การเผยแพร่เนื้อหาด้วย

เป้าหมายของ Broadcast Intent คือการเปิดใช้งานแอปอีกครั้งและการบังคับซิงค์ข้อมูลเป็นหลัก Broadcast Intent ไม่ได้ออกแบบมาให้ส่งบ่อยมาก ระบบจะทริกเกอร์ ก็ต่อเมื่อบริการ Engage ระบุว่าเนื้อหาอาจล้าสมัย (เช่น มีอายุ 1 สัปดาห์) วิธีนี้จะช่วยให้มั่นใจได้มากขึ้นว่าผู้ใช้จะได้รับประสบการณ์การใช้งานเนื้อหาใหม่ๆ แม้ว่าจะไม่ได้เรียกใช้แอปพลิเคชันเป็นเวลานานก็ตาม

ต้องตั้งค่า BroadcastReceiver ด้วย 2 วิธีต่อไปนี้

  • ลงทะเบียนอินสแตนซ์ของคลาส BroadcastReceiver แบบไดนามิกโดยใช้ Context.registerReceiver() ซึ่งจะช่วยให้แอปพลิเคชันที่ยังคงทำงานอยู่ในหน่วยความจำสามารถสื่อสารได้

Kotlin

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

Java

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 Intent ได้เมื่อไม่ได้ทำงาน และยังช่วยให้แอปพลิเคชันเผยแพร่ เนื้อหาได้ด้วย

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

บริการจะส่ง Intent ต่อไปนี้

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION ขอแนะนำให้เริ่มการโทร publishRecommendationClusters เมื่อได้รับ Intent นี้

ขั้นตอนการทำงานของการผสานรวม

ดูคำแนะนำแบบทีละขั้นตอนเกี่ยวกับการยืนยันการผสานรวมหลังจากเสร็จสมบูรณ์ได้ที่ เวิร์กโฟลว์การผสานรวมสำหรับนักพัฒนาแอปของ Engage

คำถามที่พบบ่อย

ดูคำถามที่พบบ่อยเกี่ยวกับ Engage SDK

รายชื่อติดต่อ

โปรดติดต่อ engage-developers@google.com หากมีข้อสงสัย ในระหว่างกระบวนการผสานรวม ทีมของเราจะตอบกลับโดยเร็วที่สุด

ขั้นตอนถัดไป

หลังจากผสานรวมเสร็จแล้ว ขั้นตอนถัดไปที่คุณต้องทำมีดังนี้

  • ส่งอีเมลไปที่ engage-developers@google.com และแนบ APK ที่ผสานรวมแล้วซึ่งพร้อมให้ Google ทดสอบ
  • Google จะทำการยืนยันและตรวจสอบภายในเพื่อให้แน่ใจว่าการผสานรวมทำงานได้ตามที่คาดไว้ หากจำเป็นต้องเปลี่ยนแปลง Google จะติดต่อคุณ พร้อมรายละเอียดที่จำเป็น
  • เมื่อการทดสอบเสร็จสมบูรณ์และไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ Google จะติดต่อคุณเพื่อ แจ้งให้ทราบว่าคุณเริ่มเผยแพร่ APK ที่อัปเดตและผสานรวมแล้วไปยัง Play Store ได้
  • หลังจากที่ Google ยืนยันว่าได้เผยแพร่ APK ที่อัปเดตแล้วไปยัง Play Store คำแนะนำและคลัสเตอร์จะเผยแพร่และแสดงต่อผู้ใช้