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'
}
สรุป
การออกแบบนี้อิงตามการใช้งานบริการที่เชื่อมโยง
ข้อมูลที่จะเผยแพร่ได้จะขึ้นอยู่กับขีดจํากัดต่อไปนี้สําหรับคลัสเตอร์ประเภทต่างๆ
ประเภทคลัสเตอร์ | ขีดจํากัดของคลัสเตอร์ | ขีดจำกัดเอนทิตีขั้นต่ำในคลัสเตอร์ | ขีดจำกัดเอนทิตีสูงสุดในคลัสเตอร์ |
---|---|---|---|
คลัสเตอร์คำแนะนำ | สูงสุด 5 รายการ | อย่างน้อย 5 | สูงสุด 25 (ArticleEntity , PersonEntity หรือ
EventEntity ) |
คลัสเตอร์การต่อเรื่อง | ไม่เกิน 1 | อย่างน้อย 1 | สูงสุด 10 (ArticleEntity หรือ EventReservationEntity ) |
คลัสเตอร์แนะนำ | ไม่เกิน 1 | อย่างน้อย 1 รายการ | ไม่เกิน 10 (GenericFeaturedEntity ) |
ขั้นตอนที่ 1: ระบุข้อมูลเอนทิตี
SDK ได้กําหนดเอนทิตีต่างๆ เพื่อแสดงรายการแต่ละประเภท เรารองรับเอนทิตีต่อไปนี้สำหรับหมวดหมู่สุขภาพและการออกกำลังกาย
GenericFeaturedEntity
ArticleEntity
PersonEntity
EventEntity
EventReservationEntity
แผนภูมิด้านล่างแสดงแอตทริบิวต์และข้อกําหนดที่ใช้ได้สําหรับแต่ละประเภท
GenericFeaturedEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI การดำเนินการ | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการ หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
ภาพโปสเตอร์ | ต้องระบุ | เราจะแสดงรูปภาพเพียง 1 รูปเมื่อมีการระบุรูปภาพหลายรูป สัดส่วนภาพที่แนะนำคือ 16:9 หมายเหตุ: หากมีป้าย โปรดเว้นพื้นที่ปลอดภัย 24 dp ทั้งด้านบนและด้านล่างของรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
ชื่อ | ไม่บังคับ | ชื่อของเอนทิตี | ข้อความอิสระ ขนาดข้อความที่แนะนำ: 50 อักขระ |
คำอธิบาย | ไม่บังคับ | ย่อหน้าข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: 180 อักขระ |
รายการคำบรรยาย | ไม่บังคับ | คำบรรยายได้สูงสุด 3 รายการ โดยคำบรรยายแต่ละรายการจะเป็นข้อความบรรทัดเดียว หมายเหตุ: รายการคำอธิบายหรือรายการคำบรรยายจะแสดงต่อผู้ใช้ ไม่ใช่ทั้ง 2 รายการ |
ข้อความอิสระ ขนาดข้อความที่แนะนำสำหรับคำบรรยายแต่ละรายการ: สูงสุด 50 อักขระ |
ป้าย | ไม่บังคับ | ป้ายแต่ละป้ายจะเป็นข้อความอิสระ (ไม่เกิน 15 อักขระ) หรือรูปภาพขนาดเล็ก การจัดการ UX แบบพิเศษทับรูปภาพ/วิดีโอ เช่น แสดงป้ายวางซ้อนบนรูปภาพ
|
|
ป้าย - ข้อความ | ไม่บังคับ | ชื่อป้าย หมายเหตุ: ต้องมีข้อความหรือรูปภาพสำหรับป้าย |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ |
ป้าย - ภาพ | ไม่บังคับ | รูปภาพขนาดเล็ก การจัดการ UX แบบพิเศษ เช่น การซ้อนทับป้ายบนภาพขนาดย่อของรูปภาพ/วิดีโอ หมายเหตุ: ต้องมีข้อความหรือรูปภาพสำหรับป้าย |
โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
หมวดหมู่เนื้อหา | ไม่บังคับ | อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี | รายการ Enum ดูคำแนะนำได้ที่ส่วนหมวดหมู่เนื้อหา |
ArticleEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI การดำเนินการ | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการ หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
ชื่อ | ต้องระบุ | ชื่อของเอนทิตี | ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 50 อักขระ |
ภาพโปสเตอร์ | ไม่บังคับ | เราจะแสดงรูปภาพเพียง 1 รูปเมื่อมีการระบุรูปภาพหลายรูป สัดส่วนภาพที่แนะนำคือ 16:9 หมายเหตุ: ขอแนะนําให้ใช้รูปภาพ หากมีป้าย โปรดเว้นพื้นที่ปลอดภัย 24 dp ทั้งด้านบนและด้านล่างของรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
แหล่งที่มา - ชื่อ | ไม่บังคับ | ชื่อผู้เขียน องค์กร หรือผู้รายงาน | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 25 อักขระ |
แหล่งที่มา - รูปภาพ | ไม่บังคับ | รูปภาพของแหล่งที่มา เช่น ผู้เขียน องค์กร ผู้รายงาน | ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
คำอธิบาย | ไม่บังคับ | ย่อหน้าข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: 180 อักขระ |
รายการคำบรรยาย | ไม่บังคับ | คำบรรยายได้สูงสุด 3 รายการ โดยคำบรรยายแต่ละรายการจะเป็นข้อความบรรทัดเดียว หมายเหตุ: รายการคำอธิบายหรือรายการคำบรรยายจะแสดงต่อผู้ใช้ ไม่ใช่ทั้ง 2 รายการ |
ข้อความอิสระ ขนาดข้อความที่แนะนำสำหรับคำบรรยายแต่ละรายการ: สูงสุด 50 อักขระ |
ป้าย | ไม่บังคับ | ป้ายแต่ละป้ายจะเป็นข้อความอิสระ (ไม่เกิน 15 อักขระ) หรือรูปภาพขนาดเล็ก การจัดการ UX แบบพิเศษทับรูปภาพ/วิดีโอ เช่น แสดงป้ายวางซ้อนบนรูปภาพ
|
|
ป้าย - ข้อความ | ไม่บังคับ | ชื่อป้าย หมายเหตุ: ต้องมีข้อความหรือรูปภาพสำหรับป้าย |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ |
ป้าย - ภาพ | ไม่บังคับ | รูปภาพขนาดเล็ก การจัดการ UX แบบพิเศษ เช่น การซ้อนทับป้ายบนภาพขนาดย่อของรูปภาพ/วิดีโอ หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
เวลาเผยแพร่เนื้อหา | ไม่บังคับ | นี่คือการประทับเวลาตามยุคสมัยเป็นมิลลิวินาทีเมื่อมีการเผยแพร่/อัปเดตเนื้อหาในแอป | การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
เวลาในการมีส่วนร่วมครั้งล่าสุด | ต้องระบุ (แบบมีเงื่อนไข) | การประทับเวลา Epoch ในหน่วยมิลลิวินาทีเมื่อผู้ใช้โต้ตอบกับเอนทิตีนี้ครั้งล่าสุด หมายเหตุ: ต้องกรอกช่องนี้หากเอนทิตีนี้เป็นส่วนหนึ่งของคลัสเตอร์การต่อ |
การประทับเวลา Epoch เป็นมิลลิวินาที |
เปอร์เซ็นต์ความคืบหน้า | ต้องระบุ (แบบมีเงื่อนไข) | เปอร์เซ็นต์ของเนื้อหาทั้งหมดที่ผู้ใช้บริโภคจนถึงปัจจุบัน หมายเหตุ: ต้องกรอกช่องนี้หากเอนทิตีนี้เป็นส่วนหนึ่งของคลัสเตอร์การต่อ |
ค่า int ระหว่าง 0 ถึง 100 |
หมวดหมู่เนื้อหา | ไม่บังคับ | อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี | รายการ Enum ดูคำแนะนำได้ที่ส่วนหมวดหมู่เนื้อหา |
PersonEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI การดำเนินการ | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link เพื่อการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
URI |
โปรไฟล์ - ชื่อ | ต้องระบุ | ชื่อหรือรหัสหรือแฮนเดิลของโปรไฟล์ เช่น "John Doe", "@TeamPixel" ฯลฯ | สตริง ขนาดข้อความที่แนะนำ: สูงสุด 50 อักขระ |
โปรไฟล์ - รูปโปรไฟล์ | ต้องระบุ |
รูปโปรไฟล์หรือรูปโปรไฟล์ของผู้ใช้ หมายเหตุ: ต้องเป็นรูปภาพสี่เหลี่ยมจัตุรัสขนาด 1:1 |
โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
โปรไฟล์ - ข้อความเพิ่มเติม | ไม่บังคับ | ข้อความอิสระ เช่น แฮนเดิลโปรไฟล์ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ |
โปรไฟล์ - รูปภาพเพิ่มเติม | ไม่บังคับ | รูปภาพขนาดเล็ก เช่น ป้ายที่ผ่านการยืนยันแล้ว | ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
รูปภาพส่วนหัว | ไม่บังคับ | เราจะแสดงรูปภาพเพียง 1 รูปเมื่อมีการระบุรูปภาพหลายรูป สัดส่วนภาพที่แนะนำคือ 16:9 หมายเหตุ: ขอแนะนําให้ใช้รูปภาพ หากมีป้าย โปรดเว้นพื้นที่ปลอดภัยให้ห่างจากจุด 24 d ทั้งด้านบนและด้านล่างของรูปภาพ |
โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
ความนิยม - จำนวน | ไม่บังคับ |
ระบุจำนวนผู้ติดตามหรือค่าความนิยม เช่น - "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 รายการ โดยคำบรรยายแต่ละรายการจะเป็นข้อความบรรทัดเดียว หมายเหตุ: รายการคำอธิบายหรือรายการคำบรรยายจะแสดงต่อผู้ใช้ ไม่ใช่ทั้ง 2 รายการ |
ข้อความอิสระ ขนาดข้อความที่แนะนำสำหรับคำบรรยายแต่ละรายการ: สูงสุด 50 อักขระ |
หมวดหมู่เนื้อหา | ไม่บังคับ | อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี | รายการ Enum ที่มีสิทธิ์
ดูหลักเกณฑ์ในส่วนหมวดหมู่เนื้อหา |
EventEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI การดำเนินการ | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link เพื่อการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
ชื่อ | ต้องระบุ | ชื่อของเอนทิตี | สตริง ขนาดข้อความที่แนะนำ: สูงสุด 50 อักขระ |
เวลาเริ่มต้น | ต้องระบุ |
การประทับเวลาตามยุคสมัยเมื่อคาดว่ากิจกรรมจะเริ่ม หมายเหตุ: ค่านี้จะแสดงเป็นมิลลิวินาที |
การประทับเวลา Epoch เป็นมิลลิวินาที |
โหมดเหตุการณ์ | ต้องระบุ | ช่องสำหรับระบุว่ากิจกรรมจะเป็นแบบเสมือนจริง เข้าร่วมด้วยตนเอง หรือทั้ง 2 แบบ |
Enum: 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 รายการ โดยคำบรรยายแต่ละรายการจะเป็นข้อความบรรทัดเดียว หมายเหตุ: รายการคำอธิบายหรือรายการคำบรรยายจะแสดงต่อผู้ใช้ ไม่ใช่ทั้ง 2 รายการ |
ข้อความอิสระ ขนาดข้อความที่แนะนำสำหรับคำบรรยายแต่ละรายการ: สูงสุด 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 d ทั้งด้านบนและด้านล่างของรูปภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
เวลาสิ้นสุด | ไม่บังคับ |
การประทับเวลาตามยุคสมัยเมื่อคาดว่ากิจกรรมจะสิ้นสุด หมายเหตุ: ค่านี้จะแสดงเป็นมิลลิวินาที |
การประทับเวลา Epoch เป็นมิลลิวินาที |
ผู้ให้บริการ - ชื่อ | ไม่บังคับ |
ชื่อผู้ให้บริการ หมายเหตุ: ต้องมีข้อความหรือรูปภาพสำหรับผู้ให้บริการ |
ข้อความอิสระ เช่น ชื่อผู้จัด/ทัวร์ |
ผู้ให้บริการ - รูปภาพ | ไม่บังคับ |
โลโก้/รูปภาพของผู้ให้บริการ หมายเหตุ: ต้องมีข้อความหรือรูปภาพสำหรับผู้ให้บริการ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
คำอธิบาย | ไม่บังคับ | ย่อหน้าข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี หมายเหตุ: ระบบจะแสดงรายการคำบรรยายแทนเสียงหรือคำบรรยายแทนเสียงเท่านั้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: 180 อักขระ |
รายการคำบรรยาย | ไม่บังคับ | คำบรรยายได้สูงสุด 3 รายการ โดยคำบรรยายแต่ละรายการจะเป็นข้อความบรรทัดเดียว หมายเหตุ: รายการคำอธิบายหรือรายการคำบรรยายจะแสดงต่อผู้ใช้ ไม่ใช่ทั้ง 2 รายการ |
ข้อความอิสระ ขนาดข้อความที่แนะนำสำหรับคำบรรยายแต่ละรายการ: สูงสุด 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
ขนาดไฟล์สูงสุด
5,120 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 นี้ใช้เพื่อตรวจสอบว่าบริการพร้อมผสานรวมหรือไม่และแสดงเนื้อหาในอุปกรณ์ได้หรือไม่
client.isServiceAvailable.addOnCompleteListener { task -> if (task.isSuccessful) { // Handle IPC call success if(task.result) { // Service is available on the device, proceed with content publish // calls. } else { // Service is not available, no further action is needed. } } else { // The IPC call itself fails, proceed with error handling logic here, // such as retry. } }
client.isServiceAvailable().addOnCompleteListener(task - > { if (task.isSuccessful()) { // Handle success if(task.getResult()) { // Service is available on the device, proceed with content publish // calls. } else { // Service is not available, no further action is needed. } } else { // The IPC call itself fails, proceed with error handling logic here, // such as retry. } });
publishRecommendationClusters
API นี้ใช้เพื่อเผยแพร่รายการออบเจ็กต์ RecommendationCluster
client.publishRecommendationClusters( PublishRecommendationClustersRequest.Builder() .addRecommendationCluster( RecommendationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .setTitle("Top Picks For You") .build() ) .build() )
client.publishRecommendationClusters( new PublishRecommendationClustersRequest.Builder() .addRecommendationCluster( new RecommendationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .setTitle("Top Picks For You") .build()) .build());
เมื่อบริการได้รับคําขอแล้ว ระบบจะดําเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
RecommendationCluster
ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาแอปออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคําขอไว้ในคลัสเตอร์คําแนะนําที่อัปเดตแล้ว
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
publishFeaturedCluster
API นี้ใช้เพื่อเผยแพร่รายการออบเจ็กต์ FeaturedCluster
client.publishFeaturedCluster( PublishFeaturedClusterRequest.Builder() .setFeaturedCluster( FeaturedCluster.Builder() .addEntity(entity1) .addEntity(entity2) .build()) .build())
client.publishFeaturedCluster( new PublishFeaturedClustersRequest.Builder() .addFeaturedCluster( new FeaturedCluster.Builder() .addEntity(entity1) .addEntity(entity2) .build()) .build());
เมื่อบริการได้รับคําขอแล้ว ระบบจะดําเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
FeaturedCluster
ที่มีอยู่ออกจากพาร์ทเนอร์นักพัฒนาแอป - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอไว้ในคลัสเตอร์แนะนําที่อัปเดตแล้ว
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
publishContinuationCluster
API นี้ใช้เพื่อเผยแพร่ออบเจ็กต์ ContinuationCluster
client.publishContinuationCluster( PublishContinuationClusterRequest.Builder() .setContinuationCluster( ContinuationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .build()) .build())
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 (เช่น ลงชื่อเข้าใช้) |
ชื่อรอง | ไม่บังคับ | คำบรรยายการ์ด (ไม่บังคับ) |
var SIGN_IN_CARD_ENTITY = SignInCardEntity.Builder() .addPosterImage( Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) .setImageWidthInPixel(500) .build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build() client.publishUserAccountManagementRequest( PublishUserAccountManagementRequest.Builder() .setSignInCardEntity(SIGN_IN_CARD_ENTITY) .build());
SignInCardEntity SIGN_IN_CARD_ENTITY = new SignInCardEntity.Builder() .addPosterImage( new Image.Builder() .setImageUri(Uri.parse("http://www.x.com/image.png")) .setImageHeightInPixel(500) .setImageWidthInPixel(500) .build()) .setActionText("Sign In") .setActionUri(Uri.parse("http://xx.com/signin")) .build(); client.publishUserAccountManagementRequest( new PublishUserAccountManagementRequest.Builder() .setSignInCardEntity(SIGN_IN_CARD_ENTITY) .build());
เมื่อบริการได้รับคําขอแล้ว ระบบจะดําเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะลบข้อมูล
UserAccountManagementCluster
ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาแอป - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคําขอไว้ในคลัสเตอร์ UserAccountManagementCluster ที่อัปเดตแล้ว
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
updatePublishStatus
หากไม่มีคลัสเตอร์ใดเผยแพร่เนื่องจากเหตุผลทางธุรกิจภายใน เราขอแนะนำอย่างยิ่งให้อัปเดตสถานะการเผยแพร่โดยใช้ 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
client.updatePublishStatus( PublishStatusRequest.Builder() .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN) .build())
client.updatePublishStatus( new PublishStatusRequest.Builder() .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN) .build());
deleteRecommendationClusters
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์คําแนะนํา
เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์คําแนะนํา ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและรักษาสถานะที่มีอยู่
deleteFeaturedCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์แนะนำ
เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์แนะนํา ในกรณีที่เกิดข้อผิดพลาด คำขอทั้งหมดจะถูกปฏิเสธและคงสถานะที่มีอยู่ไว้
deleteContinuationCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์การต่อเรื่อง
เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากกลุ่มต่อเนื่อง ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและรักษาสถานะที่มีอยู่
deleteUserManagementCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ UserAccountManagement
เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ UserAccountManagement ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
deleteClusters
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ประเภทหนึ่งๆ
client.deleteClusters( DeleteClustersRequest.Builder() .addClusterType(ClusterType.TYPE_CONTINUATION) .addClusterType(ClusterType.TYPE_FEATURED) .addClusterType(ClusterType.TYPE_RECOMMENDATION) .build())
client.deleteClusters( new DeleteClustersRequest.Builder() .addClusterType(ClusterType.TYPE_CONTINUATION) .addClusterType(ClusterType.TYPE_FEATURED) .addClusterType(ClusterType.TYPE_RECOMMENDATION) .build());
เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ทั้งหมดที่ตรงกับประเภทคลัสเตอร์ที่ระบุ โดยสามารถเลือกส่งคลัสเตอร์ประเภทเดียวหรือหลายประเภทก็ได้ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
การจัดการข้อผิดพลาด
ขอแนะนําอย่างยิ่งให้ฟังผลลัพธ์ของงานจาก API การเผยแพร่เพื่อให้ดําเนินการติดตามผลเพื่อกู้คืนและส่งงานที่สําเร็จอีกครั้งได้
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 } } } }
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 Intents ส่วนใหญ่คือการเปิดใช้แอปอีกครั้งและการบังคับให้ซิงค์ข้อมูล Intent แบบออกอากาศไม่ได้ออกแบบมาเพื่อส่งบ่อยครั้ง และทริกเกอร์ก็ต่อเมื่อบริการ Engage ระบุว่าเนื้อหาอาจไม่มีอัปเดต (เช่น มีอายุ 1 สัปดาห์) วิธีนี้ช่วยให้มั่นใจมากขึ้นว่าผู้ใช้จะได้รับประสบการณ์การใช้งานเนื้อหาที่สดใหม่ แม้ว่าแอปพลิเคชันจะไม่ได้ใช้งานเป็นเวลานาน
BroadcastReceiver
ต้องตั้งค่าด้วย 2 วิธีต่อไปนี้
- ลงทะเบียนอินสแตนซ์ของคลาส
BroadcastReceiver
แบบไดนามิกโดยใช้Context.registerReceiver()
ซึ่งจะช่วยให้แอปพลิเคชันสื่อสารกันได้อยู่แม้ว่าจะยังอยู่ในหน่วยความจำ
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)) }
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 แล้ว ระบบอาจเผยแพร่คลัสเตอร์คำแนะนำ แนะนํา และการต่อเรื่องให้ผู้ใช้เห็น