Google กำลังสร้างแพลตฟอร์มในอุปกรณ์เพื่อจัดระเบียบ แอปแยกตามประเภทธุรกิจ และมอบประสบการณ์ดื่มด่ำกับประสบการณ์ใหม่ สำหรับการบริโภคเนื้อหาแอปที่ปรับเปลี่ยนในแบบของคุณ และการค้นพบ ประสบการณ์แบบเต็มหน้าจอนี้มอบ โอกาสในการแสดงเนื้อหาจำนวนมากที่ดีที่สุด ในช่องทางเฉพาะภายนอก ของแอปของตนได้อย่างไร
คู่มือนี้มีวิธีการสำหรับพาร์ทเนอร์นักพัฒนาแอปในการผสานรวมเสียง เนื้อหา โดยใช้ Engage SDK เพื่อป้อนข้อมูลทั้งพื้นที่ใหม่นี้ แพลตฟอร์ม Google ที่มีอยู่
รายละเอียดการผสานรวม
คำศัพท์
การผสานรวมนี้มีคลัสเตอร์ 3 ประเภท ได้แก่ คำแนะนำ, ความต่อเนื่องและแนะนำ
คลัสเตอร์คำแนะนำแสดงคำแนะนำที่ปรับเปลี่ยนในแบบของคุณสำหรับเนื้อหาน่าอ่าน จากพาร์ทเนอร์นักพัฒนาแต่ละราย
คำแนะนำจะมีโครงสร้างต่อไปนี้
คลัสเตอร์คำแนะนำ: มุมมอง UI ที่มีกลุ่มของ คำแนะนำจากพาร์ทเนอร์นักพัฒนาซอฟต์แวร์รายเดียวกัน
เอนทิตี: ออบเจ็กต์ที่แทนรายการเดียวในคลัสเตอร์ เอนทิตี อาจเป็นเพลย์ลิสต์ หนังสือเสียง พอดแคสต์ และอื่นๆ โปรดดูช่องให้ ข้อมูลเอนทิตีสำหรับรายการของเอนทิตีที่สนับสนุน ประเภทต่างๆ
คลัสเตอร์ความต่อเนื่องจะแสดงเนื้อหาเสียงที่ผู้ใช้มีส่วนร่วมล่าสุด จากพาร์ทเนอร์นักพัฒนาซอฟต์แวร์หลายราย ในกลุ่ม UI เดียว นักพัฒนาแอปแต่ละราย พาร์ทเนอร์จะได้รับอนุญาตให้เผยแพร่รายการได้สูงสุด 10 รายการในช่อง คลัสเตอร์แบบต่อเนื่อง
คลัสเตอร์แนะนำจะแสดงตัวเลือกสินค้าจากหลายรายการ พาร์ทเนอร์นักพัฒนาซอฟต์แวร์ในกลุ่ม UI เดียว จะมีป้ายแนะนำ ซึ่งจะแสดงใกล้กับด้านบนของ UI ที่มีลำดับความสำคัญ ตำแหน่งด้านบนคลัสเตอร์คำแนะนำทั้งหมด พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะต้อง อนุญาตให้เผยแพร่เอนทิตีในคลัสเตอร์ "แนะนำ" ได้สูงสุด 10 รายการ
งานก่อนเริ่มเวิร์กช็อป
ระดับ 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'
}
สรุป
การออกแบบนี้มาจากการใช้ ขอบเขต service [บริการ]
ข้อมูลที่ไคลเอ็นต์เผยแพร่ได้จะขึ้นอยู่กับขีดจำกัดต่อไปนี้สำหรับ ประเภทคลัสเตอร์
ประเภทคลัสเตอร์ | ขีดจำกัดของคลัสเตอร์ | ขีดจำกัดเอนทิตีสูงสุดในคลัสเตอร์ |
---|---|---|
คลัสเตอร์คำแนะนำ | สูงสุด 5 รายการ | สูงสุด 50 รายการ |
คลัสเตอร์ความต่อเนื่อง | มากที่สุด 1 | สูงสุด 10 รายการ |
คลัสเตอร์แนะนำ | มากที่สุด 1 | สูงสุด 10 รายการ |
ขั้นตอนที่ 1: ระบุข้อมูลเอนทิตี
SDK ได้กำหนดเอนทิตีที่แตกต่างกันเพื่อแสดงรายการแต่ละประเภท เราสนับสนุน เอนทิตีต่อไปนี้สำหรับหมวดหมู่ "การฟัง"
MusicAlbumEntity
MusicArtistEntity
MusicTrackEntity
MusicVideoEntity
PlaylistEntity
PodcastSeriesEntity
PodcastEpisodeEntity
LiveRadioStationEntity
AudiobookEntity
แผนภูมิด้านล่างแสดงแอตทริบิวต์และข้อกำหนดสำหรับแต่ละประเภท
MusicAlbumEntity
ออบเจ็กต์ MusicAlbumEntity
แสดงอัลบั้มเพลง (เช่น Midnights
โดย Taylor Swift)
แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
---|---|---|
ชื่อ | ต้องระบุ | ชื่ออัลบั้มเพลง |
ภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป โปรดดู ข้อกำหนดเกี่ยวกับรูปภาพสำหรับแนวทาง |
URI หน้าข้อมูล | ต้องระบุ |
ลิงก์ในรายละเอียดที่ไปยังแอปผู้ให้บริการสำหรับรายละเอียดเกี่ยวกับอัลบั้มเพลง หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
ศิลปิน | ต้องระบุ | รายชื่อศิลปินในอัลบั้มเพลง |
URI การเล่น | ไม่บังคับ |
Deep Link ที่เริ่มเล่นอัลบั้มในแอป provider หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระ หากระบุ |
จำนวนเพลง | ไม่บังคับ | จำนวนเพลงในอัลบั้มเพลง |
ประเภท | ไม่บังคับ | รายการแนวเพลงในอัลบั้มเพลง |
รูปแบบอัลบั้ม | ไม่บังคับ |
อัลบั้ม (รวม LP และ 2 LP) EP ซิงเกิล มิกซ์เทป |
ค่ายเพลง | ไม่บังคับ | รายชื่อค่ายเพลงที่เกี่ยวข้องกับอัลบั้ม |
ดาวน์โหลดในอุปกรณ์แล้ว | ไม่บังคับ | บูลีนที่ระบุว่าอัลบั้มเพลงจะดาวน์โหลดลงในอุปกรณ์หรือไม่ |
อาจไม่เหมาะสม | ไม่บังคับ |
บูลีนที่ระบุว่าเนื้อหาไม่เหมาะสมหรือไม่ รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำแนะนำจากผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่อาจไม่เหมาะสมจะปรากฏขึ้นพร้อมตัว "E" แท็ก |
วันที่เผยแพร่ | ไม่บังคับ | วันที่วางจำหน่ายอัลบั้มในรูปแบบ Epoch ในหน่วยมิลลิวินาที |
ระยะเวลา | ไม่บังคับ | ระยะเวลาของอัลบั้มเป็นมิลลิวินาที |
เวลาในการมีส่วนร่วมล่าสุด | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์แบบต่อเนื่อง อาจใช้สำหรับ การจัดอันดับ ใน Epoch มิลลิวินาที |
เปอร์เซ็นต์ความคืบหน้าเสร็จสมบูรณ์ | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์แบบต่อเนื่อง จำนวนเต็มระหว่าง 0 ถึง 100 |
MusicArtistEntity
ออบเจ็กต์ MusicArtistEntity
แสดงข้อมือดนตรี (เช่น Adele)
แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
---|---|---|
ชื่อ | ต้องระบุ | ชื่อศิลปินเพลง |
ภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป โปรดดู ข้อกำหนดเกี่ยวกับรูปภาพสำหรับแนวทาง |
URI หน้าข้อมูล | ต้องระบุ |
ลิงก์ในรายละเอียดที่ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับเพลง ของศิลปิน หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
URI การเล่น | ไม่บังคับ |
Deep Link ที่เริ่มเล่นเพลงของศิลปินในผู้ให้บริการ แอป หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระ หากระบุ |
เวลาในการมีส่วนร่วมล่าสุด | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์แบบต่อเนื่อง อาจใช้สำหรับ การจัดอันดับ ใน Epoch มิลลิวินาที |
MusicTrackEntity
ออบเจ็กต์ MusicTrackEntity
แสดงแทร็กเพลง (เช่น สีเหลือง ตาม
Coldplay)
แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
---|---|---|
ชื่อ | ต้องระบุ | ชื่อแทร็กเพลง |
ภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป โปรดดู ข้อกำหนดเกี่ยวกับรูปภาพสำหรับแนวทาง |
URI การเล่น | ต้องระบุ |
Deep Link ที่เริ่มเล่นแทร็กเพลงในผู้ให้บริการ แอป หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
URI หน้าข้อมูล | ไม่บังคับ |
ลิงก์ในรายละเอียดที่ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับแทร็กเพลง หมายเหตุ: คุณสามารถใช้ 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 สําหรับการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
ระยะเวลา | ไม่บังคับ | ระยะเวลาของเพลย์ลิสต์ในหน่วยมิลลิวินาที |
จำนวนเพลง | ไม่บังคับ | จำนวนเพลงในเพลย์ลิสต์เพลง |
คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระ หากระบุ |
ดาวน์โหลดในอุปกรณ์แล้ว | ไม่บังคับ | บูลีนที่ระบุว่าระบบจะดาวน์โหลดเพลย์ลิสต์ลงในอุปกรณ์หรือไม่ |
อาจไม่เหมาะสม | ไม่บังคับ |
บูลีนที่ระบุว่าเนื้อหาไม่เหมาะสมหรือไม่ รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำแนะนำจากผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่อาจไม่เหมาะสมจะปรากฏขึ้นพร้อมตัว "E" แท็ก |
เวลาในการมีส่วนร่วมล่าสุด | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์แบบต่อเนื่อง อาจใช้สำหรับ การจัดอันดับ ใน Epoch มิลลิวินาที |
เปอร์เซ็นต์ความคืบหน้าเสร็จสมบูรณ์ | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์แบบต่อเนื่อง จำนวนเต็มระหว่าง 0 ถึง 100 |
PodcastSeriesEntity
ออบเจ็กต์ PodcastSeriesEntity
แสดงชุดพอดแคสต์ (เช่น This
American Life)
แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
---|---|---|
ชื่อ | ต้องระบุ | ชื่อซีรีส์พอดแคสต์ |
ภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป โปรดดู ข้อกำหนดเกี่ยวกับรูปภาพสำหรับแนวทาง |
URI หน้าข้อมูล | ต้องระบุ |
Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับพอดแคสต์ ซีรีส์ หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
URI การเล่น | ไม่บังคับ |
Deep Link ที่เริ่มเล่นซีรีส์พอดแคสต์ในแอป provider หมายเหตุ: คุณสามารถใช้ 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 - ทำต่อในซีรีส์ใหม่ 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 ชื่อ |
ผู้บรรยาย | ต้องระบุ | ต้องระบุชื่อผู้บรรยายอย่างน้อย 1 คน |
URI ลิงก์การดำเนินการ | ต้องระบุ |
Deep Link ที่ไปยังแอปผู้ให้บริการสำหรับหนังสือเสียง หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
วันที่เผยแพร่ | ไม่บังคับ | เป็นมิลลิวินาที (Epoch) หากระบุ |
คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระ หากระบุ |
ราคา | ไม่บังคับ | ข้อความอิสระ |
ระยะเวลา | ไม่บังคับ | ต้องเป็นค่าบวกหากมี |
ประเภท | ไม่บังคับ | รายการประเภทที่เกี่ยวข้องกับหนังสือ |
ชื่อหนังสือชุด | ไม่บังคับ | ชื่อซีรีส์ที่มีหนังสือเสียง (เช่น Harry Potter |
ดัชนีหน่วยของชุดหนังสือ | ไม่บังคับ | ดัชนีของหนังสือเสียงในชุด โดย 1 คือหนังสือเสียงเล่มแรก ในซีรีส์นี้ ตัวอย่างเช่น ถ้าแฮร์รี่ พอตเตอร์กับนักโทษของ Azkaban เป็นหนังสือเล่มที่ 3 ในชุดนี้ ควรตั้งไว้ที่ 3 แล้ว |
ประเภทหนังสือต่อ | ไม่บังคับ |
TYPE_CONTINUE - อ่านต่อในหนังสือที่ยังอ่านไม่จบ TYPE_NEXT - ทำต่อในซีรีส์ใหม่ TYPE_NEW - ออกใหม่ |
เวลาในการมีส่วนร่วมสุดท้าย | ต้องระบุแบบมีเงื่อนไข | ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์ Continuation ในหน่วย Epoch ในหน่วยมิลลิวินาที |
เปอร์เซ็นต์ความคืบหน้าเสร็จสมบูรณ์ | ต้องระบุแบบมีเงื่อนไข |
ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์ Continuation หนังสือเสียง *ที่เพิ่งได้มา* อาจเป็นส่วนหนึ่งของการอ่านต่อ คลัสเตอร์ ค่าต้องมากกว่า 0 และน้อยกว่า 100 |
DisplayTimeWindow - ตั้งค่ากรอบเวลาสำหรับเนื้อหา แสดงออกมาตรงหน้า | ||
การประทับเวลาเริ่มต้น | ไม่บังคับ |
การประทับเวลา Epoch ที่เนื้อหาควรแสดงใน แพลตฟอร์ม หากไม่ได้ตั้งค่า เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม ในหน่วย Epoch ในหน่วยมิลลิวินาที |
การประทับเวลาสิ้นสุด | ไม่บังคับ |
การประทับเวลา Epoch ที่เนื้อหาไม่แสดงอีกต่อไป บนพื้นผิว หากไม่ได้ตั้งค่า เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม ในหน่วย Epoch ในหน่วยมิลลิวินาที |
ข้อกำหนดเกี่ยวกับรูปภาพ
ข้อกำหนดที่จำเป็นสำหรับชิ้นงานรูปภาพมีดังต่อไปนี้
สัดส่วนภาพ | ข้อกำหนด | พิกเซลขั้นต่ำ | พิกเซลแนะนํา |
---|---|---|---|
สี่เหลี่ยมจัตุรัส (1x1) | ต้องระบุ | 300x300 | 1200x1200 |
แนวนอน (1.91x1) | ไม่บังคับ | 600x314 | 1200x628 |
แนวตั้ง (4x5) | ไม่บังคับ | 480x600 | 960x1200 |
รูปแบบไฟล์
PNG, JPG, GIF แบบภาพนิ่ง, WebP
ขนาดไฟล์สูงสุด
5,120 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 นี้ใช้เพื่อตรวจสอบว่าบริการพร้อมผสานรวมหรือไม่ และ สามารถนำเสนอเนื้อหาบนอุปกรณ์ได้ไหม
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
ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาแอปออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอไว้ในความต่อเนื่องที่อัปเดตแล้ว คลัสเตอร์
ในกรณีที่เกิดข้อผิดพลาด คำขอทั้งหมดจะถูกปฏิเสธและสถานะที่มีอยู่คือ บำรุง
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
หากไม่มีการเผยแพร่คลัสเตอร์ใดเลยด้วยเหตุผลทางธุรกิจภายใน เราขอแนะนำเป็นอย่างยิ่งให้อัปเดตสถานะการเผยแพร่โดยใช้ 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
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 นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ Continuation
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());
เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์ที่ตรงกับประเภทคลัสเตอร์ที่ระบุ ลูกค้าเลือกได้ว่าจะให้ผ่าน หลายๆ ประเภท ในกรณีที่เกิดข้อผิดพลาด คำขอทั้งหมดจะถูกปฏิเสธ สถานะเดิมจะยังคงอยู่
การจัดการข้อผิดพลาด
ขอแนะนำให้ฟังผลลัพธ์งานจาก 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
พร้อมระบุสาเหตุเป็น
รหัสข้อผิดพลาด
รหัสข้อผิดพลาด | โน้ต |
---|---|
SERVICE_NOT_FOUND |
บริการไม่พร้อมใช้งานในอุปกรณ์ที่ระบุ |
SERVICE_NOT_AVAILABLE |
บริการพร้อมใช้งานในอุปกรณ์ที่ระบุ แต่ไม่พร้อมใช้งาน ณ เวลาที่โทร (เช่น ปิดใช้งานอย่างชัดแจ้ง) |
SERVICE_CALL_EXECUTION_FAILURE |
การดําเนินงานล้มเหลวเนื่องจากปัญหาเกี่ยวกับการแยกชุดข้อความ ในกรณีนี้ ลองอีกครั้งได้ |
SERVICE_CALL_PERMISSION_DENIED |
ผู้โทรไม่ได้รับอนุญาตให้เรียกใช้บริการ |
SERVICE_CALL_INVALID_ARGUMENT |
คำขอนี้มีข้อมูลที่ไม่ถูกต้อง (ตัวอย่างเช่น มากกว่าที่อนุญาต จำนวนคลัสเตอร์) |
SERVICE_CALL_INTERNAL |
เกิดข้อผิดพลาดที่ฝั่งบริการ |
SERVICE_CALL_RESOURCE_EXHAUSTED |
มีการเรียกใช้บริการบ่อยเกินไป |
ขั้นตอนที่ 3: จัดการการออกอากาศ Intent
นอกจากการเผยแพร่การเรียก Content API ผ่านงานแล้ว
ที่จำเป็นต่อการตั้งค่า
BroadcastReceiver
เพื่อรับ
คำขอสำหรับการเผยแพร่เนื้อหา
เป้าหมายของการออกอากาศเพื่อการเผยแพร่นั้นหลักๆ แล้วคือการเปิดใช้แอปอีกครั้งและการบังคับให้ใช้ข้อมูล การซิงค์ ความตั้งใจในการออกอากาศไม่ได้ออกแบบมาให้ส่งบ่อยครั้ง แต่เป็นเพียง ทริกเกอร์เมื่อบริการ 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
วิธีนี้ช่วยให้แอปพลิเคชันสามารถรับการออกอากาศ เมื่อไม่ได้ทำงานอยู่ และอนุญาตให้แอปพลิเคชันสามารถเผยแพร่ เนื้อหานั้น
<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>
ความตั้งใจต่อไปนี้จะส่งโดย บริการ:
com.google.android.engage.action.PUBLISH_RECOMMENDATION
ขอแนะนำให้เริ่มการโทรpublishRecommendationClusters
เมื่อ ที่จะได้รับเจตนานี้com.google.android.engage.action.PUBLISH_FEATURED
ขอแนะนำให้เริ่มการโทรpublishFeaturedCluster
เมื่อรับสายนี้ Intentcom.google.android.engage.action.PUBLISH_CONTINUATION
ขอแนะนำให้เริ่มการโทรpublishContinuationCluster
เมื่อรับสาย ความตั้งใจนี้
เวิร์กโฟลว์การผสานรวม
ดูคำแนะนำทีละขั้นตอนเกี่ยวกับการยืนยันการผสานรวมหลังจากที่เสร็จสมบูรณ์ได้ที่ มีส่วนร่วมกับเวิร์กโฟลว์การผสานรวมของนักพัฒนาซอฟต์แวร์
คำถามที่พบบ่อย
ดูคำถามที่พบบ่อยเกี่ยวกับ Engage SDK สำหรับ คำถามที่พบบ่อย
รายชื่อติดต่อ
ข้อมูลติดต่อ Engage-developers@google.com หากมี คำถามใดๆ ระหว่างขั้นตอนการผสานรวม ทีมของเราจะตอบกลับโดยเร็วที่สุด เท่าที่จะเป็นไปได้
ขั้นตอนถัดไป
หลังจากผสานรวมเสร็จแล้ว ขั้นตอนถัดไปของคุณมีดังนี้
- ส่งอีเมลถึง Engage-developers@google.com และแนบ APK ที่ผสานรวมซึ่งพร้อมสำหรับการทดสอบโดย Google
- Google จะทำการตรวจสอบและตรวจสอบเป็นการภายในเพื่อให้แน่ใจว่า ทำงานตามที่คาดไว้ หากจำเป็นต้องทำการเปลี่ยนแปลง Google จะติดต่อคุณ พร้อมรายละเอียดที่จำเป็น
- เมื่อการทดสอบเสร็จสิ้นและไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ Google จะติดต่อคุณเพื่อ คุณสามารถเริ่มเผยแพร่ APK ที่อัปเดตและผสานรวมไปยัง Play Store
- หลังจากที่ Google ยืนยันว่า APK ที่อัปเดตแล้วของคุณได้รับการเผยแพร่ไปยัง Play Store, คำแนะนำ, เกมแนะนำ และความต่อเนื่อง คลัสเตอร์จะได้รับการเผยแพร่และแสดงต่อผู้ใช้