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

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

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

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

คำศัพท์

การผสานรวมนี้ประกอบด้วยคลัสเตอร์ 3 ประเภท ได้แก่ วิดีโอแนะนำ แนะนำ และดูต่อ

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

    • คลัสเตอร์วิดีโอแนะนำอาจประกอบด้วย ArticleEntity, PersonEntity หรือ EventEntity แต่จะใช้เอนทิตีประเภทต่างๆ ผสมกันไม่ได้

    คำแนะนำจะมีโครงสร้างดังต่อไปนี้

    • คลัสเตอร์วิดีโอแนะนำ: มุมมอง UI ที่มีกลุ่มวิดีโอแนะนำจากพาร์ทเนอร์นักพัฒนาแอปรายเดียวกัน

    • เอนทิตี: ออบเจ็กต์ที่แสดงรายการเดียวในคลัสเตอร์ การผสานรวมนี้จะแสดงเอนทิตีบางรายการโดยใช้คลัสเตอร์วิดีโอแนะนำ ดังนี้

      • ArticleEntity: ArticleEntity แสดงถึงคำแนะนำสำหรับเนื้อหาแบบข้อความที่เกี่ยวข้องกับการหาคู่ รายการ ArticleEntity ช่วยให้นักพัฒนาแอปสามารถแสดงเนื้อหาข้อความและรูปภาพที่หลากหลาย พร้อมข้อมูลเมตาเพิ่มเติมเพื่ออธิบายข้อมูลให้ผู้ใช้ทราบ

        รูปที่ 1: UI แสดง ArticleEntity รายการเดียวภายในคลัสเตอร์ Recommendations
      • PersonEntity: PersonEntity แสดงถึงบุคคล คำแนะนำอาจเป็นการไฮไลต์บุคคลในกลุ่มผู้มีโอกาสเป็นคู่เดต

        รูปที่ 2: UI แสดง PersonEntity รายการเดียวภายในคลัสเตอร์คำแนะนำ
      • EventEntity: EventEntity แสดงถึงกิจกรรมที่จะเกิดขึ้นในอนาคต เวลาเริ่มต้นของกิจกรรมเป็นข้อมูลสำคัญที่ต้องแจ้งให้ผู้ใช้ทราบ

        รูปที่ 3: UI แสดง EventEntity รายการเดียวภายในคลัสเตอร์วิดีโอแนะนำ
  • คลัสเตอร์ความต่อเนื่องจะแสดงเนื้อหาที่ผู้ใช้เพิ่งมีส่วนร่วมจากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการจัดกลุ่ม UI เดียว พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะได้รับอนุญาตให้ออกอากาศเอนทิตีได้สูงสุด 10 รายการในคลัสเตอร์ความต่อเนื่อง

    เนื้อหาที่ต่อเนื่องอาจมีโครงสร้างดังนี้

    • ArticleEntity: ArticleEntity แสดงถึงคำแนะนำสำหรับเนื้อหาแบบข้อความที่เกี่ยวข้องกับการหาคู่ เอนทิตีนี้ใช้เพื่อแสดงบทความข่าวหรือเนื้อหาอื่นๆ ที่ยังอ่านไม่จบซึ่งผู้ใช้ต้องการอ่านต่อจากที่ค้างไว้

      รูปที่ 6 UI แสดง ArticleEntity รายการเดียวภายในคลัสเตอร์ความต่อเนื่อง
    • EventReservationEntity: EventReservationEntity แสดงถึงการจองกิจกรรมและช่วยให้ผู้ใช้ติดตามการจองกิจกรรมการออกเดตและการพบปะที่กำลังจะเกิดขึ้นหรือกำลังดำเนินอยู่

      รูปที่ 8 UI แสดง EventReservationEntity รายการเดียวภายในคลัสเตอร์ความต่อเนื่อง
  • คลัสเตอร์แนะนำคือมุมมอง UI ที่แสดงGenericFeaturedEntityที่โดดเด่นซึ่งเลือกมาจากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการจัดกลุ่ม UI เดียว มีคลัสเตอร์แนะนำเพียงคลัสเตอร์เดียว ซึ่งจะแสดงใกล้กับด้านบนของ UI โดยมีตำแหน่งที่มีลำดับความสำคัญเหนือคลัสเตอร์วิดีโอแนะนำทั้งหมด พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะได้รับอนุญาตให้ออกอากาศเอนทิตีเดียวของประเภทที่รองรับในส่วนแนะนำ โดยมีเอนทิตีจำนวนมาก (อาจเป็นประเภทที่แตกต่างกัน) จากนักพัฒนาแอปหลายรายในคลัสเตอร์แนะนำ

    • GenericFeaturedEntity: GenericFeaturedEntity แตกต่างจากรายการแนะนำตรงที่ควรใช้รายการแนะนำสำหรับเนื้อหายอดนิยมรายการเดียวจากนักพัฒนาแอป และควรแสดงเนื้อหาที่สำคัญที่สุดรายการเดียวซึ่งจะน่าสนใจและเกี่ยวข้องกับผู้ใช้

      รูปที่ 12: UI แสดง FeaturedCluster ที่มีรายการ 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'
}

สรุป

การออกแบบนี้อิงตามการใช้งานบริการที่มีผลผูกพัน

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

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

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

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

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

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

GenericFeaturedEntity

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

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

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

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

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

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

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

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

Recommended text size: 50 chars

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

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

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

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

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

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

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

หมายเหตุ: ระบบจะแสดงคำอธิบายหรือรายการคำบรรยายอย่างใดอย่างหนึ่งให้ผู้ใช้เห็น ไม่ใช่ทั้ง 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 รายการ โดยคำบรรยายแต่ละรายการเป็นข้อความบรรทัดเดียว

หมายเหตุ: ระบบจะแสดงคำอธิบายหรือรายการคำบรรยายอย่างใดอย่างหนึ่งให้ผู้ใช้เห็น ไม่ใช่ทั้ง 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 อักขระ

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

แสดงรูปภาพส่วนหัว ควรแตกต่างจากรูปโปรไฟล์ ใช้ฟิลด์นี้ได้หากมีรูปภาพเพิ่มเติมเพื่อช่วยไฮไลต์บุคคล เช่น ผลงานของบุคคลนั้น

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

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

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

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

สตริง

ขนาดข้อความที่แนะนำ: จำนวน + ป้ายกำกับรวมกันไม่เกิน 20 อักขระ

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

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

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

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

สตริง

ขนาดข้อความที่แนะนำ: จำนวน + ป้ายกำกับรวมกันไม่เกิน 20 อักขระ

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

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

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

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

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

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

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

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

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

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

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

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

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

สตริง
การให้คะแนน - ค่าจำนวน ไม่บังคับ

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

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

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

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

Recommended text size: max ~20 chars

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

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

Recommended text size: max ~20 chars

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

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

Recommended text size: max ~20 chars

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

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

Recommended text size: max ~20 chars

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

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

Recommended text size: max ~20 chars

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

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

Recommended text size: max ~20 chars

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

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

Recommended text size: max ~20 chars

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

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

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

ชื่อของป้าย

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

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

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

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

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

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

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

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

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

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

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

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

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

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

หมายเหตุ: ระบบจะแสดงคำอธิบายหรือรายการคำบรรยายอย่างใดอย่างหนึ่งให้ผู้ใช้เห็น ไม่ใช่ทั้ง 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

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

Recommended text size: max ~20 chars

สถานที่ตั้ง - เมือง ต้องระบุแบบมีเงื่อนไข

เมืองที่จัดกิจกรรม

หมายเหตุ: ต้องระบุสำหรับกิจกรรมที่เป็น IN_PERSON หรือ HYBRID

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

Recommended text size: max ~20 chars

สถานที่ตั้ง - ที่อยู่สำหรับแสดงผล ต้องระบุแบบมีเงื่อนไข

ที่อยู่หรือชื่อสถานที่จัดกิจกรรมที่ควรแสดงต่อผู้ใช้

หมายเหตุ: ต้องระบุสำหรับกิจกรรมที่เป็น IN_PERSON หรือ HYBRID

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

Recommended text size: max ~20 chars

สถานที่ตั้ง - ที่อยู่ ไม่บังคับ ที่อยู่ (หากมี) ของสถานที่จัดกิจกรรม

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

Recommended text size: max ~20 chars

สถานที่ตั้ง - รัฐ ไม่บังคับ รัฐหรือจังหวัด (หากมี) ที่จัดกิจกรรม

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

Recommended text size: max ~20 chars

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

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

Recommended text size: max ~20 chars

สถานที่ตั้ง - ย่านใกล้เคียง ไม่บังคับ ย่าน (หากมี) ที่จัดกิจกรรม

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

Recommended text size: max ~20 chars

เวลาสิ้นสุด ไม่บังคับ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ชื่อของป้าย

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

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

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

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

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

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

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

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

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

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

ข้อความอิสระ
Price - 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 (ตัวอย่าง - การพบปะ)

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

EventReservationEntity

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

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

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

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

สตริง

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

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

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

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

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

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

Enum: VIRTUAL, IN_PERSON หรือ HYBRID
สถานที่ตั้ง - ประเทศ ต้องระบุแบบมีเงื่อนไข

ประเทศที่จัดกิจกรรม

หมายเหตุ: ต้องระบุสำหรับกิจกรรมที่เป็น IN_PERSON หรือ HYBRID

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

Recommended text size: max ~20 chars

สถานที่ตั้ง - เมือง ต้องระบุแบบมีเงื่อนไข

เมืองที่จัดกิจกรรม

หมายเหตุ: ต้องระบุสำหรับกิจกรรมที่เป็น IN_PERSON หรือ HYBRID

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

Recommended text size: max ~20 chars

สถานที่ตั้ง - ที่อยู่สำหรับแสดงผล ต้องระบุแบบมีเงื่อนไข

ที่อยู่หรือชื่อสถานที่จัดกิจกรรมที่ควรแสดงต่อผู้ใช้

หมายเหตุ: ต้องระบุสำหรับกิจกรรมที่เป็น IN_PERSON หรือ HYBRID

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

Recommended text size: max ~20 chars

สถานที่ตั้ง - ที่อยู่ ไม่บังคับ ที่อยู่ (หากมี) ของสถานที่จัดกิจกรรม

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

Recommended text size: max ~20 chars

สถานที่ตั้ง - รัฐ ไม่บังคับ รัฐหรือจังหวัด (หากมี) ที่จัดกิจกรรม

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

Recommended text size: max ~20 chars

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

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

Recommended text size: max ~20 chars

สถานที่ตั้ง - ย่านใกล้เคียง ไม่บังคับ ย่าน (หากมี) ที่จัดกิจกรรม

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

Recommended text size: max ~20 chars

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ชื่อของป้าย

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

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

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

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

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

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

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

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

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

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

ข้อความอิสระ
Price - 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 (ตัวอย่าง - การพบปะ)

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

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

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

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

สี่เหลี่ยมจัตุรัส (1x1)

Preferred

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 ซึ่งมีประเภทคลัสเตอร์ที่ต้องตรวจสอบความพร้อมให้บริการ คุณสามารถดูค่า enum ของ ClusterType ที่จำเป็นสำหรับ 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-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 PublishFeaturedClusterRequest.Builder()
                .setFeaturedCluster(
                    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 ไปยังการดำเนินการ (เช่น ไปยังหน้าลงชื่อเข้าใช้แอป)
รูปภาพ ไม่บังคับ - หากไม่ได้ระบุ ต้องระบุชื่อ

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

รูปภาพสัดส่วนภาพ 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());

deleteRecommendationsClusters

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

Kotlin

client.deleteRecommendationsClusters()

Java

client.deleteRecommendationsClusters();

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

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 โดยมีสาเหตุรวมเป็นรหัสข้อผิดพลาด

รหัสข้อผิดพลาด หมายเหตุ
SERVICE_NOT_FOUND บริการไม่พร้อมใช้งานในอุปกรณ์ที่ระบุ
SERVICE_NOT_AVAILABLE บริการพร้อมใช้งานในอุปกรณ์ที่ระบุ แต่ไม่พร้อมใช้งานในขณะที่โทร (เช่น มีการปิดใช้อย่างชัดแจ้ง)
SERVICE_CALL_EXECUTION_FAILURE การดำเนินการงานไม่สำเร็จเนื่องจากปัญหาเกี่ยวกับชุดข้อความ ในกรณีนี้ คุณสามารถลองอีกครั้งได้
SERVICE_CALL_PERMISSION_DENIED ผู้โทรไม่ได้รับอนุญาตให้โทรหาบริการ
SERVICE_CALL_INVALID_ARGUMENT คำขอมีข้อมูลที่ไม่ถูกต้อง (เช่น มีคลัสเตอร์มากกว่าจำนวนที่อนุญาต)
SERVICE_CALL_INTERNAL เกิดข้อผิดพลาดในฝั่งบริการ
SERVICE_CALL_RESOURCE_EXHAUSTED มีการเรียกใช้บริการบ่อยเกินไป

ขั้นตอนที่ 3: จัดการ Intent ของการออกอากาศ

นอกจากการเรียก API เพื่อเผยแพร่เนื้อหาผ่านงานแล้ว คุณยังต้องตั้งค่า BroadcastReceiver เพื่อรับคำขอเผยแพร่เนื้อหาด้วย

เป้าหมายของ Intent การออกอากาศคือการเปิดใช้งานแอปอีกครั้งและการบังคับให้ซิงค์ข้อมูลเป็นหลัก Intent การออกอากาศไม่ได้ออกแบบมาให้ส่งบ่อยเกินไป โดยจะทริกเกอร์ก็ต่อเมื่อบริการ Engage พิจารณาว่าเนื้อหาอาจเก่าแล้ว (เช่น มีอายุ 1 สัปดาห์) วิธีนี้จะช่วยเพิ่มความมั่นใจว่าผู้ใช้จะได้รับประสบการณ์การใช้งานเนื้อหาที่อัปเดตใหม่ แม้ว่าจะไม่ได้เรียกใช้แอปพลิเคชันเป็นเวลานานก็ตาม

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

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

Kotlin

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

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

// Register Recommendation Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_RECOMMENDATION),
                           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 ซึ่งจะช่วยให้แอปพลิเคชันได้รับ Intent การออกอากาศเมื่อไม่ได้ทำงาน และยังช่วยให้แอปพลิเคชันเผยแพร่เนื้อหาได้ด้วย

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

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

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION ขอแนะนำให้เริ่มการโทร publishRecommendationClusters เมื่อได้รับ Intent นี้
  • com.google.android.engage.action.PUBLISH_FEATURED ขอแนะนำให้เริ่มการโทร publishFeaturedCluster เมื่อได้รับ 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 แล้ว ระบบอาจเผยแพร่คลัสเตอร์วิดีโอแนะนำ วิดีโอแนะนำ และวิดีโอที่ดูต่อ และผู้ใช้จะเห็นคลัสเตอร์ดังกล่าว