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

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

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

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

คำศัพท์

การผสานรวมนี้ประกอบด้วยคลัสเตอร์ 3 ประเภท ได้แก่ คําแนะนํา การต่อเรื่อง และแนะนํา

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

    คําแนะนําของคุณควรมีโครงสร้างดังต่อไปนี้

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

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

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

    รูปที่ 3 UI ของพื้นที่ความบันเทิงที่แสดงกลุ่มการต่อเรื่องที่มีคําแนะนําที่ยังไม่เสร็จสมบูรณ์จากพาร์ทเนอร์หลายราย (ขณะนี้มีเพียงคําแนะนําเดียวที่มองเห็นได้)
  • กลุ่มแนะนําจะแสดงรายการที่คัดสรรจากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการรวมกลุ่ม 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.5.2'
}

สรุป

การออกแบบนี้อิงตามการใช้งาน bound service

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

ประเภทคลัสเตอร์ ขีดจํากัดของคลัสเตอร์ ขีดจํากัดสูงสุดของเอนทิตีในคลัสเตอร์
กลุ่มคําแนะนํา ไม่เกิน 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 และ LP คู่)

EP

SINGLE

มิกซ์เทป

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

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

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

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

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

เป็นมิลลิวินาทีตามยุค

เปอร์เซ็นต์ความคืบหน้าที่เสร็จสมบูรณ์ ไม่บังคับ

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

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

MusicArtistEntity

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

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

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

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

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

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

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

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

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

เป็นมิลลิวินาทีตามยุค

MusicTrackEntity

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

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

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

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

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

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

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

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

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

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

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

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

เป็นมิลลิวินาทีตามยุค

เปอร์เซ็นต์ความคืบหน้าที่เสร็จสมบูรณ์ ไม่บังคับ

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

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

MusicVideoEntity

ออบเจ็กต์ MusicVideoEntity แสดงถึงมิวสิกวิดีโอ (เช่น The Weeknd - Take My Breath (Official Music Video))

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

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

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

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

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

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

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

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

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

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

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

เป็นมิลลิวินาทีตามยุค

เปอร์เซ็นต์ความคืบหน้าที่เสร็จสมบูรณ์ ไม่บังคับ

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

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

PlaylistEntity

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

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

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

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

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

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

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

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

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

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

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

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

เป็นมิลลิวินาทีตามยุค

เปอร์เซ็นต์ความคืบหน้าที่เสร็จสมบูรณ์ ไม่บังคับ

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

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

PodcastSeriesEntity

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

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

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

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

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

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

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

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

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

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

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

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

เป็นมิลลิวินาทีตามยุค

PodcastEpisodeEntity

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

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

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

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

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

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

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

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

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

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

ประเภทรายการถัดไปที่จะฟัง ไม่บังคับ

แนะนำสำหรับสินค้าในกลุ่มการสืบเนื่อง

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

TYPE_NEXT - เล่นรายการถัดไปในชุด

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

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

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

เป็นมิลลิวินาทีตามยุค

เปอร์เซ็นต์ความคืบหน้าที่เสร็จสมบูรณ์ ไม่บังคับ

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

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

LiveRadioStationEntity

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

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

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

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

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

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

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

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

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

เป็นมิลลิวินาทีตามยุค

AudiobookEntity

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

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

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

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

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

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

TYPE_NEXT - เล่นรายการถัดไปในชุด

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

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

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

เป็นมิลลิวินาทีตามยุค

เปอร์เซ็นต์ความคืบหน้าที่เสร็จสมบูรณ์ ต้องระบุแบบมีเงื่อนไข

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

หนังสือเสียงที่ซื้อ *ใหม่* อาจเป็นส่วนหนึ่งในกลุ่มการอ่านต่อ

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

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

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

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

เป็นมิลลิวินาทีตามยุค

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

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

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

เป็นมิลลิวินาทีตามยุค

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

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

สัดส่วนภาพ ข้อกำหนด พิกเซลขั้นต่ำ พิกเซลที่แนะนํา
สี่เหลี่ยมจัตุรัส (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 นี้ใช้เพื่อตรวจสอบว่าบริการพร้อมสำหรับการผสานรวมหรือไม่ และเนื้อหาแสดงในอุปกรณ์ได้หรือไม่

KotlinJava
client.isServiceAvailable.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Handle IPC call success
        if(task.result) {
          // Service is available on the device, proceed with content
          // publish calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
}
client.isServiceAvailable().addOnCompleteListener(task - > {
    if (task.isSuccessful()) {
        // Handle success
        if(task.getResult()) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
});

publishRecommendationClusters

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

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

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

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

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

publishFeaturedCluster

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

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

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

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

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

publishContinuationCluster

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

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

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

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

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

publishUserAccountManagementRequest

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

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

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

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

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

ชื่อ ไม่บังคับ - หากไม่ระบุ จะต้องระบุรูปภาพ ชื่อบนการ์ด
ข้อความการดําเนินการ ไม่บังคับ ข้อความที่แสดงใน CTA (เช่น ลงชื่อเข้าใช้)
ชื่อรอง ไม่บังคับ คำบรรยายบนการ์ด (ไม่บังคับ)
KotlinJava
var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()

client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());
SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();

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

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

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

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

updatePublishStatus

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

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

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

deleteRecommendationClusters

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

KotlinJava
client.deleteRecommendationClusters()
client.deleteRecommendationClusters();

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

deleteFeaturedCluster

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

KotlinJava
client.deleteFeaturedCluster()
client.deleteFeaturedCluster();

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

deleteContinuationCluster

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

KotlinJava
client.deleteContinuationCluster()
client.deleteContinuationCluster();

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

deleteUserManagementCluster

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

KotlinJava
client.deleteUserManagementCluster()
client.deleteUserManagementCluster();

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

deleteClusters

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

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

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

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

เราขอแนะนําอย่างยิ่งให้ฟังผลลัพธ์ของงานจาก API การเผยแพร่เพื่อให้ดําเนินการติดตามผลเพื่อกู้คืนและส่งงานที่สําเร็จอีกครั้งได้

client.publishRecommendationClusters(
              new PublishRecommendationClustersRequest.Builder()
                  .addRecommendationCluster(...)
                  .build())
          .addOnCompleteListener(
              task -> {
                if (task.isSuccessful()) {
                  // do something
                } else {
                  Exception exception = task.getException();
                  if (exception instanceof AppEngageException) {
                    @AppEngageErrorCode
                    int errorCode = ((AppEngageException) exception).getErrorCode();
                    if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
                      // do something
                    }
                  }
                }
              });

ระบบจะแสดงข้อผิดพลาดเป็น AppEngageException โดยระบุสาเหตุเป็นรหัสข้อผิดพลาด

รหัสข้อผิดพลาด ชื่อข้อผิดพลาด หมายเหตุ
1 SERVICE_NOT_FOUND บริการไม่พร้อมให้บริการในอุปกรณ์ที่ระบุ
2 SERVICE_NOT_AVAILABLE บริการพร้อมใช้งานในอุปกรณ์หนึ่งๆ แต่ใช้งานไม่ได้ขณะโทร (เช่น มีการปิดใช้อย่างชัดเจน)
3 SERVICE_CALL_EXECUTION_FAILURE การดำเนินการของงานล้มเหลวเนื่องจากปัญหาการแยกชุดข้อความ ในกรณีนี้ ให้ลองอีกครั้ง
4 SERVICE_CALL_PERMISSION_DENIED ผู้โทรไม่ได้รับอนุญาตให้โทรเรียกบริการ
5 SERVICE_CALL_INVALID_ARGUMENT คำขอมีข้อมูลที่ไม่ถูกต้อง (เช่น มีคลัสเตอร์มากกว่าจำนวนที่อนุญาต)
6 SERVICE_CALL_INTERNAL เกิดข้อผิดพลาดในฝั่งบริการ
7 SERVICE_CALL_RESOURCE_EXHAUSTED การเรียกใช้บริการเกิดขึ้นบ่อยเกินไป

ขั้นตอนที่ 3: จัดการ Intent ของข้อความประกาศ

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

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

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

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

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));

// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));

}
  • ประกาศการติดตั้งใช้งานแบบคงที่ด้วยแท็ก <receiver> ในไฟล์ AndroidManifest.xml ซึ่งจะช่วยให้แอปพลิเคชันได้รับ Intent แบบออกอากาศเมื่อไม่ได้ทำงานอยู่ และช่วยให้แอปพลิเคชันเผยแพร่เนื้อหาได้
<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>
      <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การโทรเมื่อได้รับIntent นี้
  • com.google.android.engage.action.PUBLISH_CONTINUATION เราขอแนะนำให้เริ่มการโทร publishContinuationCluster เมื่อได้รับ Intent นี้

เวิร์กโฟลว์การผสานรวม

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

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

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

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

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

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

หลังจากการผสานรวมนี้เสร็จสมบูรณ์แล้ว ขั้นตอนถัดไปมีดังนี้

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