Google กำลังสร้างแพลตฟอร์มในอุปกรณ์ที่จัดระเบียบแอปของผู้ใช้ตามประเภทธุรกิจ และมอบประสบการณ์การใช้งานเนื้อหาแอปที่ปรับเปลี่ยนในแบบของคุณและค้นพบเนื้อหาใหม่ๆ ประสบการณ์แบบเต็มหน้าจอนี้เปิดโอกาสให้พาร์ทเนอร์นักพัฒนาแอปได้แสดงเนื้อหาริชมีเดียที่ดีที่สุดในช่องทางเฉพาะนอกแอป คู่มือนี้มีวิธีการสำหรับพาร์ทเนอร์นักพัฒนาแอปในการผสานรวมเนื้อหาด้านสุขภาพและความแข็งแรงสมบูรณ์โดยใช้ Engage SDK เพื่อแสดงเนื้อหาในแพลตฟอร์มใหม่นี้
รายละเอียดการผสานรวม
คำศัพท์
การผสานรวมนี้มีคลัสเตอร์ 3 ประเภท ได้แก่ คำแนะนำ แนะนำ และความต่อเนื่อง
กลุ่มคําแนะนําจะแสดงคําแนะนําด้านสุขภาพและการออกกำลังกายที่ปรับเปลี่ยนในแบบของคุณจากพาร์ทเนอร์นักพัฒนาแอปแต่ละราย คำแนะนำเหล่านี้อาจปรับเปลี่ยนในแบบของผู้ใช้หรือเป็นแบบทั่วไป (เช่น การออกกำลังกายและสุขภาพที่มาแรง) ให้ใช้การ์ดเหล่านี้แสดงบทความหรือบุคคลที่เกี่ยวข้องกับสุขภาพและการออกกำลังกาย
- คลัสเตอร์คําแนะนําอาจประกอบด้วย
ArticleEntity
,PersonEntity
หรือEventEntity
แต่ต้องไม่ผสมเอนทิตีประเภทต่างๆ
คำแนะนำของคุณควรมีโครงสร้างดังต่อไปนี้
คลัสเตอร์คำแนะนำ: มุมมอง UI ที่มีกลุ่มคำแนะนำจากพาร์ทเนอร์นักพัฒนาซอฟต์แวร์รายเดียวกัน
เอนทิตี: ออบเจ็กต์ที่แสดงรายการเดียวในคลัสเตอร์ การผสานรวมนี้แสดงเอนทิตีบางอย่างที่จะแสดงโดยใช้กลุ่มคําแนะนํา ดังนี้
ArticleEntity: ArticleEntity แสดงคําแนะนําสําหรับเนื้อหาที่เป็นข้อความที่เกี่ยวข้องกับสุขภาพและการออกกำลังกาย สามารถใช้กับบทความ บล็อกโพสต์ เนื้อหาการตลาด ตัวอย่างข่าว ฯลฯ
PersonEntity: PersonEntity แสดงถึงบุคคล คำแนะนำนี้อาจเป็นการไฮไลต์โค้ชหรือบุคคลที่เกี่ยวข้องกับสุขภาพและการออกกำลังกาย เป็นต้น
EventEntity: EventEntity แสดงถึงเหตุการณ์ที่เกิดขึ้นในอนาคต เวลาเริ่มต้นของกิจกรรมเป็นข้อมูลสำคัญที่จำเป็นต้องสื่อให้ผู้ใช้ เอนทิตีนี้สามารถใช้ในการนำเสนอกิจกรรมต่างๆ เช่น ค่ายบริจาคเลือด เซสชันการฝึก ชั้นเรียนยิมหรือโยคะ ฯลฯ ที่เกี่ยวข้องกับสุขภาพและการออกกำลังกาย
- คลัสเตอร์คําแนะนําอาจประกอบด้วย
คลัสเตอร์ความต่อเนื่องจะแสดงเนื้อหาที่ผู้ใช้เพิ่งมีส่วนร่วมเมื่อเร็วๆ นี้จากพาร์ทเนอร์นักพัฒนาซอฟต์แวร์หลายรายในการจัดกลุ่ม UI เดียว พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะออกอากาศได้สูงสุด 10 รายการในกลุ่มการออกอากาศต่อเนื่อง
เนื้อหาต่อสามารถมีโครงสร้างดังต่อไปนี้
ArticleEntity: ArticleEntity แสดงคําแนะนําสําหรับเนื้อหาที่เป็นข้อความซึ่งเกี่ยวข้องกับสุขภาพและการออกกำลังกาย เอนทิตีนี้สามารถใช้เพื่อแสดงบทความข่าวที่ยังไม่จบหรือเนื้อหาอื่นๆ ที่ผู้ใช้ต้องการอ่านต่อจากที่อ่านค้างไว้ เช่น ตัวอย่างข่าว ตัวอย่างบล็อกโพสต์เกี่ยวกับหัวข้อที่เกี่ยวข้องกับสุขภาพหรือการออกกำลังกาย
EventReservationEntity: EventReservationEntity แสดงถึงการจองกิจกรรมและช่วยให้ผู้ใช้ติดตามการจองกิจกรรมออกกำลังกายและสุขภาพที่กําลังจะเกิดขึ้นหรืออยู่ระหว่างดำเนินการ เช่น เซสชันการฝึกอบรม
คลัสเตอร์แนะนำจะแสดงเอนทิตีบางส่วนจากพาร์ทเนอร์นักพัฒนาซอฟต์แวร์หลายรายในการจัดกลุ่ม UI เดียว โดยจะมีคลัสเตอร์แนะนำกลุ่มเดียวที่แสดงอยู่ใกล้กับด้านบนของ UI ด้วยตำแหน่งที่มีลำดับความสำคัญเหนือคลัสเตอร์คำแนะนำทั้งหมด พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะออกอากาศได้สูงสุด 10 รายการในคลัสเตอร์แนะนํา
GenericFeaturedEntity: 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 นี้ใช้เพื่อตรวจสอบว่าบริการพร้อมผสานรวมหรือไม่และแสดงเนื้อหาในอุปกรณ์ได้หรือไม่
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();
เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ UserAccountManagement ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้
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
เพื่อรับคําขอเผยแพร่เนื้อหาด้วย
เป้าหมายของ Broadcast Intents ส่วนใหญ่คือการเปิดใช้แอปอีกครั้งและการบังคับให้ซิงค์ข้อมูล 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 แล้ว ระบบอาจเผยแพร่คลัสเตอร์คำแนะนำ แนะนํา และการต่อเรื่องให้ผู้ใช้เห็น