เพิ่มการมีส่วนร่วมในแอปด้วยการเข้าถึงผู้ใช้ในที่ที่ผู้ใช้อยู่ ผสานรวม Engage SDK เพื่อแสดงคำแนะนำที่ปรับเปลี่ยนตามการใช้งานของผู้ใช้และเนื้อหาที่ต่อเนื่องโดยตรงต่อ ผู้ใช้ในแพลตฟอร์มต่างๆ ในอุปกรณ์ เช่น คอลเล็กชัน, Entertainment Space และ Google Play Store การผสานรวมจะเพิ่มขนาด APK โดยเฉลี่ยไม่เกิน 50 KB (บีบอัด) และใช้เวลาของนักพัฒนาแอปประมาณ 1 สัปดาห์สำหรับแอปส่วนใหญ่ ดูข้อมูลเพิ่มเติมได้ที่เว็บไซต์ ธุรกิจ
คู่มือนี้มีวิธีการสำหรับพาร์ทเนอร์นักพัฒนาแอปในการส่งเนื้อหาเสียง (เพลง พอดแคสต์ หนังสือเสียง วิทยุสด) ไปยังแพลตฟอร์มเนื้อหา Engage
การรองรับหมวดหมู่และแพลตฟอร์ม
การมีสิทธิ์แสดง Engage SDK จะขึ้นอยู่กับหมวดหมู่เนื้อหาของแอป ใช้ตารางต่อไปนี้เพื่อพิจารณาการมีสิทธิ์ของคุณสำหรับแพลตฟอร์มที่เฉพาะเจาะจง
| สถานะ | หมวดหมู่เนื้อหาหรือกรณีการใช้งาน | พื้นผิวที่รองรับ |
|---|---|---|
|
รองรับ (มีสิทธิ์ในทุกแพลตฟอร์ม) |
|
|
|
รองรับบางส่วน (มีสิทธิ์ในบางแพลตฟอร์ม) |
|
|
| สิ่งที่ทำไม่ได้ |
|
ทักษะ Android
ดูใน GitHubผสานรวม Engage SDK
android skills add engage-sdk-integrationรายละเอียดการผสานรวม
คำศัพท์
การผสานรวมนี้มีคลัสเตอร์ 3 ประเภท ได้แก่ การแนะนำ การดูต่อ และวิดีโอแนะนำ
คลัสเตอร์การแนะนำจะแสดงคำแนะนำเนื้อหาที่ปรับเปลี่ยนในแบบของคุณเพื่ออ่าน จากพาร์ทเนอร์นักพัฒนาแอปแต่ละราย
คำแนะนำจะมีโครงสร้างดังนี้
คลัสเตอร์คำแนะนำ: มุมมอง UI ที่มีกลุ่มคำแนะนำจากพาร์ทเนอร์นักพัฒนาแอปรายเดียวกัน
รูปที่ 1 UI ของ Entertainment Space ที่แสดง กลุ่มคำแนะนำจากพาร์ทเนอร์รายเดียว เอนทิตี: ออบเจ็กต์ที่แสดงรายการเดียวในคลัสเตอร์ เอนทิตี อาจเป็นเพลย์ลิสต์ หนังสือเสียง พอดแคสต์ และอื่นๆ ดูรายการประเภทเอนทิตีที่รองรับได้ในส่วนระบุข้อมูลเอนทิตี
รูปที่ 2 UI ของ Entertainment Space แสดงเอนทิตีเดียวภายในคลัสเตอร์คำแนะนำของพาร์ทเนอร์รายเดียว
คลัสเตอร์ความต่อเนื่องจะแสดงเนื้อหาเสียงที่ผู้ใช้มีส่วนร่วมด้วยล่าสุดจากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการจัดกลุ่ม UI เดียว นักพัฒนาแอป พาร์ทเนอร์แต่ละรายจะได้รับอนุญาตให้เผยแพร่เอนทิตีได้สูงสุด 10 รายการใน คลัสเตอร์การดูต่อ
รูปที่ 3 UI ของ Entertainment Space แสดง คลัสเตอร์ความต่อเนื่องที่มีคำแนะนำที่ดูค้างไว้จากพาร์ทเนอร์หลายราย (ปัจจุบันมองเห็นคำแนะนำเพียงรายการเดียว) คลัสเตอร์แนะนำจะแสดงสินค้าที่เลือกจากพาร์ทเนอร์นักพัฒนาแอปหลายราย ในการจัดกลุ่ม UI เดียว โดยจะมีคลัสเตอร์ "แนะนำ" เพียงคลัสเตอร์เดียว ซึ่งจะแสดงที่ด้านบนของ UI พร้อมตำแหน่งที่มีลำดับความสำคัญเหนือคลัสเตอร์คำแนะนำทั้งหมด พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะได้รับอนุญาตให้ ออกอากาศเอนทิตีได้สูงสุด 10 รายการในคลัสเตอร์ "แนะนำ"
รูปที่ 4 UI ของ Entertainment Space แสดงคลัสเตอร์เด่นที่มีคำแนะนำจากพาร์ทเนอร์หลายราย (ปัจจุบันมองเห็นคำแนะนำได้เพียงรายการเดียว)
สิ่งที่ต้องเตรียมก่อนดำเนินการ
ระดับ API ขั้นต่ำ: 19
เพิ่มไลบรารี com.google.android.engage:engage-core ลงในแอปโดยทำดังนี้
dependencies {
// Make sure you also include that repository in your project's build.gradle file.
implementation 'com.google.android.engage:engage-core:1.6.0'
}
สรุป
การออกแบบนี้อิงตามการใช้งานบริการ ที่เชื่อมโยง
ข้อมูลที่ไคลเอ็นต์เผยแพร่ได้จะขึ้นอยู่กับขีดจํากัดต่อไปนี้สําหรับคลัสเตอร์ประเภทต่างๆ
| ประเภทคลัสเตอร์ | ขีดจำกัดของคลัสเตอร์ | ขีดจำกัดสูงสุดของเอนทิตีในคลัสเตอร์ |
|---|---|---|
| คลัสเตอร์คำแนะนำ | ไม่เกิน 7 | สูงสุด 50 รายการ |
| คลัสเตอร์ความต่อเนื่อง | สูงสุด 1 รายการ | สูงสุด 20 |
| คลัสเตอร์แนะนำ | สูงสุด 1 รายการ | สูงสุด 20 |
ขั้นตอนที่ 1: ระบุข้อมูลนิติบุคคล
SDK ได้กำหนดเอนทิตีต่างๆ เพื่อแสดงรายการแต่ละประเภท เรารองรับ เอนทิตีต่อไปนี้สำหรับหมวดหมู่ฟัง
MusicAlbumEntityMusicArtistEntityMusicTrackEntityMusicVideoEntityPlaylistEntityPodcastSeriesEntityPodcastEpisodeEntityLiveRadioStationEntityAudiobookEntity
แผนภูมิด้านล่างแสดงแอตทริบิวต์และข้อกำหนดที่มีสำหรับแต่ละประเภท
MusicAlbumEntity
ออบเจ็กต์ MusicAlbumEntity แสดงถึงอัลบั้มเพลง (เช่น Midnights
ของ Taylor Swift)
| แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
|---|---|---|
| ชื่อ | ต้องระบุ | ชื่ออัลบั้มเพลง |
| รูปภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ ข้อกำหนดเกี่ยวกับรูปภาพ |
| URI ของหน้าข้อมูล | ต้องระบุ |
Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับอัลบั้มเพลง หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| ศิลปิน | ต้องระบุ | รายชื่อศิลปินในอัลบั้มเพลง |
| URI การเล่น | ไม่บังคับ |
Deep Link ที่เริ่มเล่นอัลบั้มในแอปผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ |
| จำนวนเพลง | ไม่บังคับ | จำนวนเพลงในอัลบั้มเพลง |
| ประเภท | ไม่บังคับ | รายการแนวเพลงในอัลบั้มเพลง |
| รูปแบบอัลบั้ม | ไม่บังคับ |
อัลบั้ม (รวมถึง LP และ Double LP) EP SINGLE มิกซ์เทป |
| ค่ายเพลง | ไม่บังคับ | รายชื่อค่ายเพลงที่เกี่ยวข้องกับอัลบั้ม |
| ดาวน์โหลดในอุปกรณ์ | ไม่บังคับ | บูลีนที่ระบุว่าดาวน์โหลดอัลบั้มเพลงในอุปกรณ์หรือไม่ |
| อาจไม่เหมาะสม | ไม่บังคับ |
บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่ รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E" |
| วันที่เผยแพร่ | ไม่บังคับ | วันที่เผยแพร่ของอัลบั้มในหน่วยมิลลิวินาทีของ Epoch |
| ระยะเวลา | ไม่บังคับ | ระยะเวลาของอัลบั้มในหน่วยมิลลิวินาที |
| เวลาในการมีส่วนร่วมครั้งล่าสุด | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ ในหน่วยมิลลิวินาทีตั้งแต่ Epoch |
| เปอร์เซ็นต์ความคืบหน้า | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง จำนวนเต็มระหว่าง 0 ถึง 100 |
MusicArtistEntity
ออบเจ็กต์ MusicArtistEntity แสดงถึงศิลปินเพลง (เช่น Adele)
| แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
|---|---|---|
| ชื่อ | ต้องระบุ | ชื่อศิลปินเพลง |
| รูปภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ ข้อกำหนดเกี่ยวกับรูปภาพ |
| URI ของหน้าข้อมูล | ต้องระบุ |
Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับศิลปิน เพลง หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| URI การเล่น | ไม่บังคับ |
Deep Link ที่เริ่มเล่นเพลงของศิลปินในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ |
| เวลาในการมีส่วนร่วมครั้งล่าสุด | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ ในหน่วยมิลลิวินาทีตั้งแต่ Epoch |
MusicTrackEntity
ออบเจ็กต์ MusicTrackEntity แสดงแทร็กเพลง (เช่น Yellow ของ Coldplay)
| แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
|---|---|---|
| ชื่อ | ต้องระบุ | ชื่อแทร็กเพลง |
| รูปภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ ข้อกำหนดเกี่ยวกับรูปภาพ |
| URI การเล่น | ต้องระบุ |
Deep Link ที่เริ่มเล่นแทร็กเพลงในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| ศิลปิน | ต้องระบุ | รายชื่อศิลปินสำหรับแทร็กเพลง |
| URI ของหน้าข้อมูล | ไม่บังคับ |
Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับแทร็กเพลง หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ |
| ระยะเวลา | ไม่บังคับ | ระยะเวลาของแทร็กในหน่วยมิลลิวินาที |
| อัลบั้ม | ไม่บังคับ | ชื่ออัลบั้มที่เพลงอยู่ |
| ดาวน์โหลดในอุปกรณ์ | ไม่บังคับ | บูลีนที่ระบุว่ามีการดาวน์โหลดแทร็กเพลงในอุปกรณ์หรือไม่ |
| อาจไม่เหมาะสม | ไม่บังคับ |
บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่ รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E" |
| เวลาในการมีส่วนร่วมครั้งล่าสุด | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ ในหน่วยมิลลิวินาทีตั้งแต่ Epoch |
| เปอร์เซ็นต์ความคืบหน้า | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง จำนวนเต็มระหว่าง 0 ถึง 100 |
MusicVideoEntity
ออบเจ็กต์ MusicVideoEntity แสดงถึงมิวสิกวิดีโอ (เช่น
The Weeknd - Take My Breath (มิวสิกวิดีโออย่างเป็นทางการ))
| แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
|---|---|---|
| ชื่อ | ต้องระบุ | ชื่อของมิวสิกวิดีโอ |
| รูปภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ ข้อกำหนดเกี่ยวกับรูปภาพ |
| URI การเล่น | ต้องระบุ |
Deep Link ที่เริ่มเล่นมิวสิกวิดีโอในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| URI ของหน้าข้อมูล | ไม่บังคับ |
Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับมิวสิกวิดีโอ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| ระยะเวลา | ไม่บังคับ | ระยะเวลาของวิดีโอเป็นมิลลิวินาที |
| ยอดดู | ไม่บังคับ | จำนวนยอดดูวิดีโอในรูปแบบข้อความอิสระ |
| ศิลปิน | ไม่บังคับ | รายชื่อศิลปินของมิวสิกวิดีโอ |
| การจัดประเภทเนื้อหา | ไม่บังคับ | รายการการจัดประเภทเนื้อหาของแทร็ก |
| คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ |
| ดาวน์โหลดในอุปกรณ์ | ไม่บังคับ | บูลีนที่ระบุว่ามิวสิกวิดีโอได้รับการดาวน์โหลดลงในอุปกรณ์หรือไม่ |
| อาจไม่เหมาะสม | ไม่บังคับ |
บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่ รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E" |
| เวลาในการมีส่วนร่วมครั้งล่าสุด | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ ในหน่วยมิลลิวินาทีตั้งแต่ Epoch |
| เปอร์เซ็นต์ความคืบหน้า | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง จำนวนเต็มระหว่าง 0 ถึง 100 |
PlaylistEntity
ออบเจ็กต์ PlaylistEntity แสดงถึงเพลย์ลิสต์เพลง (เช่น เพลย์ลิสต์เพลงยอดนิยม 10 อันดับของสหรัฐอเมริกา)
| แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
|---|---|---|
| ชื่อ | ต้องระบุ | ชื่อเพลย์ลิสต์ |
| รูปภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ ข้อกำหนดเกี่ยวกับรูปภาพ |
| URI การเล่น | ต้องระบุ |
Deep Link ที่เริ่มเล่นเพลย์ลิสต์เพลงในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| URI ของหน้าข้อมูล | ไม่บังคับ |
Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับเพลย์ลิสต์เพลง หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| ระยะเวลา | ไม่บังคับ | ระยะเวลาของเพลย์ลิสต์ในหน่วยมิลลิวินาที |
| จำนวนเพลง | ไม่บังคับ | จำนวนเพลงในเพลย์ลิสต์เพลง |
| คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ |
| ดาวน์โหลดในอุปกรณ์ | ไม่บังคับ | บูลีนที่ระบุว่ามีการดาวน์โหลดเพลย์ลิสต์ในอุปกรณ์หรือไม่ |
| อาจไม่เหมาะสม | ไม่บังคับ |
บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่ รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E" |
| เวลาในการมีส่วนร่วมครั้งล่าสุด | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ ในหน่วยมิลลิวินาทีตั้งแต่ Epoch |
| เปอร์เซ็นต์ความคืบหน้า | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง จำนวนเต็มระหว่าง 0 ถึง 100 |
PodcastSeriesEntity
ออบเจ็กต์ PodcastSeriesEntity แสดงถึงพอดแคสต์ซีรีส์ (เช่น This
American Life)
| แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
|---|---|---|
| ชื่อ | ต้องระบุ | ชื่อของซีรีส์พอดแคสต์ |
| รูปภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ ข้อกำหนดเกี่ยวกับรูปภาพ |
| URI ของหน้าข้อมูล | ต้องระบุ |
Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับพอดแคสต์ ซีรีส์ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| URI การเล่น | ไม่บังคับ |
Deep Link ที่เริ่มเล่นพอดแคสต์ซีรีส์ในแอปผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| จำนวนตอน | ไม่บังคับ | จำนวนตอนในซีรีส์พอดแคสต์ |
| ชื่อผลงาน | ไม่บังคับ | ชื่อผลงานของซีรีส์พอดแคสต์ |
| โฮสต์ | ไม่บังคับ | รายชื่อผู้ดำเนินรายการของพอดแคสต์ซีรีส์ |
| ประเภท | ไม่บังคับ | รายการประเภทของซีรีส์พอดแคสต์ |
| ดาวน์โหลดลงในอุปกรณ์แล้ว | ไม่บังคับ | บูลีนที่ระบุว่ามีการดาวน์โหลดพอดแคสต์ในอุปกรณ์หรือไม่ |
| คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ |
| อาจไม่เหมาะสม | ไม่บังคับ |
บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่ รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E" |
| เวลาในการมีส่วนร่วมครั้งล่าสุด | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ ในหน่วยมิลลิวินาทีตั้งแต่ Epoch |
PodcastEpisodeEntity
ออบเจ็กต์ PodcastEpisodeEntity แสดงถึงพอดแคสต์ซีรีส์ (เช่น
Spark Bird ตอนที่ 754: This American Life)
| แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
|---|---|---|
| ชื่อ | ต้องระบุ | ชื่อตอนของพอดแคสต์ |
| รูปภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ ข้อกำหนดเกี่ยวกับรูปภาพ |
| URI การเล่น | ต้องระบุ |
Deep Link ที่เริ่มเล่นตอนของพอดแคสต์ในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| ชื่อซีรีส์พอดแคสต์ | ต้องระบุ | ชื่อซีรีส์พอดแคสต์ที่ตอนนั้นๆ สังกัดอยู่ |
| ระยะเวลา | ต้องระบุ | ระยะเวลาของตอนพอดแคสต์ในหน่วยมิลลิวินาที |
| วันที่เผยแพร่ | ต้องระบุ | วันที่เผยแพร่พอดแคสต์ (ในหน่วยมิลลิวินาทีตั้งแต่ Epoch) |
| URI ของหน้าข้อมูล | ไม่บังคับ |
Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับตอนของพอดแคสต์ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| ชื่อผลงาน | ไม่บังคับ | ชื่อผลงานของซีรีส์พอดแคสต์ |
| ดัชนีตอน | ไม่บังคับ | ดัชนีของตอนในซีรีส์ (ดัชนีแรกคือ 1) |
| โฮสต์ | ไม่บังคับ | รายชื่อผู้ดำเนินรายการในตอนของพอดแคสต์ |
| ประเภท | ไม่บังคับ | รายการประเภทของตอนพอดแคสต์ |
| ดาวน์โหลดลงในอุปกรณ์แล้ว | ไม่บังคับ | บูลีนที่ระบุว่ามีการดาวน์โหลดตอนของพอดแคสต์ในอุปกรณ์หรือไม่ |
| คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ |
| พอดคาสต์วิดีโอ | ไม่บังคับ | บูลีนที่ระบุว่าตอนของพอดแคสต์มีเนื้อหาวิดีโอหรือไม่ |
| อาจไม่เหมาะสม | ไม่บังคับ |
บูลีนที่ระบุว่าเนื้อหานั้นโจ่งแจ้งหรือไม่ รายการที่มีเนื้อหาโจ่งแจ้งหรือมีคำเตือนสำหรับผู้ปกครอง ควรตั้งค่าเป็น TRUE รายการที่ไม่เหมาะสมอย่างโจ่งแจ้งจะปรากฏพร้อมแท็ก "E" |
| ประเภทฟังต่อ | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง TYPE_CONTINUE - เล่นต่อในรายการเสียงที่ยังไม่จบ TYPE_NEXT - Continue on a new one of a series. TYPE_NEW - เพิ่งเปิดตัว |
| เวลาในการมีส่วนร่วมครั้งล่าสุด | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ ในหน่วยมิลลิวินาทีตั้งแต่ Epoch |
| เปอร์เซ็นต์ความคืบหน้า | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง จำนวนเต็มระหว่าง 0 ถึง 100 |
LiveRadioStationEntity
ออบเจ็กต์ LiveRadioStationEntity แสดงถึงสถานีวิทยุที่กำลังออกอากาศ (เช่น 98.1 The Breeze)
| แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
|---|---|---|
| ชื่อ | ต้องระบุ | ชื่อสถานีวิทยุที่กำลังออกอากาศสด |
| รูปภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ ข้อกำหนดเกี่ยวกับรูปภาพ |
| URI การเล่น | ต้องระบุ |
Deep Link ที่เริ่มเล่นสถานีวิทยุในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| URI ของหน้าข้อมูล | ไม่บังคับ |
Deep Link ไปยังแอปผู้ให้บริการเพื่อดูรายละเอียดเกี่ยวกับสถานีวิทยุ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| ความถี่ | ไม่บังคับ | ความถี่ที่สถานีวิทยุออกอากาศ (เช่น "98.1 FM") |
| ชื่อรายการ | ไม่บังคับ | รายการที่กำลังเล่นอยู่ในสถานีวิทยุ |
| โฮสต์ | ไม่บังคับ | รายชื่อผู้จัดรายการของสถานีวิทยุ |
| คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ |
| เวลาในการมีส่วนร่วมครั้งล่าสุด | ไม่บังคับ |
แนะนำสำหรับรายการในคลัสเตอร์ความต่อเนื่อง อาจใช้เพื่อ การจัดอันดับ ในหน่วยมิลลิวินาทีตั้งแต่ Epoch |
AudiobookEntity
ออบเจ็กต์ AudiobookEntity แสดงถึงหนังสือเสียง (เช่น หนังสือเสียงของ Becoming โดย Michelle Obama)
| แอตทริบิวต์ | ข้อกำหนด | หมายเหตุ |
|---|---|---|
| ชื่อ | ต้องระบุ | |
| รูปภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ข้อกำหนด ของรูปภาพ |
| ผู้เขียน | ต้องระบุ | ต้องระบุชื่อผู้แต่งอย่างน้อย 1 ชื่อ |
| URI ของลิงก์การดำเนินการ | ต้องระบุ |
Deep Link ไปยังแอปผู้ให้บริการสำหรับหนังสือเสียง หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
| ผู้บรรยาย | ไม่บังคับ | ต้องระบุชื่อผู้บรรยายอย่างน้อย 1 คน |
| วันที่เผยแพร่ | ไม่บังคับ | ในรูปแบบมิลลิวินาทีของ Epoch หากมี |
| คำอธิบาย | ไม่บังคับ | ต้องมีความยาวไม่เกิน 200 อักขระหากระบุ |
| ราคา | ไม่บังคับ | ข้อความอิสระ |
| ระยะเวลา | ไม่บังคับ | ต้องเป็นค่าบวกหากระบุ |
| ประเภท | ไม่บังคับ | รายการประเภทที่เชื่อมโยงกับหนังสือ |
| ชื่อหนังสือชุด | ไม่บังคับ | ชื่อชุดหนังสือที่หนังสือเสียงเป็นของชุดนั้น (เช่น Harry Potter |
| ดัชนีหน่วยของซีรีส์ | ไม่บังคับ | ดัชนีของหนังสือเสียงในชุด โดย 1 คือหนังสือเสียงเล่มแรก ในชุด เช่น หากแฮร์รี่ พอตเตอร์กับนักโทษแห่ง อัซคาบันเป็นหนังสือเล่มที่ 3 ในชุด คุณควรตั้งค่าเป็น 3 |
| ดำเนินการต่อกับประเภทสมุดภาพ | ไม่บังคับ |
TYPE_CONTINUE - อ่านหนังสือที่ยังอ่านไม่จบต่อ TYPE_NEXT - Continue on a new one of a series. TYPE_NEW - เพิ่งเปิดตัว |
| เวลาในการมีส่วนร่วมครั้งล่าสุด | ต้องมีแบบมีเงื่อนไข | ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์ความต่อเนื่อง ในหน่วยมิลลิวินาทีตั้งแต่ Epoch |
| เปอร์เซ็นต์ความคืบหน้า | ต้องมีแบบมีเงื่อนไข |
ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์ความต่อเนื่อง หนังสือเสียงที่เพิ่งซื้อใหม่จะอยู่ในคลัสเตอร์อ่านต่อ ได้ ค่าต้องมากกว่า 0 และน้อยกว่า 100 |
| DisplayTimeWindow - ตั้งค่ากรอบเวลาสำหรับเนื้อหา ที่จะแสดงบนแพลตฟอร์ม | ||
| การประทับเวลาเริ่มต้น | ไม่บังคับ |
การประทับเวลา Epoch หลังจากที่ควรแสดงเนื้อหาบน แพลตฟอร์ม หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม ในหน่วยมิลลิวินาทีตั้งแต่ Epoch |
| การประทับเวลาสิ้นสุด | ไม่บังคับ |
การประทับเวลา Epoch หลังจากที่ระบบจะไม่แสดงเนื้อหาบน แพลตฟอร์มอีกต่อไป หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม ในหน่วยมิลลิวินาทีตั้งแต่ Epoch |
ข้อกำหนดเกี่ยวกับรูปภาพ
ข้อกำหนดที่จำเป็นสำหรับชิ้นงานรูปภาพแสดงอยู่ด้านล่าง
| สัดส่วนภาพ | ข้อกำหนด | พิกเซลขั้นต่ำ | พิกเซลที่แนะนํา |
|---|---|---|---|
| สี่เหลี่ยมจัตุรัส (1x1) | ต้องระบุ | 300x300 | 1200x1200 |
| แนวนอน (1.91x1) | ไม่บังคับ | 600x314 | 1200x628 |
| แนวตั้ง (4x5) | ไม่บังคับ | 480x600 | 960x1200 |
รูปแบบไฟล์
PNG, JPG, GIF แบบภาพนิ่ง, WebP
ขนาดไฟล์สูงสุด
5120 KB
คำแนะนำเพิ่มเติม
- พื้นที่ปลอดภัยของรูปภาพ: ใส่เนื้อหาสำคัญไว้ตรงกลาง 80% ของ รูปภาพ
ตัวอย่าง
MusicAlbumEntity musicAlbumEntity =
new MusicAlbumEntity.Builder()
.setName(NAME)
.addPosterImage(new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(960)
.setImageWidthInPixel(408)
.build())
.setPlayBackUri("https://play.google/album/play")
.setInfoPageUri("https://play.google/album/info")
.setDescription("A description of this album.")
.addArtist("Artist")
.addGenre("Genre")
.addMusicLabel("Label")
.addContentRating("Rating")
.setSongsCount(960)
.setReleaseDateEpochMillis(1633032895L)
.setDurationMillis(1633L)
.build();
AudiobookEntity audiobookEntity =
new AudiobookEntity.Builder()
.setName("Becoming")
.addPosterImage(new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(960)
.setImageWidthInPixel(408)
.build())
.addAuthor("Michelle Obama")
.addNarrator("Michelle Obama")
.setActionLinkUri(
Uri.parse("https://play.google/audiobooks/1"))
.setDurationMillis(16335L)
.setPublishDateEpochMillis(1633032895L)
.setDescription("An intimate, powerful, and inspiring memoir")
.setPrice("$16.95")
.addGenre("biography")
.build();
ขั้นตอนที่ 2: ระบุข้อมูลคลัสเตอร์
ขอแนะนำให้เรียกใช้การเผยแพร่เนื้อหาในเบื้องหลัง (เช่น ใช้ WorkManager) และกำหนดเวลาเป็นประจำหรือตามเหตุการณ์ (เช่น ทุกครั้งที่ ผู้ใช้เปิดแอป หรือเมื่อผู้ใช้เพิ่งเพิ่มสินค้าลงในรถเข็น)
AppEngagePublishClient มีหน้าที่เผยแพร่คลัสเตอร์ API ต่อไปนี้พร้อมใช้งานในไคลเอ็นต์
isServiceAvailablepublishRecommendationClusterspublishFeaturedClusterpublishContinuationClusterpublishUserAccountManagementRequestupdatePublishStatusdeleteRecommendationsClustersdeleteFeaturedClusterdeleteContinuationClusterdeleteUserManagementClusterdeleteClusters
isServiceAvailable
API นี้ใช้เพื่อตรวจสอบว่าบริการพร้อมใช้งานสำหรับการผสานรวมหรือไม่ และ สามารถแสดงเนื้อหาในอุปกรณ์ได้หรือไม่
สําหรับ Engage SDK v1.6.0 ขึ้นไป (แนะนํา)
ทักษะ Android
ดูใน GitHubการผสานรวม Engage SDK
android skills add engage-sdk-integrationUse the engage-sdk-integration skill to use Engage SDK 1.6.0 and refactor isServiceAvailable to pass ServiceAvailabilityRequest for publishing all cluster types.คุณสามารถตรวจสอบความพร้อมให้บริการสำหรับคลัสเตอร์ทุกประเภทที่ต้องการ
เผยแพร่ isServiceAvailable API ยอมรับออบเจ็กต์คำขอ
ServiceAvailabilityRequest ซึ่งมีประเภทคลัสเตอร์ที่ต้องตรวจสอบความพร้อมให้บริการ
คุณดูClusterTypeค่า enum
ที่จำเป็นสำหรับ ServiceAvailabilityRequest ได้จากตารางต่อไปนี้
| ประเภทคลัสเตอร์ | ค่าคงที่ของประเภทคลัสเตอร์ | ค่าจำนวนเต็ม |
|---|---|---|
| ไม่ทราบ | TYPE_UNKNOWN |
0 |
| คลัสเตอร์คำแนะนำ | TYPE_RECOMMENDATION |
1 |
| คลัสเตอร์แนะนำ | TYPE_FEATURED |
2 |
| คลัสเตอร์ความต่อเนื่อง | TYPE_CONTINUATION |
3 |
| คลัสเตอร์การจัดการผู้ใช้ | TYPE_ENGAGEMENT |
8 |
| คลัสเตอร์การสมัครใช้บริการ | TYPE_SUBSCRIPTION |
12 |
Kotlin
val request = ServiceAvailabilityRequest.Builder()
.addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
.addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
.build()
client.isServiceAvailable(request).addOnCompleteListener { task ->
if (task.isSuccessful) {
val availabilityMap = task.result
if (availabilityMap[ClusterType.TYPE_CONTINUATION] == true) {
// Proceed with publishing continuation content
}
if (availabilityMap[ClusterType.TYPE_RECOMMENDATION] == true) {
// Proceed with publishing recommendation content
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
Java
ServiceAvailabilityRequest request =
new ServiceAvailabilityRequest.Builder()
.addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
.addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
.build();
client.isServiceAvailable(request).addOnCompleteListener(task -> {
if (task.isSuccessful()) {
Map<Integer, Boolean> availabilityMap = task.getResult();
if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_CONTINUATION))) {
// Proceed with publishing continuation content
}
if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_RECOMMENDATION))) {
// Proceed with publishing recommendation content
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
ฟีเจอร์ความพร้อมให้บริการแบบมีเงื่อนไข
แอปที่ผสานรวมบางแอปขอการกำหนดค่าพิเศษที่เปิดและปิดใช้ บริการ Engage เป็นระยะๆ เพื่อลดต้นทุนการแสดงโฆษณา แม้ว่ากลยุทธ์การนำเข้าเนื้อหาเป็นระยะๆ นี้จะทำได้ แต่ก็ส่งผลเสียต่อผู้ใช้และผลิตภัณฑ์ เนื่องจากระบบจะไม่แสดงเนื้อหาที่ไม่มีอัปเดต และบางแพลตฟอร์มจะไม่แสดงเนื้อหาเลย
ตั้งแต่เวอร์ชัน 1.6.0 เป็นต้นไป Engage SDK จะอนุญาตให้ตรวจสอบความพร้อมใช้งานสำหรับคลัสเตอร์ประเภทใดประเภทหนึ่ง ซึ่งจะช่วยให้มีความยืดหยุ่นมากขึ้น ดังนั้นหากแอปพลิเคชันหนึ่งๆ ใช้กลยุทธ์คอนเทนต์แบบไม่ต่อเนื่อง คลัสเตอร์บางประเภทจะใช้กลยุทธ์แบบไม่ต่อเนื่องนั้นได้ ในขณะที่คลัสเตอร์ประเภทอื่นๆ จะเปิดใช้เสมอ (เช่น คลัสเตอร์ความต่อเนื่อง)
หากไม่ควรเปิดใช้บริการ Engage "อย่างต่อเนื่อง" ในอุปกรณ์ที่รองรับทั้งหมดไม่ว่าด้วยเหตุผลใดก็ตาม และมีการกำหนดค่าสำหรับการส่งผ่านข้อมูลเป็นระยะๆ สำหรับอุปกรณ์ชุดใดก็ตาม การเผยแพร่คลัสเตอร์ต่อเนื่องทั้งหมด (เช่น ฟังต่อ) จะยังคงเปิดใช้โดยการกำหนดค่าเริ่มต้น และคลัสเตอร์ประเภทอื่นๆ จะเปิดใช้และปิดใช้เป็นระยะๆ หากการส่งผ่านข้อมูลเป็นระยะๆ มีผลกับคุณ แต่การกำหนดค่าเริ่มต้นนี้ไม่เหมาะกับความต้องการของคุณ โปรดติดต่อ engage-developers@google.com
สำหรับ SDK เวอร์ชันก่อน v1.6.0 (เลิกใช้งานแล้ว)
Kotlin
client.isServiceAvailable.addOnCompleteListener { task ->
if (task.isSuccessful) {
// Handle IPC call success
if(task.result) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
Java
client.isServiceAvailable().addOnCompleteListener(task - > {
if (task.isSuccessful()) {
// Handle success
if(task.getResult()) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
publishRecommendationClusters
API นี้ใช้เพื่อเผยแพร่รายการออบเจ็กต์ RecommendationCluster
Kotlin
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Trending music")
.build())
.build())
Java
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
new RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Trending music")
.build())
.build());
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายใน ธุรกรรมเดียว
- ระบบจะนำข้อมูล
RecommendationClusterที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์คำแนะนำที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
publishFeaturedCluster
API นี้ใช้เพื่อเผยแพร่รายการออบเจ็กต์ FeaturedCluster
Kotlin
client.publishFeaturedCluster(
PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
FeaturedCluster.Builder()
...
.build())
.build())
Java
client.publishFeaturedCluster(
new PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
new FeaturedCluster.Builder()
...
.build())
.build());
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายใน ธุรกรรมเดียว
- ระบบจะนำข้อมูล
FeaturedClusterที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์แนะนำที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
publishContinuationCluster
API นี้ใช้เพื่อเผยแพร่ออบเจ็กต์ ContinuationCluster
Kotlin
client.publishContinuationCluster(
PublishContinuationClusterRequest.Builder()
.setContinuationCluster(
ContinuationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build())
Java
client.publishContinuationCluster(
PublishContinuationClusterRequest.Builder()
.setContinuationCluster(
ContinuationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.build())
.build())
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายใน ธุรกรรมเดียว
- ระบบจะนำข้อมูล
ContinuationClusterที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์ Continuation ที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
publishUserAccountManagementRequest
API นี้ใช้เพื่อเผยแพร่การ์ดลงชื่อเข้าใช้ การดำเนินการลงชื่อเข้าใช้นำผู้ใช้ไปยังหน้าลงชื่อเข้าใช้ของแอปเพื่อให้แอปเผยแพร่เนื้อหาได้ (หรือแสดงเนื้อหาที่ปรับเปลี่ยนในแบบของคุณมากขึ้น)
ข้อมูลเมตาต่อไปนี้เป็นส่วนหนึ่งของการ์ดลงชื่อเข้าใช้
| แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย |
|---|---|---|
| URI การดำเนินการ | ต้องระบุ | Deep Link ไปยังการดำเนินการ (เช่น ไปยังหน้าลงชื่อเข้าใช้แอป) |
| รูปภาพ | ไม่บังคับ - หากไม่ได้ระบุ ต้องระบุชื่อ |
รูปภาพที่แสดงในการ์ด รูปภาพที่มีสัดส่วนภาพ 16x9 และมีความละเอียด 1264x712 |
| ชื่อ | ไม่บังคับ - หากไม่ได้ระบุ ต้องระบุรูปภาพ | ชื่อบนบัตร |
| ข้อความเกี่ยวกับการดำเนินการ | ไม่บังคับ | ข้อความที่แสดงใน CTA (เช่น ลงชื่อเข้าใช้) |
| ชื่อรอง | ไม่บังคับ | คำบรรยายแทนเสียงที่ไม่บังคับในการ์ด |
Kotlin
var SIGN_IN_CARD_ENTITY =
SignInCardEntity.Builder()
.addPosterImage(
Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build()
client.publishUserAccountManagementRequest(
PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
Java
SignInCardEntity SIGN_IN_CARD_ENTITY =
new SignInCardEntity.Builder()
.addPosterImage(
new Image.Builder()
.setImageUri(Uri.parse("http://www.x.com/image.png"))
.setImageHeightInPixel(500)
.setImageWidthInPixel(500)
.build())
.setActionText("Sign In")
.setActionUri(Uri.parse("http://xx.com/signin"))
.build();
client.publishUserAccountManagementRequest(
new PublishUserAccountManagementRequest.Builder()
.setSignInCardEntity(SIGN_IN_CARD_ENTITY)
.build());
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายใน ธุรกรรมเดียว
- ระบบจะนำข้อมูล
UserAccountManagementClusterที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์ UserAccountManagementCluster ที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
updatePublishStatus
หากไม่มีการเผยแพร่คลัสเตอร์ใดเลยเนื่องด้วยเหตุผลทางธุรกิจภายใน เราขอแนะนำให้อัปเดตสถานะการเผยแพร่โดยใช้ API updatePublishStatus ซึ่งเป็นสิ่งสำคัญเนื่องจากเหตุผลต่อไปนี้
- การระบุสถานะในทุกสถานการณ์ แม้ว่าเนื้อหาจะเผยแพร่แล้ว (STATUS == PUBLISHED) ก็มีความสำคัญต่อการสร้างแดชบอร์ดที่ใช้สถานะที่ชัดเจนนี้เพื่อสื่อถึงสถานะและเมตริกอื่นๆ ของการผสานรวม
- หากไม่มีการเผยแพร่เนื้อหา แต่สถานะการผสานรวมไม่ขาดตอน (STATUS == NOT_PUBLISHED) Google จะหลีกเลี่ยงการทริกเกอร์การแจ้งเตือนในแดชบอร์ด สุขภาพของแอปได้ โดยจะยืนยันว่าเนื้อหาไม่ได้เผยแพร่เนื่องจากสถานการณ์ที่คาดการณ์ไว้จากมุมมองของผู้ให้บริการ
- ซึ่งจะช่วยให้นักพัฒนาแอปได้รับข้อมูลเชิงลึกเกี่ยวกับเวลาที่เผยแพร่ข้อมูลเทียบกับเวลาที่ไม่ได้เผยแพร่
- Google อาจใช้รหัสสถานะเพื่อกระตุ้นให้ผู้ใช้ดำเนินการบางอย่างในแอป เพื่อให้ผู้ใช้เห็นเนื้อหาของแอปหรือแก้ไขปัญหา
รหัสสถานะการเผยแพร่ที่มีสิทธิ์มีดังนี้
// Content is published
AppEngagePublishStatusCode.PUBLISHED,
// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,
// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,
// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,
// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,
// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,
// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,
// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,
// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER
หากเนื้อหาไม่ได้รับการเผยแพร่เนื่องจากผู้ใช้ไม่ได้เข้าสู่ระบบ Google ขอแนะนำให้เผยแพร่การ์ดลงชื่อเข้าใช้ หากผู้ให้บริการไม่สามารถเผยแพร่การ์ดลงชื่อเข้าใช้ได้ไม่ว่าด้วยเหตุผลใดก็ตาม เราขอแนะนำให้เรียกใช้ API updatePublishStatus ด้วยรหัสสถานะ NOT_PUBLISHED_REQUIRES_SIGN_IN
Kotlin
client.updatePublishStatus(
PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build())
Java
client.updatePublishStatus(
new PublishStatusRequest.Builder()
.setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
.build());
deleteRecommendationClusters
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์คำแนะนำ
Kotlin
client.deleteRecommendationClusters()
Java
client.deleteRecommendationClusters();
เมื่อได้รับคำขอ บริการจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์คำแนะนำ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้
deleteFeaturedCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์แนะนำ
Kotlin
client.deleteFeaturedCluster()
Java
client.deleteFeaturedCluster();
เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์แนะนำ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้
deleteContinuationCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์การต่อเนื่อง
Kotlin
client.deleteContinuationCluster()
Java
client.deleteContinuationCluster();
เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์การดำเนินการต่อ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้
deleteUserManagementCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ UserAccountManagement
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ UserAccountManagement ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
deleteClusters
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ประเภทที่กำหนด
Kotlin
client.deleteClusters(
DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build())
Java
client.deleteClusters(
new DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build());
เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ทั้งหมดที่ตรงกับประเภทคลัสเตอร์ที่ระบุ ไคลเอ็นต์เลือกส่งประเภทคลัสเตอร์อย่างน้อย 1 ประเภทได้ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
การจัดการข้อผิดพลาด
เราขอแนะนำอย่างยิ่งให้รับฟังผลลัพธ์ของงานจาก API การเผยแพร่ เพื่อให้สามารถดำเนินการติดตามผลเพื่อกู้คืนและส่งงานที่สำเร็จอีกครั้ง
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(...)
.build())
.addOnCompleteListener(
task -> {
if (task.isSuccessful()) {
// do something
} else {
Exception exception = task.getException();
if (exception instanceof AppEngageException) {
@AppEngageErrorCode
int errorCode = ((AppEngageException) exception).getErrorCode();
if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
// do something
}
}
}
});
ระบบจะแสดงข้อผิดพลาดเป็น AppEngageException โดยมีสาเหตุเป็นรหัสข้อผิดพลาด
| รหัสข้อผิดพลาด | ชื่อข้อผิดพลาด | หมายเหตุ |
|---|---|---|
1 |
SERVICE_NOT_FOUND |
บริการไม่พร้อมใช้งานในอุปกรณ์ที่ระบุ |
2 |
SERVICE_NOT_AVAILABLE |
บริการพร้อมใช้งานในอุปกรณ์ที่ระบุ แต่ไม่พร้อมใช้งาน ในเวลาที่โทร (เช่น ปิดใช้บริการอย่างชัดเจน) |
3 |
SERVICE_CALL_EXECUTION_FAILURE |
การดำเนินการงานล้มเหลวเนื่องจากปัญหาการแยกเธรด ในกรณีนี้ คุณสามารถ ลองอีกครั้งได้ |
4 |
SERVICE_CALL_PERMISSION_DENIED |
ผู้โทรไม่ได้รับอนุญาตให้โทรไปยังบริการ |
5 |
SERVICE_CALL_INVALID_ARGUMENT |
คำขอมีข้อมูลที่ไม่ถูกต้อง (เช่น มีคลัสเตอร์มากกว่าจำนวนที่อนุญาต) |
6 |
SERVICE_CALL_INTERNAL |
เกิดข้อผิดพลาดในฝั่งบริการ |
7 |
SERVICE_CALL_RESOURCE_EXHAUSTED |
การเรียกใช้บริการบ่อยเกินไป |
ขั้นตอนที่ 3: จัดการ Intent การออกอากาศ
นอกจากการเรียก API การเผยแพร่เนื้อหาผ่านงานแล้ว คุณยังต้องตั้งค่า
BroadcastReceiver เพื่อรับคำขอ
การเผยแพร่เนื้อหาด้วย
เป้าหมายของ Broadcast Intent คือการเปิดใช้งานแอปอีกครั้งและการบังคับซิงค์ข้อมูลเป็นหลัก Broadcast Intent ไม่ได้ออกแบบมาให้ส่งบ่อยมาก ระบบจะทริกเกอร์ ก็ต่อเมื่อบริการ Engage ระบุว่าเนื้อหาอาจล้าสมัย (เช่น มีอายุ 1 สัปดาห์) วิธีนี้จะช่วยให้มั่นใจได้มากขึ้นว่าผู้ใช้จะได้รับประสบการณ์การใช้งานเนื้อหาใหม่ๆ แม้ว่าจะไม่ได้เรียกใช้แอปพลิเคชันเป็นเวลานานก็ตาม
ต้องตั้งค่า BroadcastReceiver ด้วย 2 วิธีต่อไปนี้
ลงทะเบียนอินสแตนซ์ของคลาส
BroadcastReceiverแบบไดนามิกโดยใช้Context.registerReceiver()ซึ่งจะช่วยให้แอปพลิเคชันที่ยังคงทำงานอยู่ในหน่วยความจำสามารถสื่อสารได้
Kotlin
class AppEngageBroadcastReceiver : BroadcastReceiver(){
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}
fun registerBroadcastReceivers(context: Context){
var context = context
context = context.applicationContext
// Register Recommendation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Featured Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Continuation Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
}
Java
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received
// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}
public static void registerBroadcastReceivers(Context context) {
context = context.getApplicationContext();
// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
}
ประกาศการติดตั้งใช้งานแบบคงที่ด้วยแท็ก
<receiver>ในไฟล์AndroidManifest.xmlซึ่งจะช่วยให้แอปพลิเคชันรับ Broadcast Intent ได้เมื่อไม่ได้ทำงาน และยังช่วยให้แอปพลิเคชันเผยแพร่ เนื้อหาได้ด้วย
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
</intent-filter>
</receiver>
</application>
บริการจะส่ง Intent ต่อไปนี้
com.google.android.engage.action.PUBLISH_RECOMMENDATIONขอแนะนำให้เริ่มการโทรpublishRecommendationClustersเมื่อได้รับ Intent นี้com.google.android.engage.action.PUBLISH_FEATUREDขอแนะนำให้เริ่มการโทรpublishFeaturedClusterเมื่อได้รับเจตนานี้com.google.android.engage.action.PUBLISH_CONTINUATIONขอแนะนำให้เริ่มpublishContinuationClusterโทรเมื่อได้รับ เจตนานี้
ขั้นตอนการทำงานของการผสานรวม
ดูคำแนะนำแบบทีละขั้นตอนเกี่ยวกับการยืนยันการผสานรวมหลังจากเสร็จสมบูรณ์ได้ที่ เวิร์กโฟลว์การผสานรวมสำหรับนักพัฒนาแอปของ Engage
คำถามที่พบบ่อย
ดูคำถามที่พบบ่อยเกี่ยวกับ Engage SDK
รายชื่อติดต่อ
โปรดติดต่อ
engage-developers@google.com หากมีข้อสงสัย
ในระหว่างกระบวนการผสานรวม ทีมของเราจะตอบกลับโดยเร็วที่สุด
ขั้นตอนถัดไป
หลังจากผสานรวมเสร็จแล้ว ขั้นตอนถัดไปที่คุณต้องทำมีดังนี้
- ส่งอีเมลไปที่
engage-developers@google.comและแนบ APK ที่ผสานรวมแล้วซึ่งพร้อมให้ Google ทดสอบ - Google จะดำเนินการยืนยันและตรวจสอบภายในเพื่อให้แน่ใจว่าการผสานรวมทำงานได้ตามที่คาดไว้ หากต้องมีการเปลี่ยนแปลง Google จะติดต่อคุณ พร้อมรายละเอียดที่จำเป็น
- เมื่อการทดสอบเสร็จสมบูรณ์และไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ Google จะติดต่อคุณเพื่อ แจ้งให้ทราบว่าคุณเริ่มเผยแพร่ APK ที่อัปเดตและผสานรวมไปยัง Play Store ได้แล้ว
- หลังจาก Google ยืนยันว่า APK ที่อัปเดตแล้วได้รับการเผยแพร่ใน Play Store แล้ว ระบบจะเผยแพร่คลัสเตอร์แนะนำ แนะนำ และเล่นต่อ และผู้ใช้จะมองเห็นคลัสเตอร์ดังกล่าว