Engage SDK Health and Fitness: คำแนะนำการผสานรวมทางเทคนิคของบุคคลที่สาม

เพิ่มการมีส่วนร่วมในแอปด้วยการเข้าถึงผู้ใช้ในที่ที่ผู้ใช้อยู่ ผสานรวม Engage SDK เพื่อแสดงคำแนะนำที่ปรับเปลี่ยนตามการใช้งานของผู้ใช้และเนื้อหาที่ต่อเนื่องโดยตรงต่อ ผู้ใช้ในแพลตฟอร์มต่างๆ ในอุปกรณ์ เช่น คอลเล็กชัน, Entertainment Space และ Google Play Store การผสานรวมจะเพิ่มขนาด APK โดยเฉลี่ยไม่เกิน 50 KB (บีบอัด) และใช้เวลาของนักพัฒนาแอปประมาณ 1 สัปดาห์สำหรับแอปส่วนใหญ่ ดูข้อมูลเพิ่มเติมได้ที่เว็บไซต์ ธุรกิจ

คู่มือนี้มีวิธีการสำหรับพาร์ทเนอร์นักพัฒนาแอปในการส่งเนื้อหาด้านสุขภาพและฟิตเนสไปยังแพลตฟอร์มเนื้อหา Engage

การรองรับหมวดหมู่และแพลตฟอร์ม

การมีสิทธิ์แสดง Engage SDK จะขึ้นอยู่กับหมวดหมู่เนื้อหาของแอป ใช้ตารางต่อไปนี้เพื่อพิจารณาการมีสิทธิ์ของคุณสำหรับแพลตฟอร์มที่เฉพาะเจาะจง

สถานะ หมวดหมู่เนื้อหาหรือกรณีการใช้งาน พื้นผิวที่รองรับ
รองรับ
(มีสิทธิ์ในทุกแพลตฟอร์ม)
  • คลาสออกกำลังกาย
  • กิจวัตรการออกกำลังกาย
  • การผ่อนคลายและการทำสมาธิ
  • การค้นหาเส้นทาง / เส้นทางเดิน
  • การวางแผนมื้ออาหาร
  • คอลเล็กชัน
  • แท็บแอปใน Play Store
  • แท็บ "คุณ" ใน Play Store
  • หน้าข้อมูลสินค้าใน Store ของ Play Store
สิ่งที่ทำไม่ได้
  • เครื่องคำนวณ BMI
  • เครื่องติดตามการเคลื่อนไหวร่างกาย / ตัวนับก้าว
  • ตัวนับแคลอรี่
  • เครื่องมือติดตามการนอนหลับ
  • เครื่องมือ / รีโมต
  • แอปการแพทย์

รายละเอียดการผสานรวม

คำศัพท์

การผสานรวมนี้มีคลัสเตอร์ 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.6.0'
}

สรุป

การออกแบบนี้อิงตามการใช้งานบริการที่เชื่อมโยง

ข้อมูลที่ไคลเอ็นต์เผยแพร่ได้จะขึ้นอยู่กับขีดจํากัดต่อไปนี้สําหรับคลัสเตอร์ประเภทต่างๆ

ประเภทคลัสเตอร์ ขีดจำกัดของคลัสเตอร์ ขีดจำกัดของเอนทิตีขั้นต่ำในคลัสเตอร์ ขีดจำกัดสูงสุดของเอนทิตีในคลัสเตอร์
คลัสเตอร์คำแนะนำ ไม่เกิน 7 อย่างน้อย 1 รายการ สูงสุด 50 รายการ (ArticleEntity, PersonEntity หรือ EventEntity)
คลัสเตอร์ความต่อเนื่อง สูงสุด 1 รายการ อย่างน้อย 1 รายการ สูงสุด 20 รายการ (ArticleEntity หรือ EventReservationEntity)
คลัสเตอร์แนะนำ สูงสุด 1 รายการ อย่างน้อย 1 รายการ สูงสุด 20 รายการ (GenericFeaturedEntity)

ขั้นตอนที่ 1: ระบุข้อมูลนิติบุคคล

SDK ได้กำหนดเอนทิตีต่างๆ เพื่อแสดงรายการแต่ละประเภท เรารองรับ เอนทิตีต่อไปนี้สำหรับหมวดหมู่สุขภาพและการออกกำลังกาย

  1. GenericFeaturedEntity
  2. ArticleEntity
  3. PersonEntity
  4. EventEntity
  5. EventReservationEntity

แผนภูมิด้านล่างแสดงแอตทริบิวต์และข้อกำหนดที่มีสำหรับแต่ละประเภท

GenericFeaturedEntity

แอตทริบิวต์ ข้อกำหนด คำอธิบาย รูปแบบ
URI การดำเนินการ ต้องระบุ

ทำ Deep Link ไปยังเอนทิตีในแอปผู้ให้บริการ

หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้

URI
รูปภาพโปสเตอร์ ต้องระบุ

เราจะแสดงรูปภาพเพียง 1 รูปเมื่อได้รับรูปภาพหลายรูป สัดส่วนภาพที่แนะนำคือ 16:9

หมายเหตุ: หากมีป้าย โปรดเว้นพื้นที่ปลอดภัย 24 dps ทั้งที่ด้านบนและด้านล่างของรูปภาพ

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
ชื่อ ไม่บังคับ ชื่อของเอนทิตี

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: 50 อักขระ

คำอธิบาย ไม่บังคับ

ข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี

หมายเหตุ: ระบบจะแสดงรายการคำอธิบายหรือคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งแก่ผู้ใช้ ไม่ใช่ทั้ง 2 รายการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: 180 อักขระ

รายการคำบรรยาย ไม่บังคับ

คำบรรยายแทนเสียงสูงสุด 3 รายการ โดยแต่ละรายการเป็นข้อความ 1 บรรทัด

หมายเหตุ: ระบบจะแสดงรายการคำอธิบายหรือคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งแก่ผู้ใช้ ไม่ใช่ทั้ง 2 รายการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำสำหรับคำบรรยายแทนเสียงแต่ละรายการ: สูงสุด 50 อักขระ

ป้าย ไม่บังคับ

ป้ายแต่ละป้ายเป็นข้อความอิสระ (สูงสุด 15 อักขระ) หรือรูปภาพขนาดเล็ก

การจัดการ UX พิเศษที่ด้านบนของรูปภาพ/วิดีโอ เช่น การวางซ้อนป้ายบนรูปภาพ

  • "อัปเดตแบบเรียลไทม์"
  • ระยะเวลาในการอ่านบทความ
ป้าย - ข้อความ ไม่บังคับ

ชื่อป้าย

หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ

ป้าย - รูปภาพ ไม่บังคับ

รูปภาพขนาดเล็ก

การปรับแต่ง UX พิเศษ เช่น การซ้อนทับป้ายบนภาพ/วิดีโอ ภาพปก

หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
หมวดหมู่เนื้อหา ไม่บังคับ อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี

รายการ Enum

ดูคำแนะนำได้ที่ส่วนหมวดหมู่เนื้อหา

ArticleEntity

แอตทริบิวต์ ข้อกำหนด คำอธิบาย รูปแบบ
URI การดำเนินการ ต้องระบุ

ทำ Deep Link ไปยังเอนทิตีในแอปผู้ให้บริการ

หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้

URI
ชื่อ ต้องระบุ ชื่อของเอนทิตี

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด 50 อักขระ

รูปภาพโปสเตอร์ ไม่บังคับ

เราจะแสดงรูปภาพเพียง 1 รูปเมื่อได้รับรูปภาพหลายรูป สัดส่วนภาพที่แนะนำคือ 16:9

หมายเหตุ: ขอแนะนำให้ใช้รูปภาพ หากมีป้าย โปรดเว้นพื้นที่ปลอดภัย 24 dp ทั้งด้านบนและด้านล่างของรูปภาพ

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
แหล่งที่มา - ชื่อ ไม่บังคับ ชื่อผู้เขียน องค์กร หรือผู้สื่อข่าว

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: ไม่เกิน 25 อักขระ

แหล่งที่มา - รูปภาพ ไม่บังคับ รูปภาพของแหล่งที่มา เช่น ผู้เขียน องค์กร นักข่าว ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
คำอธิบาย ไม่บังคับ

ข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี

หมายเหตุ: ระบบจะแสดงรายการคำอธิบายหรือคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งแก่ผู้ใช้ ไม่ใช่ทั้ง 2 รายการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: 180 อักขระ

รายการคำบรรยาย ไม่บังคับ

คำบรรยายแทนเสียงสูงสุด 3 รายการ โดยแต่ละรายการเป็นข้อความ 1 บรรทัด

หมายเหตุ: ระบบจะแสดงรายการคำอธิบายหรือคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งแก่ผู้ใช้ ไม่ใช่ทั้ง 2 รายการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำสำหรับคำบรรยายแทนเสียงแต่ละรายการ: สูงสุด 50 อักขระ

ป้าย ไม่บังคับ

ป้ายแต่ละป้ายเป็นข้อความอิสระ (สูงสุด 15 อักขระ) หรือรูปภาพขนาดเล็ก

การจัดการ UX พิเศษที่ด้านบนของรูปภาพ/วิดีโอ เช่น การวางซ้อนป้ายบนรูปภาพ

  • "อัปเดตแบบเรียลไทม์"
  • ระยะเวลาในการอ่านบทความ
ป้าย - ข้อความ ไม่บังคับ

ชื่อป้าย

หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ

ป้าย - รูปภาพ ไม่บังคับ

รูปภาพขนาดเล็ก

การปรับแต่ง UX พิเศษ เช่น การซ้อนทับป้ายบนภาพ/วิดีโอ ภาพปก

หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
เวลาเผยแพร่เนื้อหา ไม่บังคับ นี่คือการประทับเวลา Epoch เป็นมิลลิวินาทีเมื่อมีการเผยแพร่ / อัปเดตเนื้อหาในแอป การประทับเวลา 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 dp ทั้งด้านบนและด้านล่างของรูปภาพ

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
ความนิยม - จำนวน ไม่บังคับ

ระบุจำนวนผู้ติดตามหรือค่าความนิยม เช่น - "3.7 ล้าน"

หมายเหตุ: หากระบุทั้งจำนวนและมูลค่าของจำนวน ระบบจะใช้จำนวน

สตริง

ขนาดข้อความที่แนะนำ: สูงสุด 20 อักขระสำหรับจำนวน + ป้ายกำกับ รวมกัน

ความนิยม - ค่าจำนวน ไม่บังคับ

จำนวนผู้ติดตามหรือค่าความนิยม

หมายเหตุ: ระบุค่าจำนวนหากแอปไม่ต้องการ จัดการตรรกะเกี่ยวกับวิธีเพิ่มประสิทธิภาพจำนวนมากสำหรับ ขนาดการแสดงผลต่างๆ หากระบุทั้งจำนวนและมูลค่าการนับ ระบบจะใช้จำนวน

ยาว
ความนิยม - ป้ายกำกับ ไม่บังคับ ระบุว่าป้ายกำกับความนิยมคืออะไร เช่น "ชอบ"

สตริง

ขนาดข้อความที่แนะนำ: สูงสุด 20 อักขระสำหรับจำนวน + ป้ายกำกับ รวมกัน

ความนิยม - ภาพ ไม่บังคับ

ระบุวัตถุประสงค์ของการโต้ตอบ ตัวอย่าง - รูปภาพที่แสดง ไอคอนชอบ อีโมจิ

ระบุรูปภาพได้มากกว่า 1 รูป แต่ระบบอาจไม่แสดงรูปภาพทั้งหมดในอุปกรณ์บางรูปแบบ

หมายเหตุ: ต้องเป็นรูปภาพสี่เหลี่ยมจัตุรัส 1:1

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
การจัดประเภท - ค่าสูงสุด ต้องระบุ

ค่าสูงสุดของสเกลการให้คะแนน

ต้องระบุหากมีการระบุค่าคะแนนปัจจุบันด้วย

ตัวเลข >= 0.0
การจัดประเภท - ค่าปัจจุบัน ต้องระบุ

ค่าปัจจุบันของรูปแบบการให้คะแนน

ต้องระบุหากระบุค่าสูงสุดของคะแนนด้วย

ตัวเลข >= 0.0
การให้คะแนน - จำนวน ไม่บังคับ

จำนวนการให้คะแนนสำหรับเอนทิตี

หมายเหตุ: ระบุฟิลด์นี้หากแอปของคุณ ควบคุมวิธีแสดงจำนวนต่อผู้ใช้ ใช้สตริงที่กระชับ เช่น หากจำนวนคือ 1,000,000 ให้พิจารณาใช้ตัวย่อ เช่น 1M เพื่อไม่ให้ระบบตัดจำนวนในขนาดการแสดงผลที่เล็กกว่า

สตริง
การจัดประเภท - ค่าจำนวน ไม่บังคับ

จำนวนการให้คะแนนสำหรับเอนทิตี

หมายเหตุ: ระบุช่องนี้หากคุณไม่ได้จัดการ ตรรกะการย่อคำที่แสดงด้วยตนเอง หากมีทั้งจำนวนและค่าจำนวน ระบบจะแสดงจำนวนต่อผู้ใช้

ยาว
สถานที่ - ประเทศ ไม่บังคับ ประเทศที่บุคคลนั้นอาศัยอยู่หรือปฏิบัติงาน

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด ~20 อักขระ

สถานที่ - เมือง ไม่บังคับ เมืองที่บุคคลนั้นอาศัยอยู่หรือปฏิบัติงาน

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด ~20 อักขระ

สถานที่ตั้ง - แสดงที่อยู่ ไม่บังคับ ระบบจะแสดงที่อยู่ที่บุคคลนั้นอาศัยอยู่หรือให้บริการแก่ผู้ใช้

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด ~20 อักขระ

สถานที่ตั้ง - ที่อยู่ ไม่บังคับ ที่อยู่ (หากมี) ที่บุคคลนั้นอยู่หรือให้บริการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด ~20 อักขระ

สถานที่ - รัฐ ไม่บังคับ รัฐ (หากมี) ที่บุคคลนั้นอาศัยอยู่หรือปฏิบัติงาน

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด ~20 อักขระ

สถานที่ตั้ง - รหัสไปรษณีย์ ไม่บังคับ รหัสไปรษณีย์ (หากมี) ของสถานที่ที่บุคคลนั้นอยู่หรือปฏิบัติงาน

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด ~20 อักขระ

สถานที่ - ย่าน ไม่บังคับ ย่าน (หากมี) ที่บุคคลนั้นอาศัยอยู่หรือให้บริการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด ~20 อักขระ

ป้าย ไม่บังคับ

ป้ายแต่ละป้ายเป็นข้อความอิสระ (สูงสุด 15 อักขระ) หรือรูปภาพขนาดเล็ก

ป้าย - ข้อความ ไม่บังคับ

ชื่อป้าย

หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ

ป้าย - รูปภาพ ไม่บังคับ

รูปภาพขนาดเล็ก

การปรับแต่ง UX พิเศษ เช่น การซ้อนทับป้ายบนภาพ/วิดีโอ ภาพปก

หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
คำอธิบาย ไม่บังคับ

ข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี

หมายเหตุ: ระบบจะแสดงรายการคำอธิบายหรือคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งแก่ผู้ใช้ ไม่ใช่ทั้ง 2 รายการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: 180 อักขระ

รายการคำบรรยาย ไม่บังคับ

คำบรรยายแทนเสียงสูงสุด 3 รายการ โดยแต่ละรายการเป็นข้อความ 1 บรรทัด

หมายเหตุ: ระบบจะแสดงรายการคำอธิบายหรือคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งแก่ผู้ใช้ ไม่ใช่ทั้ง 2 รายการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำสำหรับคำบรรยายแทนเสียงแต่ละรายการ: สูงสุด 50 อักขระ

หมวดหมู่เนื้อหา ไม่บังคับ อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี

รายการ Enum ที่มีสิทธิ์

  • TYPE_HEALTH_AND_FITENESS (ตัวอย่าง - ครูฝึกโยคะ/ฟิตเนส)
  • TYPE_HOME_AND_AUTO (ตัวอย่าง - ช่างประปา)
  • TYPE_SPORTS (ตัวอย่าง - ผู้เล่น)
  • TYPE_DATING

ดูคำแนะนำได้ที่ส่วนหมวดหมู่เนื้อหา

EventEntity

แอตทริบิวต์ ข้อกำหนด คำอธิบาย รูปแบบ
URI การดำเนินการ ต้องระบุ

ทำ Deep Link ไปยังเอนทิตีในแอปผู้ให้บริการ

หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้

URI
ชื่อ ต้องระบุ ชื่อของเอนทิตี

สตริง

ขนาดข้อความที่แนะนำ: สูงสุด 50 อักขระ

เวลาเริ่มต้น ต้องระบุ

การประทับเวลา Epoch เมื่อคาดว่ากิจกรรมจะเริ่มต้น

หมายเหตุ: ค่านี้จะแสดงในหน่วยมิลลิวินาที

การประทับเวลา 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 เมื่อคาดว่าเหตุการณ์จะสิ้นสุด

หมายเหตุ: ค่านี้จะแสดงในหน่วยมิลลิวินาที

การประทับเวลา Epoch ในหน่วยมิลลิวินาที
คำอธิบาย ไม่บังคับ

ข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี

หมายเหตุ: ระบบจะแสดงรายการคำอธิบายหรือคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งแก่ผู้ใช้ ไม่ใช่ทั้ง 2 รายการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: 180 อักขระ

รายการคำบรรยาย ไม่บังคับ

คำบรรยายแทนเสียงสูงสุด 3 รายการ โดยแต่ละรายการเป็นข้อความ 1 บรรทัด

หมายเหตุ: ระบบจะแสดงรายการคำอธิบายหรือคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งแก่ผู้ใช้ ไม่ใช่ทั้ง 2 รายการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำสำหรับคำบรรยายแทนเสียงแต่ละรายการ: สูงสุด 50 อักขระ

ป้าย ไม่บังคับ

ป้ายแต่ละป้ายเป็นข้อความอิสระ (สูงสุด 15 อักขระ) หรือรูปภาพขนาดเล็ก

ป้าย - ข้อความ ไม่บังคับ

ชื่อป้าย

หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ

ป้าย - รูปภาพ ไม่บังคับ

รูปภาพขนาดเล็ก

การปรับแต่ง UX พิเศษ เช่น การซ้อนทับป้ายบนภาพ/วิดีโอ ภาพปก

หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
ราคา - CurrentPrice ต้องมีแบบมีเงื่อนไข

ราคาปัจจุบันของตั๋ว/บัตรผ่านสำหรับกิจกรรม

ต้องระบุหากระบุราคาที่ขีดฆ่า

ข้อความอิสระ
ราคา - StrikethroughPrice ไม่บังคับ ราคาเดิมของตั๋ว/บัตรผ่านสำหรับกิจกรรม ข้อความอิสระ
ข้อความไฮไลต์ราคา ไม่บังคับ ข้อความราคาเพื่อแสดงโปรโมชัน กิจกรรม ส่วนลดสำหรับสมาชิก หากมี

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไป อาจแสดงเป็นจุดไข่ปลา)

หมวดหมู่เนื้อหา ไม่บังคับ อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี

รายการ Enum ที่มีสิทธิ์

  • TYPE_MOVIES_AND_TV_SHOWS (ตัวอย่าง - โรงภาพยนตร์)
  • TYPE_DIGITAL_GAMES (ตัวอย่าง - อีสปอร์ต)
  • TYPE_MUSIC (ตัวอย่าง - คอนเสิร์ต)
  • TYPE_TRAVEL_AND_LOCAL (ตัวอย่าง - ทัวร์ เทศกาล)
  • TYPE_HEALTH_AND_FITENESS (ตัวอย่าง - คลาสโยคะ)
  • TYPE_EDUCATION (ตัวอย่าง - ชั้นเรียน)
  • TYPE_SPORTS (ตัวอย่าง - การแข่งขันฟุตบอล)
  • TYPE_DATING (ตัวอย่าง - meetup)

ดูคำแนะนำได้ที่ส่วนหมวดหมู่เนื้อหา

EventReservationEntity

แอตทริบิวต์ ข้อกำหนด คำอธิบาย รูปแบบ
URI การดำเนินการ ต้องระบุ

ทำ Deep Link ไปยังเอนทิตีในแอปผู้ให้บริการ

หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้

URI
ชื่อ ต้องระบุ ชื่อของเอนทิตี

สตริง

ขนาดข้อความที่แนะนำ: สูงสุด 50 อักขระ

เวลาเริ่มต้น ต้องระบุ

การประทับเวลา Epoch เมื่อคาดว่ากิจกรรมจะเริ่มต้น

หมายเหตุ: ค่านี้จะแสดงในหน่วยมิลลิวินาที

การประทับเวลา Epoch ในหน่วยมิลลิวินาที
โหมดกิจกรรม ต้องระบุ

ฟิลด์เพื่อระบุว่ากิจกรรมจะเป็นแบบเสมือนจริง แบบเข้าร่วมด้วยตนเอง หรือทั้ง 2 แบบ

Enum: 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 เมื่อคาดว่าเหตุการณ์จะสิ้นสุด

หมายเหตุ: ค่านี้จะแสดงในหน่วยมิลลิวินาที

การประทับเวลา Epoch ในหน่วยมิลลิวินาที
ผู้ให้บริการ - ชื่อ ไม่บังคับ

ชื่อของผู้ให้บริการ

หมายเหตุ:ผู้ให้บริการต้องระบุข้อความหรือรูปภาพ

ข้อความอิสระ เช่น ชื่อของผู้จัดกิจกรรม/ทัวร์
ผู้ให้บริการ - รูปภาพ ไม่บังคับ

โลโก้/รูปภาพของผู้ให้บริการ

หมายเหตุ:ผู้ให้บริการต้องระบุข้อความหรือรูปภาพ

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
คำอธิบาย ไม่บังคับ

ข้อความ 1 ย่อหน้าเพื่ออธิบายเอนทิตี

หมายเหตุ: ระบบจะแสดงรายการคำอธิบายหรือคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งแก่ผู้ใช้ ไม่ใช่ทั้ง 2 รายการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: 180 อักขระ

รายการคำบรรยาย ไม่บังคับ

คำบรรยายแทนเสียงสูงสุด 3 รายการ โดยแต่ละรายการเป็นข้อความ 1 บรรทัด

หมายเหตุ: ระบบจะแสดงรายการคำอธิบายหรือคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งแก่ผู้ใช้ ไม่ใช่ทั้ง 2 รายการ

ข้อความอิสระ

ขนาดข้อความที่แนะนำสำหรับคำบรรยายแทนเสียงแต่ละรายการ: สูงสุด 50 อักขระ

ป้าย ไม่บังคับ

ป้ายแต่ละป้ายเป็นข้อความอิสระ (สูงสุด 15 อักขระ) หรือรูปภาพขนาดเล็ก

ป้าย - ข้อความ ไม่บังคับ

ชื่อป้าย

หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: สูงสุด 15 อักขระ

ป้าย - รูปภาพ ไม่บังคับ

รูปภาพขนาดเล็ก

การปรับแต่ง UX พิเศษ เช่น การซ้อนทับป้ายบนภาพ/วิดีโอ ภาพปก

หมายเหตุ: ป้ายต้องมีข้อความหรือรูปภาพ

ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
รหัสการจอง ไม่บังคับ รหัสการจองสำหรับการจองกิจกรรม ข้อความอิสระ
ราคา - CurrentPrice ต้องมีแบบมีเงื่อนไข

ราคาปัจจุบันของตั๋ว/บัตรผ่านสำหรับกิจกรรม

ต้องระบุหากระบุราคาที่ขีดฆ่า

ข้อความอิสระ
ราคา - StrikethroughPrice ไม่บังคับ ราคาเดิมของตั๋ว/บัตรผ่านสำหรับกิจกรรม ข้อความอิสระ
ข้อความไฮไลต์ราคา ไม่บังคับ ข้อความราคาเพื่อแสดงโปรโมชัน กิจกรรม ส่วนลดสำหรับสมาชิก หากมี

ข้อความอิสระ

ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไป อาจแสดงเป็นจุดไข่ปลา)

การจัดประเภท - ค่าสูงสุด ไม่บังคับ

ค่าสูงสุดของสเกลการให้คะแนน

ต้องระบุหากมีการระบุค่าคะแนนปัจจุบันด้วย

ตัวเลข >= 0.0
การจัดประเภท - ค่าปัจจุบัน ไม่บังคับ

ค่าปัจจุบันของรูปแบบการให้คะแนน

ต้องระบุหากระบุค่าสูงสุดของคะแนนด้วย

ตัวเลข >= 0.0
การให้คะแนน - จำนวน ไม่บังคับ

จำนวนการให้คะแนนสำหรับกิจกรรม

หมายเหตุ: ระบุฟิลด์นี้หากแอปต้องการ ควบคุมวิธีแสดงต่อผู้ใช้ โปรดระบุสตริงที่กระชับ ซึ่งแสดงต่อผู้ใช้ได้ เช่น หากจำนวนคือ 1,000,000 ให้พิจารณาใช้ตัวย่อ เช่น 1M เพื่อไม่ให้ระบบ ตัดข้อความในขนาดการแสดงผลที่เล็กลง

สตริง
การจัดประเภท - ค่าจำนวน ไม่บังคับ

จำนวนการให้คะแนนสำหรับกิจกรรม

หมายเหตุ: ระบุช่องนี้หากไม่ต้องการจัดการ ตรรกะการย่อการแสดงผลด้วยตนเอง หากมีทั้งจำนวนและค่าจำนวน เราจะใช้จำนวนเพื่อแสดงต่อผู้ใช้

ยาว
หมวดหมู่เนื้อหา ไม่บังคับ อธิบายหมวดหมู่ของเนื้อหาในเอนทิตี

รายการ Enum ที่มีสิทธิ์

  • TYPE_MOVIES_AND_TV_SHOWS (ตัวอย่าง - โรงภาพยนตร์)
  • TYPE_DIGITAL_GAMES (ตัวอย่าง - อีสปอร์ต)
  • TYPE_MUSIC (ตัวอย่าง - คอนเสิร์ต)
  • TYPE_TRAVEL_AND_LOCAL (ตัวอย่าง - ทัวร์ เทศกาล)
  • TYPE_HEALTH_AND_FITENESS (ตัวอย่าง - คลาสโยคะ)
  • TYPE_EDUCATION (ตัวอย่าง - ชั้นเรียน)
  • TYPE_SPORTS (ตัวอย่าง - การแข่งขันฟุตบอล)
  • TYPE_DATING (ตัวอย่าง - meetup)

ดูคำแนะนำได้ที่ส่วนหมวดหมู่เนื้อหา

ข้อกำหนดเกี่ยวกับรูปภาพ

ข้อกำหนดที่จำเป็นสำหรับชิ้นงานรูปภาพแสดงอยู่ในตารางนี้

สัดส่วนภาพ พิกเซลขั้นต่ำ พิกเซลที่แนะนํา

สี่เหลี่ยมจัตุรัส (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 เข้าถึงรูปภาพได้

หลักเกณฑ์ในการใช้หมวดหมู่เนื้อหา

  1. เอนทิตีบางรายการ เช่น ArticleEntity และ GenericFeaturedEntity มีสิทธิ์ใช้หมวดหมู่เนื้อหาใดก็ได้ สำหรับเอนทิตีอื่นๆ เช่น EventEntity, EventReservationEntity, PersonEntity จะมีเพียงกลุ่มย่อย ของหมวดหมู่เหล่านี้เท่านั้นที่มีสิทธิ์ ตรวจสอบรายการหมวดหมู่ที่มีสิทธิ์สำหรับ ประเภทเอนทิตีก่อนที่จะป้อนข้อมูลในรายการ
  2. ใช้ประเภทเอนทิตีที่เฉพาะเจาะจงสำหรับหมวดหมู่เนื้อหาบางหมวดหมู่แทนการใช้ร่วมกันระหว่างเอนทิตีทั่วไปกับ ContentCategory

  3. ฟิลด์ ContentCategory เป็นฟิลด์ที่ไม่บังคับและควรเว้นว่างไว้หากเนื้อหาไม่ได้อยู่ในหมวดหมู่ใดๆ ที่กล่าวถึงก่อนหน้านี้

  4. ในกรณีที่มีการระบุหมวดหมู่เนื้อหาหลายรายการ ให้ระบุตามลำดับความเกี่ยวข้องกับเนื้อหา โดยให้หมวดหมู่เนื้อหาที่เกี่ยวข้องมากที่สุดอยู่ด้านบนสุดของรายการ

ขั้นตอนที่ 2: ระบุข้อมูลคลัสเตอร์

ขอแนะนำให้เรียกใช้การเผยแพร่เนื้อหาในเบื้องหลัง (เช่น ใช้ WorkManager) และกำหนดเวลาเป็นประจำหรือตามเหตุการณ์ (เช่น ทุกครั้งที่ ผู้ใช้เปิดแอปหรือเมื่อผู้ใช้เพิ่งเพิ่มสินค้าลงในรถเข็น)

AppEngagePublishClient มีหน้าที่เผยแพร่คลัสเตอร์

API ต่อไปนี้ใช้เพื่อเผยแพร่คลัสเตอร์ในไคลเอ็นต์

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • deleteUserManagementCluster
  • deleteClusters

isServiceAvailable

API นี้ใช้เพื่อตรวจสอบว่าบริการพร้อมใช้งานสำหรับการผสานรวมหรือไม่ และ สามารถแสดงเนื้อหาในอุปกรณ์ได้หรือไม่

คุณสามารถตรวจสอบความพร้อมให้บริการสำหรับคลัสเตอร์ทุกประเภทที่ต้องการ เผยแพร่ isServiceAvailable API ยอมรับออบเจ็กต์คำขอ ServiceAvailabilityRequest ซึ่งมีประเภทคลัสเตอร์ที่ต้องตรวจสอบความพร้อมให้บริการ คุณดูClusterTypeค่า enum ที่จำเป็นสำหรับ ServiceAvailabilityRequest ได้จากตารางต่อไปนี้

ประเภทคลัสเตอร์ ค่าคงที่ของประเภทคลัสเตอร์ ค่าจำนวนเต็ม
ไม่ทราบ TYPE_UNKNOWN 0
คลัสเตอร์คำแนะนำ TYPE_RECOMMENDATION 1
คลัสเตอร์แนะนำ TYPE_FEATURED 2
คลัสเตอร์ความต่อเนื่อง TYPE_CONTINUATION 3
คลัสเตอร์การจัดการผู้ใช้ TYPE_ENGAGEMENT 8
คลัสเตอร์การสมัครใช้บริการ TYPE_SUBSCRIPTION 12

Kotlin

val request = ServiceAvailabilityRequest.Builder()
    .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
    .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
    .build()

client.isServiceAvailable(request).addOnCompleteListener { task ->
    if (task.isSuccessful) {
        val availabilityMap = task.result
        if (availabilityMap[ClusterType.TYPE_CONTINUATION] == true) {
            // Proceed with publishing continuation content
        }
        if (availabilityMap[ClusterType.TYPE_RECOMMENDATION] == true) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
}

Java

ServiceAvailabilityRequest request =
    new ServiceAvailabilityRequest.Builder()
        .addIntendedClusterType(ClusterType.TYPE_CONTINUATION)
        .addIntendedClusterType(ClusterType.TYPE_RECOMMENDATION)
        .build();

client.isServiceAvailable(request).addOnCompleteListener(task -> {
    if (task.isSuccessful()) {
        Map<Integer, Boolean> availabilityMap = task.getResult();
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_CONTINUATION))) {
            // Proceed with publishing continuation content
        }
        if (Boolean.TRUE.equals(availabilityMap.get(ClusterType.TYPE_RECOMMENDATION))) {
            // Proceed with publishing recommendation content
        }
    } else {
        // The IPC call itself fails, proceed with error handling logic here,
        // such as retry.
    }
});
ฟีเจอร์ความพร้อมให้บริการแบบมีเงื่อนไข

แอปที่ผสานรวมบางแอปขอการกำหนดค่าพิเศษที่เปิดและปิดใช้ บริการ Engage เป็นระยะๆ เพื่อลดต้นทุนการแสดงโฆษณา แม้ว่ากลยุทธ์การนำเข้าเนื้อหาเป็นระยะๆ นี้จะทำได้ แต่ก็ส่งผลเสียต่อผู้ใช้และผลิตภัณฑ์ เนื่องจากระบบจะไม่แสดงเนื้อหาที่ไม่มีอัปเดต และบางแพลตฟอร์มจะไม่แสดงเนื้อหาเลย

ตั้งแต่เวอร์ชัน 1.6.0 เป็นต้นไป Engage SDK จะอนุญาตให้ตรวจสอบความพร้อมใช้งานสำหรับคลัสเตอร์ประเภทใดประเภทหนึ่ง ซึ่งจะช่วยให้มีความยืดหยุ่นมากขึ้น ดังนั้นหากแอปพลิเคชันหนึ่งๆ ใช้กลยุทธ์คอนเทนต์แบบไม่ต่อเนื่อง คลัสเตอร์บางประเภทจะใช้กลยุทธ์แบบไม่ต่อเนื่องนั้นได้ ในขณะที่คลัสเตอร์ประเภทอื่นๆ จะเปิดใช้เสมอ (เช่น คลัสเตอร์ความต่อเนื่อง)

หากไม่ควรเปิดใช้บริการ Engage อย่าง "ต่อเนื่อง" ในอุปกรณ์ที่รองรับทั้งหมดไม่ว่าด้วยเหตุผลใดก็ตาม และมีการกำหนดค่าสำหรับการส่งผ่านข้อมูลเป็นระยะๆ สำหรับอุปกรณ์ชุดใดก็ตาม การเผยแพร่คลัสเตอร์การดำเนินการต่อทั้งหมด (เช่น อ่านต่อและการจองกิจกรรม) จะยังคงเปิดใช้โดยการกำหนดค่าเริ่มต้น และคลัสเตอร์ประเภทอื่นๆ จะเปิดใช้และปิดใช้เป็นระยะๆ หากการส่งผ่านข้อมูลเป็นระยะๆ มีผลกับคุณ แต่การกำหนดค่าเริ่มต้นนี้ ไม่เหมาะกับความต้องการของคุณ โปรดติดต่อ engage-developers@google.com

สำหรับ SDK เวอร์ชันก่อน v1.6.0 (เลิกใช้งานแล้ว)

Kotlin

client.isServiceAvailable.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        // Handle IPC call success
        if(task.result) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
}

Java

client.isServiceAvailable().addOnCompleteListener(task - > {
    if (task.isSuccessful()) {
        // Handle success
        if(task.getResult()) {
          // Service is available on the device, proceed with content publish
          // calls.
        } else {
          // Service is not available, no further action is needed.
        }
    } else {
      // The IPC call itself fails, proceed with error handling logic here,
      // such as retry.
    }
});

publishRecommendationClusters

API นี้ใช้เพื่อเผยแพร่รายการออบเจ็กต์ RecommendationCluster

Kotlin

client.publishRecommendationClusters(
      PublishRecommendationClustersRequest.Builder()
        .addRecommendationCluster(
          RecommendationCluster.Builder()
            .addEntity(entity1)
            .addEntity(entity2)
            .setTitle("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 ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก
  • ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์ Continuation ที่อัปเดต

ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้

publishUserAccountManagementRequest

API นี้ใช้เพื่อเผยแพร่การ์ดลงชื่อเข้าใช้ การดำเนินการลงชื่อเข้าใช้นำผู้ใช้ไปยังหน้าลงชื่อเข้าใช้ของแอปเพื่อให้แอปเผยแพร่เนื้อหาได้ (หรือแสดงเนื้อหาที่ปรับเปลี่ยนในแบบของคุณมากขึ้น)

ข้อมูลเมตาต่อไปนี้เป็นส่วนหนึ่งของการ์ดลงชื่อเข้าใช้

แอตทริบิวต์ ข้อกำหนด คำอธิบาย
URI การดำเนินการ ต้องระบุ Deep Link ไปยังการดำเนินการ (เช่น ไปยังหน้าลงชื่อเข้าใช้แอป)
รูปภาพ ไม่บังคับ - หากไม่ได้ระบุ ต้องระบุชื่อ

รูปภาพที่แสดงในการ์ด

รูปภาพที่มีสัดส่วนภาพ 16x9 และมีความละเอียด 1264x712

ชื่อ ไม่บังคับ - หากไม่ได้ระบุ ต้องระบุรูปภาพ ชื่อบนบัตร
ข้อความเกี่ยวกับการดำเนินการ ไม่บังคับ ข้อความที่แสดงใน CTA (เช่น ลงชื่อเข้าใช้)
ชื่อรอง ไม่บังคับ คำบรรยายแทนเสียงที่ไม่บังคับในการ์ด

Kotlin

var SIGN_IN_CARD_ENTITY =
      SignInCardEntity.Builder()
          .addPosterImage(
              Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build()

client.publishUserAccountManagementRequest(
            PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

Java

SignInCardEntity SIGN_IN_CARD_ENTITY =
      new SignInCardEntity.Builder()
          .addPosterImage(
              new Image.Builder()
                  .setImageUri(Uri.parse("http://www.x.com/image.png"))
                  .setImageHeightInPixel(500)
                  .setImageWidthInPixel(500)
                  .build())
          .setActionText("Sign In")
          .setActionUri(Uri.parse("http://xx.com/signin"))
          .build();

client.publishUserAccountManagementRequest(
            new PublishUserAccountManagementRequest.Builder()
                .setSignInCardEntity(SIGN_IN_CARD_ENTITY)
                .build());

เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายใน ธุรกรรมเดียว

  • ระบบจะนำข้อมูล UserAccountManagementCluster ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก
  • ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์ UserAccountManagementCluster ที่อัปเดต

ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้

updatePublishStatus

หากไม่มีการเผยแพร่คลัสเตอร์ใดเลยเนื่องด้วยเหตุผลทางธุรกิจภายใน เราขอแนะนำให้อัปเดตสถานะการเผยแพร่โดยใช้ API updatePublishStatus ซึ่งเป็นสิ่งสำคัญเนื่องจากเหตุผลต่อไปนี้

  • การระบุสถานะในทุกสถานการณ์ แม้ว่าเนื้อหาจะเผยแพร่แล้ว (STATUS == PUBLISHED) ก็มีความสำคัญต่อการสร้างแดชบอร์ดที่ใช้สถานะที่ชัดเจนนี้เพื่อสื่อถึงสถานะและเมตริกอื่นๆ ของการผสานรวม
  • หากไม่มีการเผยแพร่เนื้อหา แต่สถานะการผสานรวมไม่ขาดตอน (STATUS == NOT_PUBLISHED) Google จะหลีกเลี่ยงการทริกเกอร์การแจ้งเตือนในแดชบอร์ด สุขภาพของแอปได้ โดยจะยืนยันว่าเนื้อหาไม่ได้เผยแพร่เนื่องจากสถานการณ์ที่คาดการณ์ไว้จากมุมมองของผู้ให้บริการ
  • ซึ่งจะช่วยให้นักพัฒนาแอปได้รับข้อมูลเชิงลึกเกี่ยวกับเวลาที่เผยแพร่ข้อมูลเทียบกับเวลาที่ไม่ได้เผยแพร่
  • Google อาจใช้รหัสสถานะเพื่อกระตุ้นให้ผู้ใช้ดำเนินการบางอย่างใน แอปเพื่อให้ผู้ใช้เห็นเนื้อหาของแอปหรือแก้ไขปัญหา

รหัสสถานะการเผยแพร่ที่มีสิทธิ์มีดังนี้

// Content is published
AppEngagePublishStatusCode.PUBLISHED,

// Content is not published as user is not signed in
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN,

// Content is not published as user is not subscribed
AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SUBSCRIPTION,

// Content is not published as user location is ineligible
AppEngagePublishStatusCode.NOT_PUBLISHED_INELIGIBLE_LOCATION,

// Content is not published as there is no eligible content
AppEngagePublishStatusCode.NOT_PUBLISHED_NO_ELIGIBLE_CONTENT,

// Content is not published as the feature is disabled by the client
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_FEATURE_DISABLED_BY_CLIENT,

// Content is not published as the feature due to a client error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_CLIENT_ERROR,

// Content is not published as the feature due to a service error
// Available in v1.3.1
AppEngagePublishStatusCode.NOT_PUBLISHED_SERVICE_ERROR,

// Content is not published due to some other reason
// Reach out to engage-developers@ before using this enum.
AppEngagePublishStatusCode.NOT_PUBLISHED_OTHER

หากเนื้อหาไม่ได้รับการเผยแพร่เนื่องจากผู้ใช้ไม่ได้เข้าสู่ระบบ Google จะ แนะนําให้เผยแพร่การ์ดลงชื่อเข้าใช้ หากผู้ให้บริการไม่สามารถเผยแพร่การ์ดลงชื่อเข้าใช้ได้ไม่ว่าด้วยเหตุผลใดก็ตาม เราขอแนะนำให้เรียกใช้ API updatePublishStatus ด้วยรหัสสถานะ NOT_PUBLISHED_REQUIRES_SIGN_IN

Kotlin

client.updatePublishStatus(
   PublishStatusRequest.Builder()
     .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
     .build())

Java

client.updatePublishStatus(
    new PublishStatusRequest.Builder()
        .setStatusCode(AppEngagePublishStatusCode.NOT_PUBLISHED_REQUIRES_SIGN_IN)
        .build());

deleteRecommendationClusters

API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์คำแนะนำ

Kotlin

client.deleteRecommendationClusters()

Java

client.deleteRecommendationClusters();

เมื่อได้รับคำขอ บริการจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์คำแนะนำ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและ คงสถานะเดิมไว้

deleteFeaturedCluster

API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์แนะนำ

Kotlin

client.deleteFeaturedCluster()

Java

client.deleteFeaturedCluster();

เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์แนะนำ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้

deleteContinuationCluster

API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์การต่อเนื่อง

Kotlin

client.deleteContinuationCluster()

Java

client.deleteContinuationCluster();

เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์การดำเนินการต่อ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและ คงสถานะเดิมไว้

deleteUserManagementCluster

API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ UserAccountManagement

Kotlin

client.deleteUserManagementCluster()

Java

client.deleteUserManagementCluster();

เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ UserAccountManagement ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้

deleteClusters

API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ประเภทที่กำหนด

Kotlin

client.deleteClusters(
    DeleteClustersRequest.Builder()
      .addClusterType(ClusterType.TYPE_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());

เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ทั้งหมดที่ตรงกับประเภทคลัสเตอร์ที่ระบุ ไคลเอ็นต์เลือกส่งประเภทคลัสเตอร์อย่างน้อย 1 ประเภทได้ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้

การจัดการข้อผิดพลาด

เราขอแนะนำอย่างยิ่งให้รับฟังผลลัพธ์ของงานจาก 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 Intent คือการเปิดใช้งานแอปอีกครั้งและการบังคับซิงค์ข้อมูลเป็นหลัก Broadcast Intent ไม่ได้ออกแบบมาให้ส่งบ่อยมาก ระบบจะทริกเกอร์ ก็ต่อเมื่อบริการ Engage ระบุว่าเนื้อหาอาจล้าสมัย (เช่น มีอายุ 1 สัปดาห์) วิธีนี้จะช่วยให้มั่นใจได้มากขึ้นว่าผู้ใช้จะได้รับประสบการณ์การใช้งานเนื้อหาใหม่ๆ แม้ว่าจะไม่ได้เรียกใช้แอปพลิเคชันเป็นเวลานานก็ตาม

ต้องตั้งค่า BroadcastReceiver ด้วย 2 วิธีต่อไปนี้

  • ลงทะเบียนอินสแตนซ์ของคลาส BroadcastReceiver แบบไดนามิกโดยใช้ Context.registerReceiver() ซึ่งจะช่วยให้แอปพลิเคชันที่ยังคงทำงานอยู่ในหน่วยความจำสามารถสื่อสารได้

Kotlin

class AppEngageBroadcastReceiver : BroadcastReceiver(){
  // Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
  // is received
  // Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received
  // Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
  // received
}

fun registerBroadcastReceivers(context: Context){
  var  context = context
  context = context.applicationContext

// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Featured Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FEATURED),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)

// Register Continuation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_CONTINUATION),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)
}

Java

class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION broadcast
// is received

// Trigger featured cluster publish when PUBLISH_FEATURED broadcast is received

// Trigger continuation cluster publish when PUBLISH_CONTINUATION broadcast is
// received
}

public static void registerBroadcastReceivers(Context context) {

context = context.getApplicationContext();

// Register Recommendation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_RECOMMENDATION),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);

}
  • ประกาศการติดตั้งใช้งานแบบคงที่ด้วยแท็ก <receiver> ในไฟล์ AndroidManifest.xml ซึ่งจะช่วยให้แอปพลิเคชันรับ Broadcast Intent ได้เมื่อไม่ได้ทำงาน และยังช่วยให้แอปพลิเคชันเผยแพร่ เนื้อหาได้ด้วย

<application>
   <receiver
      android:name=".AppEngageBroadcastReceiver"
      android:permission="com.google.android.engage.REQUEST_ENGAGE_DATA"
      android:exported="true"
      android:enabled="true">
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
      </intent-filter>
   </receiver>
</application>

บริการจะส่ง Intent ต่อไปนี้

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION ขอแนะนำ ให้เริ่มการโทร publishRecommendationClusters เมื่อได้รับเจตนานี้
  • com.google.android.engage.action.PUBLISH_FEATURED เราขอแนะนำให้ เริ่มการโทร publishFeaturedCluster เมื่อได้รับ Intent นี้
  • com.google.android.engage.action.PUBLISH_CONTINUATION เราขอแนะนำให้ เริ่มการโทร publishContinuationCluster เมื่อได้รับ Intent นี้

ขั้นตอนการทำงานของการผสานรวม

ดูคำแนะนำแบบทีละขั้นตอนเกี่ยวกับการยืนยันการผสานรวมหลังจากเสร็จสมบูรณ์ได้ที่ เวิร์กโฟลว์การผสานรวมสำหรับนักพัฒนาแอปของ Engage

คำถามที่พบบ่อย

ดูคำถามที่พบบ่อยเกี่ยวกับ Engage SDK

รายชื่อติดต่อ

โปรดติดต่อ engage-developers@google.com หากมีข้อสงสัย ในระหว่างกระบวนการผสานรวม

ขั้นตอนถัดไป

หลังจากผสานรวมเสร็จแล้ว ขั้นตอนถัดไปที่คุณต้องทำมีดังนี้

  • ส่งอีเมลไปที่ engage-developers@google.com และ แนบ APK ที่ผสานรวมแล้วซึ่งพร้อมให้ Google ทดสอบ
  • Google จะทำการยืนยันและตรวจสอบภายในเพื่อให้แน่ใจว่าการผสานรวมทำงานได้ตามที่คาดไว้ หากจำเป็นต้องเปลี่ยนแปลง Google จะติดต่อคุณ พร้อมรายละเอียดที่จำเป็น
  • เมื่อการทดสอบเสร็จสมบูรณ์และไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ Google จะติดต่อคุณเพื่อ แจ้งให้ทราบว่าคุณเริ่มเผยแพร่ APK ที่อัปเดตและผสานรวมแล้วไปยัง Play Store ได้
  • หลังจาก Google ยืนยันว่า APK ที่อัปเดตของคุณได้รับการเผยแพร่ใน Play Store แล้ว คลัสเตอร์แนะนำ แนะนำ และเล่นต่อ อาจได้รับการเผยแพร่และแสดงต่อผู้ใช้