Google กำลังสร้างแพลตฟอร์มในอุปกรณ์ที่จัดระเบียบแอปของผู้ใช้ตามประเภทธุรกิจ และมอบประสบการณ์การใช้งานเนื้อหาแอปที่ปรับเปลี่ยนในแบบของคุณและค้นพบเนื้อหาใหม่ๆ ประสบการณ์แบบเต็มหน้าจอนี้เปิดโอกาสให้พาร์ทเนอร์นักพัฒนาแอปได้แสดงเนื้อหาริชมีเดียที่ดีที่สุดในช่องทางเฉพาะนอกแอป คู่มือนี้มีวิธีการสำหรับพาร์ทเนอร์นักพัฒนาแอปในการผสานรวมเนื้อหาด้านสุขภาพและความแข็งแรงสมบูรณ์โดยใช้ Engage SDK เพื่อแสดงเนื้อหาในแพลตฟอร์มใหม่นี้
รายละเอียดการผสานรวม
คำศัพท์
การผสานรวมนี้ประกอบด้วยคลัสเตอร์ 3 ประเภท ได้แก่ คําแนะนํา แนะนํา และต่อเนื่อง
กลุ่มคําแนะนําจะแสดงคําแนะนําด้านสุขภาพและการออกกำลังกายที่ปรับเปลี่ยนในแบบของคุณจากพาร์ทเนอร์นักพัฒนาแอปแต่ละราย คำแนะนำเหล่านี้อาจปรับเปลี่ยนในแบบของคุณสำหรับผู้ใช้หรือเป็นแบบทั่วไป (เช่น การออกกำลังกายและสุขภาพที่มาแรง) ใช้แท็กเหล่านี้เพื่อแสดงบทความหรือบุคคลที่เกี่ยวข้องกับสุขภาพและการออกกำลังกาย
- คลัสเตอร์คําแนะนําอาจประกอบด้วย
ArticleEntity
,PersonEntity
หรือEventEntity
แต่ต้องไม่ผสมเอนทิตีประเภทต่างๆ
คําแนะนําของคุณควรมีโครงสร้างดังต่อไปนี้
คลัสเตอร์คําแนะนํา: มุมมอง UI ที่มีกลุ่มคําแนะนําจากพาร์ทเนอร์นักพัฒนาแอปรายเดียวกัน
เอนทิตี: ออบเจ็กต์ที่แสดงรายการเดียวในคลัสเตอร์ การผสานรวมนี้แสดงเอนทิตีบางอย่างที่จะแสดงโดยใช้กลุ่มคําแนะนํา ดังนี้
ArticleEntity: ArticleEntity แสดงถึงคําแนะนําสําหรับเนื้อหาที่เป็นข้อความที่เกี่ยวข้องกับสุขภาพและการออกกำลังกาย สามารถใช้กับบทความ บล็อกโพสต์ เนื้อหาการตลาด ตัวอย่างข่าว ฯลฯ
รูปที่ 1: UI ที่แสดง ArticleEntity รายการเดียวภายในคลัสเตอร์คําแนะนํา PersonEntity: PersonEntity แสดงถึงบุคคล คำแนะนำอาจเป็นการไฮไลต์โค้ชหรือบุคคลที่เกี่ยวข้องกับสุขภาพและการออกกำลังกาย เป็นต้น
รูปที่ 2: UI ที่แสดง PersonEntity รายการเดียวภายในกลุ่มคําแนะนํา EventEntity: EventEntity แสดงถึงเหตุการณ์ที่เกิดขึ้นในอนาคต เวลาเริ่มต้นของกิจกรรมเป็นข้อมูลสําคัญที่ต้องส่งให้ผู้ใช้ เอนทิตีนี้อาจใช้เพื่อแสดงกิจกรรมต่างๆ เช่น ค่ายบริจาคโลหิต เซสชันการฝึกอบรม ยิม หรือชั้นเรียนโยคะ ฯลฯ ที่เกี่ยวข้องกับสุขภาพและความแข็งแรงสมบูรณ์
รูปที่ 3: UI ที่แสดง EventEntity รายการเดียวภายในคลัสเตอร์คําแนะนํา
- คลัสเตอร์คําแนะนําอาจประกอบด้วย
กลุ่มการดําเนินการต่อจะแสดงเนื้อหาที่ผู้ใช้มีส่วนร่วมเมื่อเร็วๆ นี้จากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการรวมกลุ่ม UI เดียว พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะออกอากาศได้สูงสุด 10 รายการในกลุ่มคลัสเตอร์การต่ออายุ
เนื้อหาต่อสามารถมีโครงสร้างดังต่อไปนี้
ArticleEntity: ArticleEntity แสดงถึงคําแนะนําสําหรับเนื้อหาที่เป็นข้อความซึ่งเกี่ยวข้องกับสุขภาพและการออกกำลังกาย เอนทิตีนี้สามารถใช้เพื่อแสดงบทความข่าวที่ยังไม่จบหรือเนื้อหาอื่นๆ ที่ผู้ใช้ต้องการอ่านต่อจากที่ค้างไว้ ตัวอย่างเช่น ตัวอย่างข่าว ตัวอย่างบล็อกโพสต์เกี่ยวกับหัวข้อที่เกี่ยวข้องกับสุขภาพหรือการออกกำลังกาย
รูปที่ 6 UI แสดง ArticleEntity รายการเดียวภายในคลัสเตอร์การต่อเรื่อง EventReservationEntity: EventReservationEntity แสดงถึงการจองกิจกรรมและช่วยให้ผู้ใช้ติดตามการจองกิจกรรมออกกำลังกายและสุขภาพที่กําลังจะเกิดขึ้นหรือเกิดขึ้นอยู่ เช่น เซสชันการฝึกอบรม
รูปที่ 8 UI ที่แสดง EventReservationEntity รายการเดียวภายในคลัสเตอร์การดําเนินการต่อ
กลุ่มแนะนําจะแสดงรายการต่างๆ จากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการรวมกลุ่ม UI เดียว โดยจะมีคลัสเตอร์แนะนำกลุ่มเดียวที่แสดงอยู่ใกล้กับด้านบนของ UI ด้วยตำแหน่งที่มีลำดับความสำคัญเหนือคลัสเตอร์คำแนะนำทั้งหมด พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะออกอากาศได้สูงสุด 10 รายการในคลัสเตอร์แนะนํา
GenericFeaturedEntity: GenericFeaturedEntity แตกต่างจากรายการคำแนะนำตรงที่ควรใช้รายการแนะนำสำหรับเนื้อหายอดนิยมรายการเดียวจากนักพัฒนาแอป และควรแสดงเนื้อหาที่สำคัญที่สุดรายการเดียวที่จะน่าสนใจและเกี่ยวข้องกับผู้ใช้
รูปที่ 12: UI ที่แสดงรูปภาพหลักรูปเดียว การ์ด GenericFeaturedEntity ภายในคลัสเตอร์แนะนํา
งานก่อนเริ่มเวิร์กช็อป
ระดับ 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'
}
สรุป
การออกแบบนี้อิงตามการใช้งานบริการที่เชื่อมโยง
ข้อมูลที่จะเผยแพร่ได้จะขึ้นอยู่กับขีดจํากัดต่อไปนี้สําหรับคลัสเตอร์ประเภทต่างๆ
ประเภทคลัสเตอร์ | ขีดจํากัดของคลัสเตอร์ | ขีดจํากัดขั้นต่ำของเอนทิตีในคลัสเตอร์ | ขีดจํากัดสูงสุดของเอนทิตีในคลัสเตอร์ |
---|---|---|---|
กลุ่มคําแนะนํา | ไม่เกิน 7 | อย่างน้อย 1 รายการ | ไม่เกิน 50 (ArticleEntity , PersonEntity หรือ
EventEntity ) |
คลัสเตอร์การต่อเรื่อง | ไม่เกิน 1 | อย่างน้อย 1 รายการ | ไม่เกิน 20 (ArticleEntity หรือ
EventReservationEntity ) |
คลัสเตอร์แนะนำ | ไม่เกิน 1 | อย่างน้อย 1 รายการ | ไม่เกิน 20 (GenericFeaturedEntity ) |
ขั้นตอนที่ 1: ระบุข้อมูลเอนทิตี
SDK ได้กําหนดเอนทิตีต่างๆ เพื่อแสดงรายการแต่ละประเภท เรารองรับเอนทิตีต่อไปนี้สำหรับหมวดหมู่สุขภาพและการออกกำลังกาย
GenericFeaturedEntity
ArticleEntity
PersonEntity
EventEntity
EventReservationEntity
แผนภูมิด้านล่างแสดงแอตทริบิวต์และข้อกําหนดที่ใช้ได้สําหรับแต่ละประเภท
GenericFeaturedEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI การดำเนินการ | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link เพื่อการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
ภาพโปสเตอร์ | ต้องระบุ | เราจะแสดงรูปภาพเพียง 1 รูปเมื่อมีการระบุรูปภาพหลายรูป สัดส่วนภาพที่แนะนำคือ 16:9 หมายเหตุ: หากมีป้าย โปรดเว้นพื้นที่ปลอดภัย 24 dp ทั้งด้านบนและด้านล่างของรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
ชื่อ | ไม่บังคับ | ชื่อของเอนทิตี | ข้อความอิสระ ขนาดข้อความที่แนะนำ: 50 อักขระ |
คำอธิบาย | ไม่บังคับ | ข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: 180 อักขระ |
รายการคำบรรยาย | ไม่บังคับ | คำบรรยายได้สูงสุด 3 รายการ โดยคำบรรยายแต่ละรายการจะเป็นข้อความบรรทัดเดียว หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำสำหรับคำบรรยายแต่ละรายการ: สูงสุด 50 อักขระ |
ป้าย | ไม่บังคับ | ป้ายแต่ละใบจะเป็นข้อความอิสระ (ไม่เกิน 15 อักขระ) หรือรูปภาพขนาดเล็ก การจัดการ UX พิเศษบนรูปภาพ/วิดีโอ เช่น การวางป้ายซ้อนบนรูปภาพ
|
|
ป้าย - ข้อความ | ไม่บังคับ | ชื่อป้าย หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ |
ป้าย - รูปภาพ | ไม่บังคับ | รูปภาพขนาดเล็ก การจัดการ UX พิเศษ เช่น การวางซ้อนป้ายบนภาพ/วิดีโอขนาดย่อ หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
หมวดหมู่เนื้อหา | ไม่บังคับ | อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี | รายการ Enum ดูคำแนะนำได้ที่ส่วนหมวดหมู่เนื้อหา |
ArticleEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI การดำเนินการ | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link เพื่อการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
ชื่อ | ต้องระบุ | ชื่อของเอนทิตี | ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 50 อักขระ |
ภาพโปสเตอร์ | ไม่บังคับ | เราจะแสดงรูปภาพเพียง 1 รูปเมื่อมีการระบุรูปภาพหลายรูป สัดส่วนภาพที่แนะนำคือ 16:9 หมายเหตุ: ขอแนะนําอย่างยิ่งให้ใส่รูปภาพ หากมีป้าย โปรดเว้นพื้นที่ปลอดภัย 24 dp ทั้งด้านบนและด้านล่างของรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
แหล่งที่มา - ชื่อ | ไม่บังคับ | ชื่อผู้เขียน องค์กร หรือผู้รายงาน | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 25 อักขระ |
แหล่งที่มา - รูปภาพ | ไม่บังคับ | รูปภาพของแหล่งที่มา เช่น ผู้แต่ง องค์กร ผู้สื่อข่าว | ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
คำอธิบาย | ไม่บังคับ | ข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: 180 อักขระ |
รายการคำบรรยาย | ไม่บังคับ | คำบรรยายได้สูงสุด 3 รายการ โดยคำบรรยายแต่ละรายการจะเป็นข้อความบรรทัดเดียว หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำสำหรับคำบรรยายแต่ละรายการ: สูงสุด 50 อักขระ |
ป้าย | ไม่บังคับ | ป้ายแต่ละใบจะเป็นข้อความอิสระ (ไม่เกิน 15 อักขระ) หรือรูปภาพขนาดเล็ก การจัดการ UX พิเศษบนรูปภาพ/วิดีโอ เช่น การวางป้ายซ้อนบนรูปภาพ
|
|
ป้าย - ข้อความ | ไม่บังคับ | ชื่อป้าย หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ |
ป้าย - รูปภาพ | ไม่บังคับ | รูปภาพขนาดเล็ก การจัดการ UX พิเศษ เช่น การวางซ้อนป้ายบนภาพ/วิดีโอขนาดย่อ หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
เวลาเผยแพร่เนื้อหา | ไม่บังคับ | นี่คือการประทับเวลาตามยุคสมัยเป็นมิลลิวินาทีเมื่อมีการเผยแพร่ / อัปเดตเนื้อหาในแอป | การประทับเวลา Epoch เป็นมิลลิวินาที |
เวลาในการมีส่วนร่วมครั้งล่าสุด | ต้องระบุแบบมีเงื่อนไข | การประทับเวลาตามยุคสมัยเป็นมิลลิวินาทีเมื่อผู้ใช้โต้ตอบกับเอนทิตีนี้ครั้งล่าสุด หมายเหตุ: ต้องกรอกช่องนี้หากเอนทิตีนี้เป็นส่วนหนึ่งของคลัสเตอร์การต่อ |
การประทับเวลา Epoch เป็นมิลลิวินาที |
เปอร์เซ็นต์ความคืบหน้า | ต้องระบุแบบมีเงื่อนไข | เปอร์เซ็นต์ของเนื้อหาทั้งหมดที่ผู้ใช้บริโภคจนถึงปัจจุบัน หมายเหตุ: ต้องกรอกช่องนี้หากเอนทิตีนี้เป็นส่วนหนึ่งของคลัสเตอร์การต่อ |
ค่า int ระหว่าง 0 ถึง 100 |
หมวดหมู่เนื้อหา | ไม่บังคับ | อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี | รายการ Enum ดูคำแนะนำได้ที่ส่วนหมวดหมู่เนื้อหา |
PersonEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI การดำเนินการ | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link เพื่อการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
โปรไฟล์ - ชื่อ | ต้องระบุ | ชื่อหรือรหัสหรือแฮนเดิลของโปรไฟล์ เช่น "John Doe", "@TeamPixel" ฯลฯ | สตริง ขนาดข้อความที่แนะนำ: สูงสุด 50 อักขระ |
โปรไฟล์ - รูปโปรไฟล์ | ต้องระบุ |
รูปโปรไฟล์หรือรูปโปรไฟล์ของผู้ใช้ หมายเหตุ: ต้องเป็นรูปภาพสี่เหลี่ยมจัตุรัสขนาด 1:1 |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
โปรไฟล์ - ข้อความเพิ่มเติม | ไม่บังคับ | ข้อความอิสระ เช่น แฮนเดิลโปรไฟล์ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ |
โปรไฟล์ - รูปภาพเพิ่มเติม | ไม่บังคับ | รูปภาพขนาดเล็ก เช่น ป้ายยืนยัน | ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
รูปภาพส่วนหัว | ไม่บังคับ | เราจะแสดงรูปภาพเพียง 1 รูปเมื่อมีการระบุรูปภาพหลายรูป สัดส่วนภาพที่แนะนำคือ 16:9 หมายเหตุ: ขอแนะนําอย่างยิ่งให้ใส่รูปภาพ หากมีป้าย โปรดเว้นพื้นที่ปลอดภัย 24 dp ทั้งด้านบนและด้านล่างของรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
ความนิยม - จํานวน | ไม่บังคับ |
ระบุจำนวนผู้ติดตามหรือค่าความนิยม เช่น - "3.7 ล้านคน" หมายเหตุ: หากระบุทั้งจํานวน (Count) และค่าจํานวน (Count Value) ระบบจะใช้จํานวน |
สตริง ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระสำหรับจำนวน + ป้ายกำกับรวมกัน |
ความนิยม - ค่าการนับ | ไม่บังคับ | จำนวนผู้ติดตามหรือค่าความนิยม หมายเหตุ: ระบุค่าการนับหากแอปไม่ต้องการจัดการตรรกะเกี่ยวกับวิธีเพิ่มประสิทธิภาพตัวเลขจำนวนมากสำหรับขนาดการแสดงผลที่แตกต่างกัน หากระบุทั้ง Count และ Count Value ระบบจะใช้ Count |
ยาว |
ความนิยม - ป้ายกํากับ | ไม่บังคับ | ระบุป้ายกำกับความนิยม เช่น "ชอบ" | สตริง ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระสำหรับจำนวน + ป้ายกำกับรวมกัน |
ความนิยม - ภาพ | ไม่บังคับ |
ระบุวัตถุประสงค์ของการโต้ตอบ เช่น รูปภาพแสดงไอคอนชอบ อีโมจิ ระบุรูปภาพได้มากกว่า 1 รูป แต่รูปภาพบางรูปอาจไม่แสดงในอุปกรณ์บางรูปแบบ หมายเหตุ: ต้องเป็นรูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
การจัดประเภท - ค่าสูงสุด | ต้องมี | ค่าสูงสุดของรูปแบบการให้คะแนน ต้องระบุหากระบุค่าปัจจุบันของคะแนนด้วย |
ตัวเลขที่มากกว่าหรือเท่ากับ 0.0 |
การจัดประเภท - ค่าปัจจุบัน | ต้องมี | ค่าปัจจุบันของสเกลการให้คะแนน ต้องระบุหากระบุค่าสูงสุดของการจัดประเภทด้วย |
ตัวเลขที่มากกว่าหรือเท่ากับ 0.0 |
คะแนน - จำนวน | ไม่บังคับ | จํานวนการให้คะแนนสําหรับเอนทิตี หมายเหตุ: ระบุช่องนี้หากแอปของคุณควบคุมวิธีแสดงจำนวนต่อผู้ใช้ ใช้สตริงที่กระชับ เช่น หากจํานวนคือ 1,000,000 ให้ลองใช้ตัวย่อ เช่น 1 ล้าน เพื่อไม่ให้ระบบตัดจํานวนดังกล่าวในขนาดการแสดงผลที่เล็กลง |
สตริง |
การจัดประเภท - ค่าจำนวน | ไม่บังคับ | จํานวนการให้คะแนนสําหรับเอนทิตี หมายเหตุ: ระบุช่องนี้หากคุณไม่ได้จัดการตรรกะการแสดงตัวย่อด้วยตนเอง หากมีทั้งจํานวน (Count) และค่าจํานวน (Count Value) ระบบจะแสดงจํานวนต่อผู้ใช้ |
ยาว |
สถานที่ตั้ง - ประเทศ | ไม่บังคับ | ประเทศที่บุคคลนั้นอยู่หรือให้บริการ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - เมือง | ไม่บังคับ | เมืองที่บุคคลนั้นอาศัยอยู่หรือให้บริการ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - ที่อยู่สำหรับแสดง | ไม่บังคับ | ระบบจะแสดงที่อยู่ของบุคคลที่ให้บริการหรืออยู่ที่นั่นต่อผู้ใช้ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - ที่อยู่ | ไม่บังคับ | ที่อยู่ (หากมี) ของบุคคลที่อาศัยอยู่หรือให้บริการ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - รัฐ | ไม่บังคับ | รัฐ (หากมี) ที่บุคคลนั้นอาศัยอยู่หรือให้บริการ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - รหัสไปรษณีย์ | ไม่บังคับ | รหัสไปรษณีย์ (หากมี) ของสถานที่ที่บุคคลนั้นอาศัยอยู่หรือให้บริการ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - ย่าน | ไม่บังคับ | ย่านใกล้เคียง (หากมี) ที่บุคคลอาศัยอยู่หรือให้บริการ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
ป้าย | ไม่บังคับ |
ป้ายแต่ละใบจะเป็นข้อความอิสระ (ไม่เกิน 15 อักขระ) หรือรูปภาพขนาดเล็ก |
|
ป้าย - ข้อความ | ไม่บังคับ | ชื่อป้าย หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ |
ป้าย - รูปภาพ | ไม่บังคับ | รูปภาพขนาดเล็ก การจัดการ UX พิเศษ เช่น การวางซ้อนป้ายบนภาพ/วิดีโอขนาดย่อ หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
คำอธิบาย | ไม่บังคับ | ข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: 180 อักขระ |
รายการคำบรรยาย | ไม่บังคับ | คำบรรยายได้สูงสุด 3 รายการ โดยคำบรรยายแต่ละรายการจะเป็นข้อความบรรทัดเดียว หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำสำหรับคำบรรยายแต่ละรายการ: สูงสุด 50 อักขระ |
หมวดหมู่เนื้อหา | ไม่บังคับ | อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี | รายการ Enum ที่มีสิทธิ์
ดูคำแนะนำได้ที่ส่วนหมวดหมู่เนื้อหา |
EventEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI การดำเนินการ | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link เพื่อการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
ชื่อ | ต้องระบุ | ชื่อของเอนทิตี | สตริง ขนาดข้อความที่แนะนำ: สูงสุด 50 อักขระ |
เวลาเริ่มต้น | ต้องระบุ |
การประทับเวลาตามยุคสมัยเมื่อคาดว่ากิจกรรมจะเริ่ม หมายเหตุ: ค่านี้จะแสดงเป็นมิลลิวินาที |
การประทับเวลา Epoch เป็นมิลลิวินาที |
โหมดเหตุการณ์ | ต้องระบุ | ช่องสำหรับระบุว่ากิจกรรมจะเป็นแบบเสมือนจริง เข้าร่วมด้วยตนเอง หรือทั้ง 2 แบบ |
อาร์เรย์แบบจำกัด: VIRTUAL, IN_PERSON หรือ HYBRID |
ภาพโปสเตอร์ | ต้องระบุ | เราจะแสดงรูปภาพเพียง 1 รูปเมื่อมีการระบุรูปภาพหลายรูป สัดส่วนภาพที่แนะนำคือ 16:9 หมายเหตุ: ขอแนะนําอย่างยิ่งให้ใส่รูปภาพ หากมีป้าย โปรดเว้นพื้นที่ปลอดภัย 24 dp ทั้งด้านบนและด้านล่างของรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
สถานที่ตั้ง - ประเทศ | ต้องระบุแบบมีเงื่อนไข | ประเทศที่จัดกิจกรรม หมายเหตุ: จำเป็นต้องใช้สำหรับกิจกรรมที่เป็น IN_PERSON หรือ HYBRID |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - เมือง | ต้องระบุแบบมีเงื่อนไข | เมืองที่จัดกิจกรรม หมายเหตุ: จำเป็นต้องใช้สำหรับกิจกรรมที่เป็น IN_PERSON หรือ HYBRID |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - ที่อยู่สำหรับแสดง | ต้องระบุแบบมีเงื่อนไข | ที่อยู่หรือชื่อสถานที่ที่จะจัดขึ้นซึ่งควรแสดงต่อผู้ใช้ หมายเหตุ: จำเป็นต้องใช้สำหรับกิจกรรมที่เป็น IN_PERSON หรือ HYBRID |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - ที่อยู่ | ไม่บังคับ | ที่อยู่ (หากมี) ของสถานที่จัดการประชุม | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - รัฐ | ไม่บังคับ | รัฐหรือจังหวัด (หากมี) ที่จัดกิจกรรม | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - รหัสไปรษณีย์ | ไม่บังคับ | รหัสไปรษณีย์ (หากมี) ของสถานที่จัดกิจกรรม | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - ย่าน | ไม่บังคับ | ย่าน (หากมี) ที่จัดกิจกรรม | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
เวลาสิ้นสุด | ไม่บังคับ |
การประทับเวลาตามยุคสมัยเมื่อคาดว่ากิจกรรมจะสิ้นสุด หมายเหตุ: ค่านี้จะแสดงเป็นมิลลิวินาที |
การประทับเวลา Epoch เป็นมิลลิวินาที |
คำอธิบาย | ไม่บังคับ | ข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: 180 อักขระ |
รายการคำบรรยาย | ไม่บังคับ | คำบรรยายได้สูงสุด 3 รายการ โดยคำบรรยายแต่ละรายการจะเป็นข้อความบรรทัดเดียว หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำสำหรับคำบรรยายแต่ละรายการ: สูงสุด 50 อักขระ |
ป้าย | ไม่บังคับ |
ป้ายแต่ละใบจะเป็นข้อความอิสระ (ไม่เกิน 15 อักขระ) หรือรูปภาพขนาดเล็ก |
|
ป้าย - ข้อความ | ไม่บังคับ | ชื่อป้าย หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ |
ป้าย - รูปภาพ | ไม่บังคับ | รูปภาพขนาดเล็ก การจัดการ UX พิเศษ เช่น การวางซ้อนป้ายบนภาพ/วิดีโอขนาดย่อ หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
ราคา - CurrentPrice | ต้องระบุแบบมีเงื่อนไข |
ราคาปัจจุบันของตั๋ว/บัตรเข้าชมกิจกรรม ต้องระบุหากระบุราคาที่ขีดฆ่า |
ข้อความอิสระ |
ราคา - StrikethroughPrice | ไม่บังคับ | ราคาเดิมของตั๋ว/บัตรเข้างาน | ข้อความอิสระ |
ข้อความไฮไลต์ราคา | ไม่บังคับ | ข้อความไฮไลต์ราคาเพื่อแสดงโปรโมชัน กิจกรรม ส่วนลดสำหรับสมาชิก (หากมี) | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
หมวดหมู่เนื้อหา | ไม่บังคับ | อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี | รายการ Enum ที่มีสิทธิ์
ดูคำแนะนำได้ที่ส่วนหมวดหมู่เนื้อหา |
EventReservationEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI การดำเนินการ | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link เพื่อการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
ชื่อ | ต้องระบุ | ชื่อของเอนทิตี | สตริง ขนาดข้อความที่แนะนำ: สูงสุด 50 อักขระ |
เวลาเริ่มต้น | ต้องระบุ |
การประทับเวลาตามยุคสมัยเมื่อคาดว่ากิจกรรมจะเริ่ม หมายเหตุ: ค่านี้จะแสดงเป็นมิลลิวินาที |
การประทับเวลา Epoch เป็นมิลลิวินาที |
โหมดเหตุการณ์ | ต้องระบุ | ช่องสำหรับระบุว่ากิจกรรมจะเป็นแบบเสมือนจริง เข้าร่วมด้วยตนเอง หรือทั้ง 2 แบบ |
อาร์เรย์แบบจำกัด: VIRTUAL, IN_PERSON หรือ HYBRID |
สถานที่ตั้ง - ประเทศ | ต้องระบุแบบมีเงื่อนไข | ประเทศที่จัดกิจกรรม หมายเหตุ: จำเป็นต้องใช้สำหรับกิจกรรมที่เป็น IN_PERSON หรือ HYBRID |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - เมือง | ต้องระบุแบบมีเงื่อนไข | เมืองที่จัดกิจกรรม หมายเหตุ: จำเป็นต้องใช้สำหรับกิจกรรมที่เป็น IN_PERSON หรือ HYBRID |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - ที่อยู่สำหรับแสดง | ต้องระบุแบบมีเงื่อนไข | ที่อยู่หรือชื่อสถานที่ที่จะจัดขึ้นซึ่งควรแสดงต่อผู้ใช้ หมายเหตุ: จำเป็นต้องใช้สำหรับกิจกรรมที่เป็น IN_PERSON หรือ HYBRID |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - ที่อยู่ | ไม่บังคับ | ที่อยู่ (หากมี) ของสถานที่จัดการประชุม | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - รัฐ | ไม่บังคับ | รัฐหรือจังหวัด (หากมี) ที่จัดกิจกรรม | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - รหัสไปรษณีย์ | ไม่บังคับ | รหัสไปรษณีย์ (หากมี) ของสถานที่จัดกิจกรรม | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
สถานที่ตั้ง - ย่าน | ไม่บังคับ | ย่าน (หากมี) ที่จัดกิจกรรม | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ |
ภาพโปสเตอร์ | ไม่บังคับ | เราจะแสดงรูปภาพเพียง 1 รูปเมื่อมีการระบุรูปภาพหลายรูป สัดส่วนภาพที่แนะนำคือ 16:9 หมายเหตุ: ขอแนะนําอย่างยิ่งให้ใส่รูปภาพ หากมีป้าย โปรดเว้นพื้นที่ปลอดภัย 24 dp ทั้งด้านบนและด้านล่างของรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
เวลาสิ้นสุด | ไม่บังคับ |
การประทับเวลาตามยุคสมัยเมื่อคาดว่ากิจกรรมจะสิ้นสุด หมายเหตุ: ค่านี้จะแสดงเป็นมิลลิวินาที |
การประทับเวลา Epoch เป็นมิลลิวินาที |
ผู้ให้บริการ - ชื่อ | ไม่บังคับ |
ชื่อผู้ให้บริการ หมายเหตุ: ต้องมีข้อความหรือรูปภาพสำหรับผู้ให้บริการ |
ข้อความอิสระ เช่น ชื่อผู้จัด/ทัวร์ |
ผู้ให้บริการ - รูปภาพ | ไม่บังคับ |
โลโก้/รูปภาพของผู้ให้บริการ หมายเหตุ: ต้องมีข้อความหรือรูปภาพสำหรับผู้ให้บริการ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
คำอธิบาย | ไม่บังคับ | ข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: 180 อักขระ |
รายการคำบรรยาย | ไม่บังคับ | คำบรรยายได้สูงสุด 3 รายการ โดยคำบรรยายแต่ละรายการจะเป็นข้อความบรรทัดเดียว หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำสำหรับคำบรรยายแต่ละรายการ: สูงสุด 50 อักขระ |
ป้าย | ไม่บังคับ |
ป้ายแต่ละใบจะเป็นข้อความอิสระ (ไม่เกิน 15 อักขระ) หรือรูปภาพขนาดเล็ก |
|
ป้าย - ข้อความ | ไม่บังคับ | ชื่อป้าย หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ |
ป้าย - รูปภาพ | ไม่บังคับ | รูปภาพขนาดเล็ก การจัดการ UX พิเศษ เช่น การวางซ้อนป้ายบนภาพ/วิดีโอขนาดย่อ หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
รหัสการจอง | ไม่บังคับ | รหัสการจองสำหรับกิจกรรม | ข้อความอิสระ |
ราคา - CurrentPrice | ต้องระบุแบบมีเงื่อนไข |
ราคาปัจจุบันของตั๋ว/บัตรเข้าชมกิจกรรม ต้องระบุหากระบุราคาที่ขีดฆ่า |
ข้อความอิสระ |
ราคา - StrikethroughPrice | ไม่บังคับ | ราคาเดิมของตั๋ว/บัตรเข้างาน | ข้อความอิสระ |
ข้อความไฮไลต์ราคา | ไม่บังคับ | ข้อความไฮไลต์ราคาเพื่อแสดงโปรโมชัน กิจกรรม ส่วนลดสำหรับสมาชิก (หากมี) | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
การจัดประเภท - ค่าสูงสุด | ไม่บังคับ | ค่าสูงสุดของรูปแบบการให้คะแนน ต้องระบุหากระบุค่าปัจจุบันของคะแนนด้วย |
ตัวเลขที่มากกว่าหรือเท่ากับ 0.0 |
การจัดประเภท - ค่าปัจจุบัน | ไม่บังคับ | ค่าปัจจุบันของสเกลการให้คะแนน ต้องระบุหากระบุค่าสูงสุดของการจัดประเภทด้วย |
ตัวเลขที่มากกว่าหรือเท่ากับ 0.0 |
คะแนน - จำนวน | ไม่บังคับ | จํานวนการให้คะแนนสําหรับกิจกรรม หมายเหตุ: ระบุช่องนี้หากแอปต้องการควบคุมวิธีแสดงข้อมูลนี้ต่อผู้ใช้ โปรดระบุสตริงที่กระชับซึ่งแสดงต่อผู้ใช้ได้ เช่น หากจํานวนคือ 1,000,000 ให้พิจารณาใช้ตัวย่อ เช่น 1 ล้าน เพื่อไม่ให้ถูกตัดในขนาดการแสดงผลที่เล็กลง |
สตริง |
การจัดประเภท - ค่าจำนวน | ไม่บังคับ | จํานวนการให้คะแนนสําหรับกิจกรรม หมายเหตุ: ระบุช่องนี้หากไม่ต้องการจัดการตรรกะการแสดงตัวย่อด้วยตนเอง หากมีทั้ง Count และ Count Value เราจะใช้ Count เพื่อแสดงต่อผู้ใช้ |
ยาว |
หมวดหมู่เนื้อหา | ไม่บังคับ | อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี | รายการ Enum ที่มีสิทธิ์
ดูคำแนะนำได้ที่ส่วนหมวดหมู่เนื้อหา |
ข้อกำหนดเกี่ยวกับรูปภาพ
ข้อกำหนดที่จำเป็นสำหรับชิ้นงานรูปภาพแสดงอยู่ในตารางนี้
สัดส่วนภาพ | พิกเซลขั้นต่ำ | พิกเซลที่แนะนํา |
---|---|---|
สี่เหลี่ยมจัตุรัส (1x1) แนะนำ |
300x300 | 1200x1200 |
แนวนอน (1.91x1) | 600x314 | 1200x628 |
แนวตั้ง (4x5) | 480x600 | 960x1200 |
รูปภาพต้องโฮสต์ใน CDN สาธารณะเพื่อให้ Google เข้าถึงได้
รูปแบบไฟล์
PNG, JPG, GIF แบบภาพนิ่ง, WebP
ขนาดไฟล์สูงสุด
5120 KB
คําแนะนําเพิ่มเติม
- พื้นที่ปลอดภัยของรูปภาพ: ใส่เนื้อหาสำคัญไว้ตรงกลาง ซึ่งก็คือ 80% ของรูปภาพนั้น
- ใช้พื้นหลังโปร่งใสเพื่อให้รูปภาพแสดงได้อย่างถูกต้องในการตั้งค่าธีมมืดและธีมสว่าง
หมวดหมู่เนื้อหา
หมวดหมู่เนื้อหาช่วยให้แอปเผยแพร่เนื้อหาที่อยู่ในหมวดหมู่ต่างๆ ได้ ซึ่งจะเชื่อมโยงเนื้อหากับหมวดหมู่ที่กำหนดไว้ล่วงหน้าบางหมวดหมู่ ได้แก่
TYPE_EDUCATION
TYPE_SPORTS
TYPE_MOVIES_AND_TV_SHOWS
TYPE_BOOKS
TYPE_AUDIOBOOKS
TYPE_MUSIC
TYPE_DIGITAL_GAMES
TYPE_TRAVEL_AND_LOCAL
TYPE_HOME_AND_AUTO
TYPE_BUSINESS
TYPE_NEWS
TYPE_FOOD_AND_DRINK
TYPE_SHOPPING
TYPE_HEALTH_AND_FITENESS
TYPE_MEDICAL
TYPE_PARENTING
TYPE_DATING
รูปภาพต้องโฮสต์ใน CDN สาธารณะเพื่อให้ Google เข้าถึงได้
หลักเกณฑ์ในการใช้หมวดหมู่เนื้อหา
- เอนทิตีบางรายการ เช่น ArticleEntity และ GenericFeaturedEntity มีสิทธิ์ใช้หมวดหมู่เนื้อหาใดก็ได้ สำหรับเอนทิตีอื่นๆ เช่น EventEntity, EventReservationEntity, PersonEntity เฉพาะเอนทิตีย่อยของหมวดหมู่เหล่านี้เท่านั้นที่มีสิทธิ์ ตรวจสอบรายการหมวดหมู่ที่มีสิทธิ์สำหรับประเภทเอนทิตีก่อนป้อนข้อมูลรายการ
ใช้ประเภทเอนทิตีที่เฉพาะเจาะจงสำหรับหมวดหมู่เนื้อหาบางหมวดหมู่แทนการใช้เอนทิตีทั่วไปร่วมกับ ContentCategory
- TYPE_MOVIES_AND_TV_SHOWS - ดูเอนทิตีจากคู่มือการผสานรวมการดูก่อนใช้เอนทิตีทั่วไป
- TYPE_BOOKS - ดู EbookEntity ก่อนใช้เอนทิตีทั่วไป
- TYPE_AUDIOBOOKS - ดูAudiobookEntity ก่อนใช้เอนทิตีทั่วไป
- TYPE_SHOPPING - ตรวจสอบ ShoppingEntity ก่อนใช้เอนทิตีทั่วไป
- TYPE_FOOD_AND_DRINK - ดูเอนทิตีจากคู่มือการผสานรวมอาหารก่อนใช้เอนทิตีทั่วไป
ช่อง ContentCategory เป็นช่องที่ไม่บังคับและควรเว้นว่างไว้หากเนื้อหาไม่ได้อยู่ในหมวดหมู่ที่กล่าวถึงก่อนหน้านี้
ในกรณีที่ระบุหมวดหมู่เนื้อหาหลายหมวดหมู่ ให้ระบุหมวดหมู่ตามลำดับความเกี่ยวข้องกับเนื้อหา โดยให้หมวดหมู่เนื้อหาที่มีความเกี่ยวข้องมากที่สุดอยู่อันดับแรกในรายการ
ขั้นตอนที่ 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("Top Picks For You") .build() ) .build() )
Java
client.publishRecommendationClusters( new PublishRecommendationClustersRequest.Builder() .addRecommendationCluster( new RecommendationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .setTitle("Top Picks For You") .build()) .build());
เมื่อบริการได้รับคําขอแล้ว ระบบจะดําเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
RecommendationCluster
ที่มีอยู่ออกจากพาร์ทเนอร์นักพัฒนาแอป - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคําขอไว้ในคลัสเตอร์คําแนะนําที่อัปเดตแล้ว
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
publishFeaturedCluster
API นี้ใช้เพื่อเผยแพร่รายการออบเจ็กต์ FeaturedCluster
Kotlin
client.publishFeaturedCluster( PublishFeaturedClusterRequest.Builder() .setFeaturedCluster( FeaturedCluster.Builder() .addEntity(entity1) .addEntity(entity2) .build()) .build())
Java
client.publishFeaturedCluster( new PublishFeaturedClustersRequest.Builder() .addFeaturedCluster( new FeaturedCluster.Builder() .addEntity(entity1) .addEntity(entity2) .build()) .build());
เมื่อบริการได้รับคําขอแล้ว ระบบจะดําเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
FeaturedCluster
ที่มีอยู่ออกจากพาร์ทเนอร์นักพัฒนาแอป - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอไว้ในคลัสเตอร์แนะนําที่อัปเดตแล้ว
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
publishContinuationCluster
API นี้ใช้เพื่อเผยแพร่ออบเจ็กต์ ContinuationCluster
Kotlin
client.publishContinuationCluster( PublishContinuationClusterRequest.Builder() .setContinuationCluster( ContinuationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .build()) .build())
Java
client.publishContinuationCluster( new PublishContinuationClusterRequest.Builder() .setContinuationCluster( new ContinuationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .build()) .build());
เมื่อบริการได้รับคําขอแล้ว ระบบจะดําเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
ContinuationCluster
ที่มีอยู่ออกจากพาร์ทเนอร์นักพัฒนาแอป - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคําขอไว้ในคลัสเตอร์การต่ออายุที่อัปเดตแล้ว
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
publishUserAccountManagementRequest
API นี้ใช้เพื่อเผยแพร่การ์ดลงชื่อเข้าใช้ การดำเนินการลงชื่อเข้าใช้จะนำผู้ใช้ไปยังหน้าลงชื่อเข้าใช้ของแอปเพื่อให้แอปเผยแพร่เนื้อหาได้ (หรือแสดงเนื้อหาที่ปรับเปลี่ยนในแบบของคุณมากขึ้น)
ข้อมูลเมตาต่อไปนี้เป็นส่วนหนึ่งของการ์ดลงชื่อเข้าใช้
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย |
---|---|---|
URI การดำเนินการ | ต้องมี | Deep Link ไปยังการดำเนินการ (เช่น ไปยังหน้าลงชื่อเข้าใช้แอป) |
รูปภาพ | ไม่บังคับ - หากไม่ระบุ จะต้องระบุชื่อ |
รูปภาพที่แสดงในการ์ด รูปภาพสัดส่วนภาพ 16:9 ที่มีความละเอียด 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 จะแนะนำให้เผยแพร่การ์ดลงชื่อเข้าใช้ หากผู้ให้บริการไม่สามารถเผยแพร่การ์ดลงชื่อเข้าใช้ไม่ว่าด้วยเหตุผลใดก็ตาม เราขอแนะนำให้เรียกใช้ 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 นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์การต่อเรื่อง
Kotlin
client.deleteContinuationCluster()
Java
client.deleteContinuationCluster();
เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากกลุ่มการต่ออายุ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
deleteUserManagementCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ UserAccountManagement
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์การจัดการบัญชีผู้ใช้ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
deleteClusters
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ประเภทหนึ่งๆ
Kotlin
client.deleteClusters( DeleteClustersRequest.Builder() .addClusterType(ClusterType.TYPE_CONTINUATION) .addClusterType(ClusterType.TYPE_FEATURED) .addClusterType(ClusterType.TYPE_RECOMMENDATION) .build())
Java
client.deleteClusters( new DeleteClustersRequest.Builder() .addClusterType(ClusterType.TYPE_CONTINUATION) .addClusterType(ClusterType.TYPE_FEATURED) .addClusterType(ClusterType.TYPE_RECOMMENDATION) .build());
เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ทั้งหมดที่ตรงกับประเภทคลัสเตอร์ที่ระบุ โดยสามารถเลือกส่งคลัสเตอร์ประเภทเดียวหรือหลายประเภทก็ได้ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
การจัดการข้อผิดพลาด
เราขอแนะนําอย่างยิ่งให้ฟังผลลัพธ์ของงานจาก API การเผยแพร่เพื่อให้ดําเนินการติดตามผลเพื่อกู้คืนและส่งงานที่สําเร็จอีกครั้งได้
Kotlin
client.publishRecommendationClusters( PublishRecommendationClustersRequest.Builder() .addRecommendationCluster(..) .build()) .addOnCompleteListener { task -> if (task.isSuccessful) { // do something } else { val exception = task.exception if (exception is AppEngageException) { @AppEngageErrorCode val errorCode = exception.errorCode if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) { // do something } } } }
Java
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()
ซึ่งจะช่วยให้แอปพลิเคชันสื่อสารกันได้อยู่แม้ว่าจะยังอยู่ในหน่วยความจำ
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)) // Register Featured Cluster Publish Intent context.registerReceiver(AppEngageBroadcastReceiver(), IntentFilter(Intents.ACTION_PUBLISH_FEATURED)) // Register Continuation Cluster Publish Intent context.registerReceiver(AppEngageBroadcastReceiver(), IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION)) }
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)); // 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 แล้ว ระบบอาจเผยแพร่คลัสเตอร์คำแนะนำ แนะนํา และการต่อเรื่องให้ผู้ใช้เห็น