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 ได้กําหนดเอนทิตีต่างๆ เพื่อแสดงรายการแต่ละประเภท เรารองรับเอนทิตีต่อไปนี้สำหรับหมวดหมู่ฟัง
MusicAlbumEntity
MusicArtistEntity
MusicTrackEntity
MusicVideoEntity
PlaylistEntity
PodcastSeriesEntity
PodcastEpisodeEntity
LiveRadioStationEntity
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 นี้ใช้เพื่อตรวจสอบว่าบริการพร้อมสำหรับการผสานรวมหรือไม่ และเนื้อหาแสดงในอุปกรณ์ได้หรือไม่
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
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
client.publishFeaturedCluster( PublishFeaturedClusterRequest.Builder() .setFeaturedCluster( FeaturedCluster.Builder() ... .build()) .build())
client.publishFeaturedCluster( new PublishFeaturedClusterRequest.Builder() .setFeaturedCluster( new FeaturedCluster.Builder() ... .build()) .build());
เมื่อบริการได้รับคําขอแล้ว ระบบจะดําเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
FeaturedCluster
ที่มีอยู่ออกจากพาร์ทเนอร์นักพัฒนาแอป - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอไว้ในคลัสเตอร์แนะนําที่อัปเดตแล้ว
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
publishContinuationCluster
API นี้ใช้เพื่อเผยแพร่ออบเจ็กต์ ContinuationCluster
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 (เช่น ลงชื่อเข้าใช้) |
ชื่อรอง | ไม่บังคับ | คำบรรยายบนการ์ด (ไม่บังคับ) |
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
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 นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์คําแนะนํา
เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์คําแนะนํา ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
deleteFeaturedCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์แนะนํา
เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์แนะนำ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
deleteContinuationCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์การต่อเรื่อง
เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากกลุ่มการต่ออายุ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
deleteUserManagementCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ UserAccountManagement
เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์การจัดการบัญชีผู้ใช้ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
deleteClusters
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ประเภทหนึ่งๆ
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 แล้ว ระบบจะเผยแพร่คลัสเตอร์คำแนะนำ แนะนํา และการต่อเรื่องให้ผู้ใช้เห็น