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

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

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

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

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

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

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

คำศัพท์

การผสานรวมนี้มีคลัสเตอร์ 3 ประเภท ได้แก่ การแนะนำ การดูต่อ และวิดีโอแนะนำ

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

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

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

      รูปที่ 1 UI ของ Entertainment Space ที่แสดง กลุ่มคำแนะนำจากพาร์ทเนอร์รายเดียว
    • เอนทิตี: ออบเจ็กต์ที่แสดงรายการเดียวในคลัสเตอร์ เอนทิตี อาจเป็นเพลย์ลิสต์ หนังสือเสียง พอดแคสต์ และอื่นๆ ดูรายการประเภทเอนทิตีที่รองรับได้ในส่วนระบุข้อมูลเอนทิตี

      รูปที่ 2 UI ของ Entertainment Space แสดงเอนทิตีเดียวภายในคลัสเตอร์คำแนะนำของพาร์ทเนอร์รายเดียว
  • คลัสเตอร์ความต่อเนื่องจะแสดงเนื้อหาเสียงที่ผู้ใช้มีส่วนร่วมด้วยล่าสุดจากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการจัดกลุ่ม UI เดียว นักพัฒนาแอป พาร์ทเนอร์แต่ละรายจะได้รับอนุญาตให้เผยแพร่เอนทิตีได้สูงสุด 10 รายการใน คลัสเตอร์การดูต่อ

    รูปที่ 3 UI ของ Entertainment Space แสดง คลัสเตอร์ความต่อเนื่องที่มีคำแนะนำที่ดูค้างไว้จากพาร์ทเนอร์หลายราย (ปัจจุบันมองเห็นคำแนะนำเพียงรายการเดียว)
  • คลัสเตอร์แนะนำจะแสดงสินค้าที่เลือกจากพาร์ทเนอร์นักพัฒนาแอปหลายราย ในการจัดกลุ่ม UI เดียว โดยจะมีคลัสเตอร์ "แนะนำ" เพียงคลัสเตอร์เดียว ซึ่งจะแสดงที่ด้านบนของ UI พร้อมตำแหน่งที่มีลำดับความสำคัญเหนือคลัสเตอร์คำแนะนำทั้งหมด พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะได้รับอนุญาตให้ ออกอากาศเอนทิตีได้สูงสุด 10 รายการในคลัสเตอร์ "แนะนำ"

    รูปที่ 4 UI ของ Entertainment Space แสดงคลัสเตอร์เด่นที่มีคำแนะนำจากพาร์ทเนอร์หลายราย (ปัจจุบันมองเห็นคำแนะนำได้เพียงรายการเดียว)

สิ่งที่ต้องเตรียมก่อนดำเนินการ

ระดับ 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 สูงสุด 50 รายการ
คลัสเตอร์ความต่อเนื่อง สูงสุด 1 รายการ สูงสุด 20
คลัสเตอร์แนะนำ สูงสุด 1 รายการ สูงสุด 20

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

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

  1. MusicAlbumEntity
  2. MusicArtistEntity
  3. MusicTrackEntity
  4. MusicVideoEntity
  5. PlaylistEntity
  6. PodcastSeriesEntity
  7. PodcastEpisodeEntity
  8. LiveRadioStationEntity
  9. AudiobookEntity

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

MusicAlbumEntity

ออบเจ็กต์ MusicAlbumEntity แสดงถึงอัลบั้มเพลง (เช่น Midnights ของ Taylor Swift)

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

Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับอัลบั้มเพลง

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

ศิลปิน ต้องระบุ รายชื่อศิลปินในอัลบั้มเพลง
URI การเล่น ไม่บังคับ

Deep Link ที่เริ่มเล่นอัลบั้มในแอปผู้ให้บริการ

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

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

อัลบั้ม (รวมถึง LP และ Double LP)

EP

SINGLE

มิกซ์เทป

ค่ายเพลง ไม่บังคับ รายชื่อค่ายเพลงที่เกี่ยวข้องกับอัลบั้ม
ดาวน์โหลดในอุปกรณ์ ไม่บังคับ บูลีนที่ระบุว่าดาวน์โหลดอัลบั้มเพลงในอุปกรณ์หรือไม่
อาจไม่เหมาะสม ไม่บังคับ

บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่

รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E"

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

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ

ในหน่วยมิลลิวินาทีตั้งแต่ Epoch

เปอร์เซ็นต์ความคืบหน้า ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง

จำนวนเต็มระหว่าง 0 ถึง 100

MusicArtistEntity

ออบเจ็กต์ MusicArtistEntity แสดงถึงศิลปินเพลง (เช่น Adele)

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

Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับศิลปิน เพลง

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

URI การเล่น ไม่บังคับ

Deep Link ที่เริ่มเล่นเพลงของศิลปินในแอปของผู้ให้บริการ

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

คำอธิบาย ไม่บังคับ ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ
เวลาในการมีส่วนร่วมครั้งล่าสุด ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ

ในหน่วยมิลลิวินาทีตั้งแต่ Epoch

MusicTrackEntity

ออบเจ็กต์ MusicTrackEntity แสดงแทร็กเพลง (เช่น Yellow ของ Coldplay)

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

Deep Link ที่เริ่มเล่นแทร็กเพลงในแอปของผู้ให้บริการ

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

ศิลปิน ต้องระบุ รายชื่อศิลปินสำหรับแทร็กเพลง
URI ของหน้าข้อมูล ไม่บังคับ

Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับแทร็กเพลง

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

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

บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่

รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E"

เวลาในการมีส่วนร่วมครั้งล่าสุด ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ

ในหน่วยมิลลิวินาทีตั้งแต่ Epoch

เปอร์เซ็นต์ความคืบหน้า ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง

จำนวนเต็มระหว่าง 0 ถึง 100

MusicVideoEntity

ออบเจ็กต์ MusicVideoEntity แสดงถึงมิวสิกวิดีโอ (เช่น The Weeknd - Take My Breath (มิวสิกวิดีโออย่างเป็นทางการ))

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

Deep Link ที่เริ่มเล่นมิวสิกวิดีโอในแอปของผู้ให้บริการ

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

URI ของหน้าข้อมูล ไม่บังคับ

Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับมิวสิกวิดีโอ

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

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

บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่

รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E"

เวลาในการมีส่วนร่วมครั้งล่าสุด ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ

ในหน่วยมิลลิวินาทีตั้งแต่ Epoch

เปอร์เซ็นต์ความคืบหน้า ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง

จำนวนเต็มระหว่าง 0 ถึง 100

PlaylistEntity

ออบเจ็กต์ PlaylistEntity แสดงถึงเพลย์ลิสต์เพลง (เช่น เพลย์ลิสต์เพลงยอดนิยม 10 อันดับของสหรัฐอเมริกา)

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

Deep Link ที่เริ่มเล่นเพลย์ลิสต์เพลงในแอปของผู้ให้บริการ

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

URI ของหน้าข้อมูล ไม่บังคับ

Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับเพลย์ลิสต์เพลง

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

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

บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่

รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E"

เวลาในการมีส่วนร่วมครั้งล่าสุด ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ

ในหน่วยมิลลิวินาทีตั้งแต่ Epoch

เปอร์เซ็นต์ความคืบหน้า ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง

จำนวนเต็มระหว่าง 0 ถึง 100

PodcastSeriesEntity

ออบเจ็กต์ PodcastSeriesEntity แสดงถึงพอดแคสต์ซีรีส์ (เช่น This American Life)

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

Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับพอดแคสต์ ซีรีส์

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

URI การเล่น ไม่บังคับ

Deep Link ที่เริ่มเล่นพอดแคสต์ซีรีส์ในแอปผู้ให้บริการ

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

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

บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่

รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E"

เวลาในการมีส่วนร่วมครั้งล่าสุด ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ

ในหน่วยมิลลิวินาทีตั้งแต่ Epoch

PodcastEpisodeEntity

ออบเจ็กต์ PodcastEpisodeEntity แสดงถึงพอดแคสต์ซีรีส์ (เช่น Spark Bird ตอนที่ 754: This American Life)

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

Deep Link ที่เริ่มเล่นตอนของพอดแคสต์ในแอปของผู้ให้บริการ

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

ชื่อซีรีส์พอดแคสต์ ต้องระบุ ชื่อซีรีส์พอดแคสต์ที่ตอนนั้นๆ สังกัดอยู่
ระยะเวลา ต้องระบุ ระยะเวลาของตอนพอดแคสต์ในหน่วยมิลลิวินาที
วันที่เผยแพร่ ต้องระบุ วันที่เผยแพร่พอดแคสต์ (ในหน่วยมิลลิวินาทีตั้งแต่ Epoch)
URI ของหน้าข้อมูล ไม่บังคับ

Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับตอนของพอดแคสต์

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

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

บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่

รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E"

ประเภทฟังต่อ ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง

TYPE_CONTINUE - เล่นต่อในรายการเสียงที่ยังไม่จบ

TYPE_NEXT - Continue on a new one of a series.

TYPE_NEW - เพิ่งเปิดตัว

เวลาในการมีส่วนร่วมครั้งล่าสุด ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ

ในหน่วยมิลลิวินาทีตั้งแต่ Epoch

เปอร์เซ็นต์ความคืบหน้า ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง

จำนวนเต็มระหว่าง 0 ถึง 100

LiveRadioStationEntity

ออบเจ็กต์ LiveRadioStationEntity แสดงถึงสถานีวิทยุที่กำลังออกอากาศ (เช่น 98.1 The Breeze)

แอตทริบิวต์ ข้อกำหนด หมายเหตุ
ชื่อ ต้องระบุ ชื่อสถานีวิทยุที่กำลังออกอากาศสด
รูปภาพโปสเตอร์ ต้องระบุ ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ ข้อกำหนดเกี่ยวกับรูปภาพ
URI การเล่น ต้องระบุ

Deep Link ที่เริ่มเล่นสถานีวิทยุในแอปของผู้ให้บริการ

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

URI ของหน้าข้อมูล ไม่บังคับ

Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับสถานีวิทยุ

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

ความถี่ ไม่บังคับ ความถี่ที่สถานีวิทยุออกอากาศ (เช่น "98.1 FM")
ชื่อรายการ ไม่บังคับ รายการที่กำลังเล่นอยู่ในสถานีวิทยุ
โฮสต์ ไม่บังคับ รายชื่อผู้จัดรายการของสถานีวิทยุ
คำอธิบาย ไม่บังคับ ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ
เวลาในการมีส่วนร่วมครั้งล่าสุด ไม่บังคับ

แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ

ในหน่วยมิลลิวินาทีตั้งแต่ Epoch

AudiobookEntity

ออบเจ็กต์ AudiobookEntity แสดงถึงหนังสือเสียง (เช่น หนังสือเสียงของ Becoming โดย Michelle Obama)

แอตทริบิวต์ ข้อกำหนด หมายเหตุ
ชื่อ ต้องระบุ
รูปภาพโปสเตอร์ ต้องระบุ ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ข้อกำหนด ของรูปภาพ
ผู้เขียน ต้องระบุ ต้องระบุชื่อผู้แต่งอย่างน้อย 1 ชื่อ
URI ของลิงก์การดำเนินการ ต้องระบุ

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

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

ผู้บรรยาย ไม่บังคับ ต้องระบุชื่อผู้บรรยายอย่างน้อย 1 คน
วันที่เผยแพร่ ไม่บังคับ ในรูปแบบมิลลิวินาทีของ Epoch หากมี
คำอธิบาย ไม่บังคับ ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ
ราคา ไม่บังคับ ข้อความอิสระ
ระยะเวลา ไม่บังคับ ต้องเป็นค่าบวกหากระบุ
ประเภท ไม่บังคับ รายการประเภทที่เชื่อมโยงกับหนังสือ
ชื่อหนังสือชุด ไม่บังคับ ชื่อชุดหนังสือที่หนังสือเสียงเป็นของชุดนั้น (เช่น Harry Potter
ดัชนีหน่วยของซีรีส์ ไม่บังคับ ดัชนีของหนังสือเสียงในชุด โดย 1 คือหนังสือเสียงเล่มแรก ในชุด เช่น หากแฮร์รี่ พอตเตอร์กับนักโทษแห่ง อัซคาบันเป็นหนังสือเล่มที่ 3 ในชุด คุณควรตั้งค่าเป็น 3
ดำเนินการต่อกับประเภทสมุดภาพ ไม่บังคับ

TYPE_CONTINUE - อ่านหนังสือที่ยังอ่านไม่จบต่อ

TYPE_NEXT - Continue on a new one of a series.

TYPE_NEW - เพิ่งเปิดตัว

เวลาในการมีส่วนร่วมครั้งล่าสุด ต้องมีแบบมีเงื่อนไข

ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์ความต่อเนื่อง

ในหน่วยมิลลิวินาทีตั้งแต่ Epoch

เปอร์เซ็นต์ความคืบหน้า ต้องมีแบบมีเงื่อนไข

ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์ความต่อเนื่อง

หนังสือเสียงที่เพิ่งซื้อใหม่จะอยู่ในคลัสเตอร์อ่านต่อ ได้

ค่าต้องมากกว่า 0 และน้อยกว่า 100

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

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

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

ในหน่วยมิลลิวินาทีตั้งแต่ Epoch

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

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

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

ในหน่วยมิลลิวินาทีตั้งแต่ Epoch

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

ข้อกำหนดที่จำเป็นสำหรับชิ้นงานรูปภาพแสดงอยู่ด้านล่าง

สัดส่วนภาพ ข้อกำหนด พิกเซลขั้นต่ำ พิกเซลที่แนะนํา
สี่เหลี่ยมจัตุรัส (1x1) ต้องระบุ 300x300 1200x1200
แนวนอน (1.91x1) ไม่บังคับ 600x314 1200x628
แนวตั้ง (4x5) ไม่บังคับ 480x600 960x1200

รูปแบบไฟล์

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

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

5120 KB

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

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

ตัวอย่าง

MusicAlbumEntity musicAlbumEntity =
        new MusicAlbumEntity.Builder()
            .setName(NAME)
             .addPosterImage(new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(960)
                  .setImageWidthInPixel(408)
                  .build())
            .setPlayBackUri("https://play.google/album/play")
            .setInfoPageUri("https://play.google/album/info")
            .setDescription("A description of this album.")
            .addArtist("Artist")
            .addGenre("Genre")
            .addMusicLabel("Label")
            .addContentRating("Rating")
            .setSongsCount(960)
            .setReleaseDateEpochMillis(1633032895L)
            .setDurationMillis(1633L)
            .build();
AudiobookEntity audiobookEntity =
        new AudiobookEntity.Builder()
            .setName("Becoming")
            .addPosterImage(new Image.Builder()
                 .setImageUri(Uri.parse("http://www.x.com/image.png"))
                 .setImageHeightInPixel(960)
                 .setImageWidthInPixel(408)
                  .build())
            .addAuthor("Michelle Obama")
            .addNarrator("Michelle Obama")
            .setActionLinkUri(
               Uri.parse("https://play.google/audiobooks/1"))
            .setDurationMillis(16335L)
            .setPublishDateEpochMillis(1633032895L)
            .setDescription("An intimate, powerful, and inspiring memoir")
            .setPrice("$16.95")
            .addGenre("biography")
            .build();

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

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

AppEngagePublishClient มีหน้าที่เผยแพร่คลัสเตอร์ API ต่อไปนี้พร้อมใช้งานในไคลเอ็นต์

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • 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 "อย่างต่อเนื่อง" ในอุปกรณ์ที่รองรับทั้งหมดไม่ว่าด้วยเหตุผลใดก็ตาม และมีการกำหนดค่าสำหรับการส่งผ่านข้อมูลเป็นระยะๆ สำหรับอุปกรณ์ชุดใดก็ตาม การเผยแพร่คลัสเตอร์ต่อเนื่องทั้งหมด (เช่น ฟังต่อ) จะยังคงเปิดใช้โดยการกำหนดค่าเริ่มต้น และคลัสเตอร์ประเภทอื่นๆ จะเปิดใช้และปิดใช้เป็นระยะๆ หากการส่งผ่านข้อมูลเป็นระยะๆ มีผลกับคุณ แต่การกำหนดค่าเริ่มต้นนี้ไม่เหมาะกับความต้องการของคุณ โปรดติดต่อ 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

Kotlin

client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Trending music")
                        .build())
                .build())

Java

client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Trending music")
                        .build())
                .build());

เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายใน ธุรกรรมเดียว

  • ระบบจะนำข้อมูล RecommendationCluster ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก
  • ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์คำแนะนำที่อัปเดต

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

publishFeaturedCluster

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

Kotlin

client.publishFeaturedCluster(
            PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    FeaturedCluster.Builder()
                        ...
                        .build())
                .build())

Java

client.publishFeaturedCluster(
            new PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    new FeaturedCluster.Builder()
                        ...
                        .build())
                .build());

เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายใน ธุรกรรมเดียว

  • ระบบจะนำข้อมูล FeaturedCluster ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก
  • ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์แนะนำที่อัปเดต

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

publishContinuationCluster

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

Kotlin

client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build())

Java

client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .build())
                .build())

เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายใน ธุรกรรมเดียว

  • ระบบจะนำข้อมูล ContinuationCluster ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก
  • ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์ Continuation ที่อัปเดต

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

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

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

deleteFeaturedCluster

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

Kotlin

client.deleteFeaturedCluster()

Java

client.deleteFeaturedCluster();

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

deleteContinuationCluster

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

Kotlin

client.deleteContinuationCluster()

Java

client.deleteContinuationCluster();

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

deleteUserManagementCluster

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

Kotlin

client.deleteUserManagementCluster()

Java

client.deleteUserManagementCluster();

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

deleteClusters

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

Kotlin

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

Java

client.deleteClusters(
            new DeleteClustersRequest.Builder()
                .addClusterType(ClusterType.TYPE_FEATURED)
                .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
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
  // Trigger continuation cluster publish when PUBLISH_CONTINUATION 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)

// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FEATURED),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Continuation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION),
                           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

// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received

// Trigger continuation cluster publish when PUBLISH_CONTINUATION 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);

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION),
                         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>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
      </intent-filter>
   </receiver>
</application>

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

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

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

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

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

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

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

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

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

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

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