กระตุ้นการมีส่วนร่วมในแอปด้วยการเข้าถึงผู้ใช้ในที่ที่ผู้ใช้อยู่ ผสานรวม Engage SDK เพื่อส่งคำแนะนำที่ปรับเปลี่ยนตามการใช้งานของผู้ใช้และเนื้อหาต่อเนื่องไปยัง ผู้ใช้โดยตรงในแพลตฟอร์มต่างๆ ในอุปกรณ์ เช่น คอลเล็กชัน, Entertainment Space และ Google Play Store การผสานรวมจะเพิ่มขนาด APK โดยเฉลี่ยไม่ถึง 50 KB (บีบอัด) และใช้เวลาของนักพัฒนาแอปประมาณ 1 สัปดาห์สำหรับแอปส่วนใหญ่ ดูข้อมูลเพิ่มเติมได้ที่เว็บไซต์ ธุรกิจ
คู่มือนี้มีวิธีการสำหรับพาร์ทเนอร์นักพัฒนาแอปในการแสดงเนื้อหา Shopping ในแพลตฟอร์มเนื้อหา Engage
รายละเอียดการผสานรวม
คำศัพท์
การผสานรวมนี้มีคลัสเตอร์ 5 ประเภทต่อไปนี้ คำแนะนำ แนะนำ รถเข็นช็อปปิ้ง รายการช็อปปิ้ง สั่งซื้ออีกครั้ง และ การติดตามคำสั่งซื้อ
คลัสเตอร์สินค้าแนะนำจะแสดงคำแนะนำในการช็อปปิ้งที่ปรับเปลี่ยนในแบบของคุณจาก พาร์ทเนอร์นักพัฒนาแอปแต่ละราย คำแนะนำเหล่านี้สามารถปรับเปลี่ยนในแบบของคุณสำหรับ ผู้ใช้ หรือเป็นคำแนะนำทั่วไป (เช่น สินค้าที่กำลังมาแรง) ใช้เพื่อแสดง ผลิตภัณฑ์ กิจกรรม การขาย โปรโมชัน การสมัครใช้บริการได้ตามต้องการ
คำแนะนำจะมีโครงสร้างดังนี้
คลัสเตอร์คำแนะนำ: มุมมอง UI ที่มีกลุ่มคำแนะนำจากพาร์ทเนอร์นักพัฒนาแอปรายเดียวกัน
ShoppingEntity: ออบเจ็กต์ที่แสดงรายการเดียวในคลัสเตอร์
คลัสเตอร์แนะนำจะแสดงตัวเลือกเอนทิตีจากพาร์ทเนอร์นักพัฒนาแอปหลายราย ในการจัดกลุ่ม UI เดียว โดยจะมีคลัสเตอร์ "แนะนำ" เพียงคลัสเตอร์เดียว ซึ่งจะแสดงที่ด้านบนของ UI พร้อมการจัดวางที่มีลำดับความสำคัญสูงกว่าคลัสเตอร์คำแนะนำทั้งหมด พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะได้รับอนุญาตให้ ออกอากาศเอนทิตีได้สูงสุด 10 รายการในคลัสเตอร์แนะนำ
คลัสเตอร์รถเข็นช็อปปิ้งจะแสดงตัวอย่างรถเข็นช็อปปิ้งจากพาร์ทเนอร์นักพัฒนาแอปจำนวนมาก ใน UI เดียวกัน เพื่อกระตุ้นให้ผู้ใช้ทำการซื้อในรถเข็นที่ค้างไว้ให้เสร็จสมบูรณ์ มีคลัสเตอร์รถเข็นช็อปปิ้งเพียงคลัสเตอร์เดียว ซึ่งจะแสดงที่ด้านบนของ UI โดยมีตำแหน่งที่มีลำดับความสำคัญเหนือคลัสเตอร์คำแนะนำทั้งหมด พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะได้รับอนุญาตให้เผยแพร่ได้สูงสุด 3
ShoppingCart
อินสแตนซ์ในคลัสเตอร์รถเข็นช็อปปิ้งรถเข็นช็อปปิ้งมีโครงสร้างดังนี้
คลัสเตอร์รถเข็นช็อปปิ้ง: มุมมอง UI ที่มีกลุ่มตัวอย่างรถเข็นช็อปปิ้งจากพาร์ทเนอร์นักพัฒนาแอปหลายราย
ShoppingCart: ออบเจ็กต์ที่แสดงตัวอย่างรถเข็นช็อปปิ้ง สำหรับพาร์ทเนอร์นักพัฒนาแอปรายเดียว ซึ่งจะแสดงในคลัสเตอร์รถเข็นช็อปปิ้ง
ShoppingCart
ต้องแสดงจำนวนรวมของสินค้าใน รถเข็น และอาจมีรูปภาพของสินค้าบางรายการในรถเข็นของผู้ใช้ด้วย
คลัสเตอร์รายการช็อปปิ้งจะแสดงตัวอย่างรายการช็อปปิ้ง จากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการจัดกลุ่ม UI เดียว ซึ่งจะกระตุ้นให้ผู้ใช้ กลับไปที่แอปที่เกี่ยวข้องเพื่ออัปเดตและทำรายการให้เสร็จสมบูรณ์ มีคลัสเตอร์รายการช็อปปิ้งเพียงคลัสเตอร์เดียว
คลัสเตอร์สั่งซื้ออีกครั้งจะแสดงตัวอย่างคำสั่งซื้อก่อนหน้าจาก พาร์ทเนอร์นักพัฒนาแอปหลายรายในการจัดกลุ่ม UI เดียว ซึ่งจะกระตุ้นให้ผู้ใช้สั่งซื้ออีกครั้ง มีคลัสเตอร์เรียงลำดับใหม่เพียงคลัสเตอร์เดียว
คลัสเตอร์การเรียงลำดับใหม่ต้องแสดงจำนวนรวมของสินค้าใน คำสั่งซื้อก่อนหน้าของผู้ใช้ และต้องมีรายการใดรายการหนึ่งต่อไปนี้ด้วย
- รูปภาพสำหรับรายการ X ในคำสั่งซื้อก่อนหน้าของผู้ใช้
- ป้ายกำกับสำหรับรายการ X ในคำสั่งซื้อก่อนหน้าของผู้ใช้
คลัสเตอร์การติดตามคำสั่งซื้อของ Shopping จะแสดงตัวอย่างคำสั่งซื้อของ Shopping ที่รอดำเนินการ หรือเพิ่งเสร็จสมบูรณ์จากพาร์ทเนอร์นักพัฒนาแอปจำนวนมากในกลุ่ม UI เดียว เพื่อให้ผู้ใช้ติดตามคำสั่งซื้อได้
มีคลัสเตอร์ ShoppingOrderTracking คลัสเตอร์เดียวที่แสดง ที่ด้านบนของ UI โดยมีตำแหน่งที่มีลำดับความสำคัญเหนือคลัสเตอร์คำแนะนำทั้งหมด พาร์ทเนอร์นักพัฒนาแอปแต่ละรายได้รับอนุญาตให้เผยแพร่รายการ ShoppingOrderTrackingEntity หลายรายการในคลัสเตอร์การติดตามคำสั่งซื้อของ Shopping
ShoppingOrderTrackingCluster มีโครงสร้างดังนี้
- คลัสเตอร์การติดตามคำสั่งซื้อของ Shopping: มุมมอง UI ที่มีกลุ่มตัวอย่างการติดตามคำสั่งซื้อจากพาร์ทเนอร์นักพัฒนาแอปหลายราย
- ShoppingOrderTrackingEntity: ออบเจ็กต์ที่แสดงตัวอย่างการติดตามคำสั่งซื้อ Shopping สำหรับพาร์ทเนอร์นักพัฒนาแอปรายเดียว ซึ่งจะแสดงในคลัสเตอร์การติดตามคำสั่งซื้อ Shopping ShoppingOrderTrackingEntity ต้องแสดง สถานะของคำสั่งซื้อและเวลาที่สั่งซื้อ เราขอแนะนำเป็นอย่างยิ่งให้ระบุเวลาจัดส่งที่คาดไว้สำหรับ ShoppingOrderTrackingEntity เนื่องจากระบบจะแสดงเวลาดังกล่าวต่อผู้ใช้เมื่อระบุ
สิ่งที่ต้องเตรียมก่อนดำเนินการ
ระดับ API ขั้นต่ำ: 19
เพิ่มไลบรารี com.google.android.engage:engage-core
ลงในแอป
dependencies {
// Make sure you also include that repository in your project's build.gradle file.
implementation 'com.google.android.engage:engage-core:1.5.2'
}
ดูข้อมูลเพิ่มเติมได้ที่ระดับการเข้าถึงแพ็กเกจใน Android 11
สรุป
การออกแบบนี้อิงตามการใช้งานบริการ ที่เชื่อมโยง
ข้อมูลที่ไคลเอ็นต์เผยแพร่ได้จะขึ้นอยู่กับขีดจำกัดต่อไปนี้สำหรับคลัสเตอร์ประเภทต่างๆ
ประเภทคลัสเตอร์ | ขีดจำกัดของคลัสเตอร์ | ขีดจำกัดสูงสุดของเอนทิตีในคลัสเตอร์ |
---|---|---|
คลัสเตอร์คำแนะนำ | ไม่เกิน 7 | สูงสุด 50 ShoppingEntity |
คลัสเตอร์แนะนำ | มากที่สุด 1 | สูงสุด 20 ShoppingEntity |
คลัสเตอร์รถเข็นช็อปปิ้ง | มากที่สุด 1 | ShoppingCart สูงสุด 3 รายการ
ระบบจะคาดการณ์ตะกร้าหลายรายการเฉพาะสำหรับแอปที่มีตะกร้าแยกต่างหากต่อผู้ขาย |
คลัสเตอร์รายการช็อปปิ้ง | มากที่สุด 1 | ShoppingListEntity สูงสุด 1 รายการ |
กลุ่มการสั่งซื้อซ้ำใน Shopping | มากที่สุด 1 | ReorderEntity สูงสุด 1 รายการ |
คลัสเตอร์การติดตามคำสั่งซื้อใน Shopping | สูงสุด 3 | ShoppingOrderTrackingEntity สูงสุด 3 รายการ |
ขั้นตอนที่ 1: ระบุข้อมูลนิติบุคคล
SDK ได้กำหนดเอนทิตีต่างๆ เพื่อแสดงรายการแต่ละประเภท ระบบรองรับเอนทิตีต่อไปนี้สำหรับหมวดหมู่ Shopping
ShoppingEntity
ShoppingCart
ShoppingList
Reorder
ShoppingOrderTracking
แผนภูมิด้านล่างแสดงแอตทริบิวต์ที่มีและข้อกำหนดสำหรับแต่ละประเภท
ShoppingEntity
ออบเจ็กต์ ShoppingEntity
แสดงถึงผลิตภัณฑ์ โปรโมชัน ดีล การสมัครใช้บริการ
หรือกิจกรรมที่พาร์ทเนอร์นักพัฒนาแอปต้องการเผยแพร่
ShoppingEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
ภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 ภาพ | ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
URI การดำเนินการ | ต้องระบุ |
Deep Link ไปยังหน้าในแอปที่แสดงรายละเอียดเกี่ยวกับ เอนทิตี หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
ชื่อ | ไม่บังคับ | ชื่อของเอนทิตี | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 90 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
ราคา - ปัจจุบัน | ต้องมีแบบมีเงื่อนไข |
ราคาปัจจุบันของเอนทิตี ต้องระบุหากระบุราคาขีดทับ |
ข้อความอิสระ |
ราคา - ขีดฆ่า | ไม่บังคับ | ราคาเดิมของเอนทิตีซึ่งจะถูกขีดทับใน UI | ข้อความอิสระ |
ข้อความเสริม | ไม่บังคับ | ข้อความไฮไลต์เพื่อแสดงโปรโมชัน กิจกรรม หรือข้อมูลอัปเดตสำหรับเอนทิตี หากมี | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
ข้อกำหนดและเงื่อนไขของข้อความไฮไลต์ | ไม่บังคับ | ข้อความข้อกำหนดและเงื่อนไขสำหรับข้อความไฮไลต์ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
การจัดประเภท (ไม่บังคับ) - หมายเหตุ: การจัดประเภททั้งหมดจะแสดงโดยใช้ระบบการให้ดาวมาตรฐานของเรา | |||
การจัดประเภท - ค่าสูงสุด | ไม่บังคับ | ค่าสูงสุดของระดับการให้คะแนน ต้องระบุหากมีการระบุค่าปัจจุบันของการจัดประเภทด้วย |
ตัวเลข >= 0.0 |
การจัดประเภท - ค่าปัจจุบัน | ไม่บังคับ | ค่าปัจจุบันของระดับการให้คะแนน ต้องระบุหากระบุค่าสูงสุดของการจัดประเภทด้วย |
ตัวเลข >= 0.0 |
การให้คะแนน - จำนวน | ไม่บังคับ |
จำนวนคะแนนของเอนทิตี หมายเหตุ: ระบุฟิลด์นี้หากแอปของคุณ ควบคุมวิธีแสดงจำนวนต่อผู้ใช้ ใช้สตริงที่กระชับ เช่น หากจำนวนคือ 1,000,000 ให้พิจารณาใช้ตัวย่อ เช่น 1M เพื่อไม่ให้ระบบตัดจำนวนในขนาดการแสดงผลที่เล็กลง |
สตริง |
การจัดประเภท - ค่าจำนวน | ไม่บังคับ | จำนวนคะแนนของเอนทิตี หมายเหตุ: ระบุช่องนี้หากคุณไม่ได้จัดการ ตรรกะการย่อคำที่แสดงด้วยตนเอง หากมีทั้งจำนวนและค่าจำนวน ระบบจะแสดงจำนวนต่อผู้ใช้ |
ยาว |
DisplayTimeWindow (ไม่บังคับ) - ตั้งค่ากรอบเวลา สำหรับเนื้อหาที่จะแสดงในแพลตฟอร์ม | |||
การประทับเวลาเริ่มต้น | ไม่บังคับ |
การประทับเวลา Epoch หลังจากที่ควรแสดงเนื้อหาบน แพลตฟอร์ม หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงในแพลตฟอร์ม |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
การประทับเวลาสิ้นสุด | ไม่บังคับ |
การประทับเวลา Epoch หลังจากที่ระบบจะไม่แสดงเนื้อหาบนแพลตฟอร์มอีกต่อไป หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงในแพลตฟอร์ม |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
ShoppingCart
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI ของการดำเนินการ | ต้องระบุ |
Deep Link ไปยังรถเข็นช็อปปิ้งในแอปของพาร์ทเนอร์ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
จำนวนรายการ | ต้องระบุ |
จํานวนสินค้า (ไม่ใช่แค่จํานวนผลิตภัณฑ์) ในรถเข็นช็อปปิ้ง ตัวอย่างเช่น หากมีเสื้อเหมือนกัน 3 ตัวและหมวก 1 ใบในรถเข็น หมายเลขนี้ควรเป็น 4 |
จำนวนเต็ม >= 1 |
ข้อความการดำเนินการ | ไม่บังคับ |
ข้อความคำกระตุ้นให้ดำเนินการของปุ่มในรถเข็นช็อปปิ้ง (เช่น ถุงช็อปปิ้งของคุณ) หากนักพัฒนาแอปไม่ได้ระบุข้อความการดำเนินการ ดูรถเข็นจะเป็นค่าเริ่มต้น แอตทริบิวต์นี้รองรับในเวอร์ชัน 1.1.0 ขึ้นไป |
สตริง |
ชื่อ | ไม่บังคับ | ชื่อรถเข็น (เช่น ถุงช็อปปิ้ง) หากนักพัฒนาแอปไม่ได้ระบุชื่อ รถเข็น จะเป็นชื่อเริ่มต้น หากพาร์ทเนอร์นักพัฒนาแอปเผยแพร่รถเข็นแยกต่างหากสำหรับผู้ขายแต่ละราย โปรดระบุชื่อผู้ขายในชื่อ |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 25 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
รูปภาพรถเข็น | ไม่บังคับ | รูปภาพของผลิตภัณฑ์แต่ละรายการในรถเข็น ระบุรูปภาพได้สูงสุด 10 รูปตามลำดับความสำคัญ จำนวนรูปภาพที่แสดงจริงจะขึ้นอยู่กับรูปแบบของอุปกรณ์ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
ป้ายกำกับรายการ | ไม่บังคับ | รายการป้ายกำกับสำหรับสินค้าในรายการช็อปปิ้ง จำนวนป้ายกำกับที่แสดงจริง ขึ้นอยู่กับรูปแบบของอุปกรณ์ |
รายการป้ายกำกับข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
การประทับเวลาการโต้ตอบครั้งล่าสุดของผู้ใช้ | ไม่บังคับ | จํานวนมิลลิวินาทีที่ผ่านไปตั้งแต่ Epoch ซึ่งระบุเวลาล่าสุด
ที่ผู้ใช้โต้ตอบกับรถเข็น
พาร์ทเนอร์นักพัฒนาแอปที่เผยแพร่รถเข็นแยกต่างหากต่อผู้ขายแต่ละรายจะส่งข้อมูลนี้เป็นอินพุต และอาจใช้เพื่อการจัดอันดับ |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
DisplayTimeWindow (ไม่บังคับ) - ตั้งค่ากรอบเวลา เพื่อให้เนื้อหาแสดงในแพลตฟอร์ม | |||
การประทับเวลาเริ่มต้น | ไม่บังคับ |
การประทับเวลา Epoch หลังจากที่ควรแสดงเนื้อหาบน แพลตฟอร์ม หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงในแพลตฟอร์ม |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
การประทับเวลาสิ้นสุด | ไม่บังคับ |
การประทับเวลา Epoch หลังจากที่ระบบจะไม่แสดงเนื้อหาบนแพลตฟอร์มอีกต่อไป หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงในแพลตฟอร์ม |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
ShoppingList
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI ของการดำเนินการ | ต้องระบุ |
Deep Link ไปยังรายการช็อปปิ้งในแอปของพาร์ทเนอร์ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
จำนวนรายการ | ต้องระบุ | จำนวนสินค้าในรายการช็อปปิ้ง | จำนวนเต็ม >= 1 |
ชื่อ | ไม่บังคับ |
ชื่อของรายการ (เช่น รายการซื้อของชำของคุณ) หากนักพัฒนาแอปไม่ได้ระบุชื่อ รายการช็อปปิ้งจะเป็นชื่อเริ่มต้น |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 25 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
ป้ายกำกับรายการ | ต้องระบุ | รายการป้ายกำกับสำหรับสินค้าในรายการช็อปปิ้ง ต้องระบุป้ายกำกับอย่างน้อย 1 รายการ และระบุได้สูงสุด 10 รายการตามลำดับความสำคัญ จำนวนป้ายกำกับที่แสดงจริงจะขึ้นอยู่กับรูปแบบของอุปกรณ์ |
รายการป้ายกำกับข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
ShoppingReorderCluster
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI ของการดำเนินการ | ต้องระบุ |
Deep Link สำหรับสั่งซื้ออีกครั้งในแอปของพาร์ทเนอร์ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
ข้อความการดำเนินการ | ไม่บังคับ |
ข้อความกระตุ้นให้ดำเนินการของปุ่มในส่วน "สั่งซื้ออีกครั้ง" (เช่น สั่งซื้ออีกครั้ง) หากนักพัฒนาแอปไม่ได้ระบุข้อความการดำเนินการ สั่งซื้ออีกครั้งจะเป็นค่าเริ่มต้น แอตทริบิวต์นี้รองรับในเวอร์ชัน 1.1.0 ขึ้นไป |
สตริง |
จำนวนรายการ | ต้องระบุ |
จำนวนสินค้า (ไม่ใช่แค่จำนวนผลิตภัณฑ์) ในคำสั่งซื้อก่อนหน้า ตัวอย่างเช่น หากมีกาแฟขนาดเล็ก 3 แก้วและครัวซองต์ 1 ชิ้นใน คำสั่งซื้อก่อนหน้า ตัวเลขนี้ควรเป็น 4 |
จำนวนเต็ม >= 1 |
ชื่อ | ต้องระบุ | ชื่อของสินค้าที่สั่งซื้อซ้ำ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 40 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
ป้ายกำกับรายการ | ไม่บังคับ (หากไม่ได้ระบุไว้ คุณควรระบุภาพโปสเตอร์) |
รายการป้ายกำกับสินค้าสำหรับคำสั่งซื้อก่อนหน้า ระบุป้ายกำกับได้สูงสุด 10 รายการตามลำดับความสำคัญ จำนวนป้ายกำกับที่แสดงจริงจะขึ้นอยู่กับรูปแบบของอุปกรณ์ |
รายการข้อความอิสระ ขนาดข้อความที่แนะนำต่อป้ายกำกับ: ไม่เกิน 20 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
ภาพโปสเตอร์ | ไม่บังคับ (หากไม่ได้ระบุไว้ คุณควรระบุป้ายกำกับรายการ) |
รูปภาพของสินค้าในคำสั่งซื้อก่อนหน้า ระบุรูปภาพได้สูงสุด 10 รูปตามลำดับความสำคัญ จำนวนรูปภาพที่แสดงจริงจะขึ้นอยู่กับรูปแบบของอุปกรณ์ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
ShoppingOrderTrackingCluster
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
ชื่อ | ต้องระบุ |
ชื่อย่อของแพ็กเกจ/รายการที่ติดตามหรือหมายเลขติดตาม |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: 50 อักขระ (ข้อความที่ยาวเกินไปจะ แสดงจุดไข่ปลา) |
ประเภทใบสั่งซื้อ | ต้องระบุ |
ชื่อย่อของแพ็กเกจ/รายการที่ติดตามหรือหมายเลขติดตาม |
Enum: IN_STORE_PICKUP, SAME_DAY_DELIVERY, MULTI_DAY_DELIVERY |
สถานะ | ต้องระบุ |
สถานะปัจจุบันของคำสั่งซื้อ เช่น "กำลังจะถึง" "อยู่ระหว่างนำส่ง" "ล่าช้า" "จัดส่งแล้ว" "นำส่งแล้ว" "สินค้าหมด" "คำสั่งซื้อพร้อมแล้ว" |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: 25 อักขระ (ข้อความที่ยาวเกินไปจะ แสดงจุดไข่ปลา) |
เวลาสั่งซื้อ | ต้องระบุ |
การประทับเวลา Epoch ในหน่วยมิลลิวินาทีที่ทำการสั่งซื้อ เวลาสั่งซื้อจะแสดงหากไม่มีช่วงเวลาที่คาดว่าจะนำส่ง |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
URI ของการดำเนินการ | ต้องระบุ |
Deep Link ไปยังการติดตามคำสั่งซื้อในแอปของพาร์ทเนอร์ |
URI |
OrderDeliveryTimeWindow (ไม่บังคับ) - ตั้งค่ากรอบเวลา สำหรับการนำส่งคำสั่งซื้อที่กำลังติดตามตั้งแต่เวลาที่สั่งซื้อ จนถึงเวลาที่คาดการณ์/นำส่งจริง | |||
OrderDeliveryTimeWindow - เวลาเริ่มต้น | ไม่บังคับ |
การประทับเวลา Epoch ในหน่วยมิลลิวินาทีที่หลังจากนั้นจะมีการนำส่งคำสั่งซื้อ หรือพร้อมให้รับสินค้า |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
OrderDeliveryTimeWindow - เวลาสิ้นสุด | ไม่บังคับ |
การประทับเวลา Epoch ในหน่วยมิลลิวินาทีที่คำสั่งซื้อจะ นำส่งหรือพร้อมสำหรับการรับสินค้า |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
ภาพโปสเตอร์ | ไม่บังคับ | รูปภาพของสินค้า/ผลิตภัณฑ์ 1 รายการที่เป็นส่วนหนึ่งของคำสั่งซื้อ สัดส่วนภาพที่แนะนำคือ 1:1 |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
จำนวนรายการ | ไม่บังคับ | จำนวนสินค้าในคำสั่งซื้อ | จำนวนเต็ม >= 1 |
คำอธิบาย | ไม่บังคับ | ข้อความ 1 ย่อหน้าเพื่ออธิบายรายการในคำสั่งซื้อ หมายเหตุ: ระบบจะแสดงคำอธิบายหรือรายการคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งต่อผู้ใช้ ไม่ใช่ทั้ง 2 อย่าง |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: 180 อักขระ |
รายการคำบรรยาย | ไม่บังคับ | คำบรรยายแทนเสียงสูงสุด 3 รายการ โดยแต่ละรายการเป็นข้อความ 1 บรรทัด หมายเหตุ: ระบบจะแสดงคำอธิบายหรือรายการคำบรรยายแทนเสียงอย่างใดอย่างหนึ่งต่อผู้ใช้ ไม่ใช่ทั้ง 2 อย่าง |
ข้อความอิสระ ขนาดข้อความที่แนะนำสำหรับคำบรรยายแทนเสียงแต่ละรายการ: สูงสุด 50 อักขระ |
มูลค่าการสั่งซื้อ - CurrentPrice | ไม่บังคับ | มูลค่าปัจจุบันของคำสั่งซื้อ | ข้อความอิสระ |
หมายเลขคำสั่งซื้อ | ไม่บังคับ | หมายเลข/รหัสคำสั่งซื้อที่ใช้ระบุคำสั่งซื้อได้อย่างไม่ซ้ำกัน |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 25 อักขระ |
หมายเลขติดตามพัสดุ | ไม่บังคับ | หมายเลขติดตามสำหรับการนำส่งคำสั่งซื้อ/พัสดุในกรณีที่คำสั่งซื้อ ต้องมีการนำส่ง |
ข้อความอิสระ ขนาดข้อความที่แนะนำ: สูงสุด 25 อักขระ |
ข้อกำหนดเกี่ยวกับรูปภาพ
ข้อกำหนดที่จำเป็นสำหรับชิ้นงานรูปภาพแสดงอยู่ด้านล่าง
สัดส่วนภาพ | พิกเซลขั้นต่ำ | พิกเซลที่แนะนํา |
---|---|---|
สี่เหลี่ยมจัตุรัส (1x1) แนะนำสำหรับคลัสเตอร์ที่ไม่ได้อยู่ในฟีเจอร์ |
300x300 | 1200x1200 |
แนวนอน (1.91x1) แนะนำสำหรับคลัสเตอร์เด่น |
600x314 | 1200x628 |
แนวตั้ง (4x5) | 480x600 | 960x1200 |
รูปแบบไฟล์
PNG, JPG, GIF แบบภาพนิ่ง, WebP
ขนาดไฟล์สูงสุด
5120 KB
คำแนะนำเพิ่มเติม
- พื้นที่ปลอดภัยของรูปภาพ: ใส่เนื้อหาที่สําคัญไว้ตรงกลาง 80% ของ รูปภาพ
- ใช้พื้นหลังโปร่งใสเพื่อให้รูปภาพแสดงอย่างถูกต้องในการตั้งค่าธีมมืดและธีมสว่าง
ขั้นตอนที่ 2: ระบุข้อมูลคลัสเตอร์
ขอแนะนำให้เรียกใช้งานเนื้อหาที่เผยแพร่ในเบื้องหลัง (เช่น ใช้ WorkManager) และกำหนดเวลาเป็นประจำหรือตามเหตุการณ์ (เช่น ทุกครั้งที่ ผู้ใช้เปิดแอป หรือเมื่อผู้ใช้เพิ่งเพิ่มสินค้าลงในรถเข็น)
AppEngageShoppingClient
มีหน้าที่เผยแพร่คลัสเตอร์ Shopping
API ต่อไปนี้จะแสดงเพื่อเผยแพร่คลัสเตอร์ในไคลเอ็นต์
isServiceAvailable
publishRecommendationClusters
publishFeaturedCluster
publishShoppingCart
publishShoppingCarts
publishShoppingList
publishShoppingReorderCluster
publishShoppingOrderTrackingCluster
publishUserAccountManagementRequest
updatePublishStatus
deleteRecommendationsClusters
deleteFeaturedCluster
deleteShoppingCartCluster
deleteShoppingListCluster
deleteShoppingReorderCluster
deleteShoppingOrderTrackingCluster
deleteUserManagementCluster
deleteClusters
isServiceAvailable
API นี้ใช้เพื่อตรวจสอบว่าบริการพร้อมใช้งานสำหรับการผสานรวมหรือไม่ และ สามารถแสดงเนื้อหาในอุปกรณ์ได้หรือไม่
Kotlin
client.isServiceAvailable.addOnCompleteListener { task ->
if (task.isSuccessful) {
// Handle IPC call success
if(task.result) {
// Service is available on the device, proceed with content publish
// calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
}
Java
client.isServiceAvailable().addOnCompleteListener(task - > {
if (task.isSuccessful()) {
// Handle success
if(task.getResult()) {
// Service is available on the device, proceed with content
// publish calls.
} else {
// Service is not available, no further action is needed.
}
} else {
// The IPC call itself fails, proceed with error handling logic here,
// such as retry.
}
});
publishRecommendationClusters
API นี้ใช้เพื่อเผยแพร่รายการออบเจ็กต์ RecommendationCluster
ออบเจ็กต์ RecommendationCluster
มีแอตทริบิวต์ต่อไปนี้ได้
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย |
---|---|---|
รายการ ShoppingEntity | ต้องระบุ | รายการออบเจ็กต์ ShoppingEntity ที่ประกอบกันเป็นสินค้าแนะนำสำหรับ คลัสเตอร์สินค้าแนะนำนี้ |
ชื่อ | ต้องระบุ | ชื่อของคลัสเตอร์คำแนะนำ ขนาดข้อความที่แนะนำ: ไม่เกิน 25 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) |
ชื่อรอง | ไม่บังคับ | คำบรรยายของคลัสเตอร์คำแนะนำ |
URI ของการดำเนินการ | ไม่บังคับ |
Deep Link ไปยังหน้าในแอปพาร์ทเนอร์ที่ผู้ใช้จะดู รายการคำแนะนำทั้งหมดได้ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
Kotlin
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Black Friday Deals")
.build())
.build())
Java
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(
new RecommendationCluster.Builder()
.addEntity(entity1)
.addEntity(entity2)
.setTitle("Black Friday Deals")
.build())
.build());
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูลคลัสเตอร์คำแนะนำที่มีอยู่ออกทั้งหมด
- ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์คำแนะนำใหม่
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
publishFeaturedCluster
ใช้ API นี้เพื่อเผยแพร่ออบเจ็กต์ FeaturedCluster
Kotlin
client.publishFeaturedCluster(
PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
FeaturedCluster.Builder()
...
.build())
.build())
Java
client.publishFeaturedCluster(
new PublishFeaturedClusterRequest.Builder()
.setFeaturedCluster(
new FeaturedCluster.Builder()
...
.build())
.build());
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
FeaturedCluster
ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์แนะนำที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
publishShoppingCart
ใช้ API นี้เพื่อเผยแพร่ออบเจ็กต์ ShoppingCartCluster
Kotlin
client.publishShoppingCart(
PublishShoppingCartRequest.Builder()
.setShoppingCart(
ShoppingCart.Builder()
...
.build())
.build())
Java
client.publishShoppingCart(
new PublishShoppingCartRequest.Builder()
.setShoppingCart(
new ShoppingCart.Builder()
...
.build())
.build())
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
ShoppingCart
ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์รถเข็นช็อปปิ้งที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
publishShoppingCarts
API นี้ใช้เพื่อเผยแพร่ออบเจ็กต์ ShoppingCart
หลายรายการ ซึ่ง
ใช้ได้กับการเผยแพร่ของพาร์ทเนอร์นักพัฒนาแอปที่แยกตะกร้าสินค้าต่อผู้ขาย ระบุชื่อผู้ขายในชื่อเมื่อใช้ API นี้
Kotlin
client.publishShoppingCarts(
PublishShoppingCartClustersRequest.Builder()
.addShoppingCart(
ShoppingCart.Builder()
...
.build())
.build())
Java
client.publishShoppingCarts(
new PublishShoppingCartClustersRequest.Builder()
.addShoppingCart(
new ShoppingCart.Builder()
...
.build())
.build())
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
ShoppingCart
ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์รถเข็นช็อปปิ้งที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
publishShoppingList
ใช้ API นี้เพื่อเผยแพร่ออบเจ็กต์ FoodShoppingList
Kotlin
client.publishFoodShoppingList(
PublishFoodShoppingListRequest.Builder()
.setFoodShoppingList(
FoodShoppingListEntity.Builder()
...
.build())
.build())
Java
client.publishFoodShoppingList(
new PublishFoodShoppingListRequest.Builder()
.setFoodShoppingList(
new FoodShoppingListEntity.Builder()
...
.build())
.build());
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
FoodShoppingList
ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์รายการช็อปปิ้งที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
publishShoppingReorderCluster
ใช้ API นี้เพื่อเผยแพร่ออบเจ็กต์ ShoppingReorderCluster
Kotlin
client.publishShoppingReorderCluster(
PublishShoppingReorderClusterRequest.Builder()
.setReorderCluster(
ShoppingReorderCluster.Builder()
...
.build())
.build())
Java
client.publishShoppingReorderCluster(
new PublishShoppingReorderClusterRequest.Builder()
.setReorderCluster(
new ShoppingReorderCluster.Builder()
...
.build())
.build());
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
ShoppingReorderCluster
ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์การเรียงลำดับใหม่ที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
publishShoppingOrderTrackingCluster
ใช้ API นี้เพื่อเผยแพร่ออบเจ็กต์ ShoppingOrderTrackingCluster
Kotlin
client.publishShoppingOrderTrackingCluster(
PublishShoppingOrderTrackingClusterRequest.Builder()
.setShoppingOrderTrackingCluster(
ShoppingOrderTrackingCluster.Builder()
...
.build())
.build())
Java
client.publishShoppingOrderTrackingCluster(
new PublishShoppingOrderTrackingClusterRequest.Builder()
.setShoppingOrderTrackingCluster(
new ShoppingOrderTrackingCluster.Builder()
...
.build())
.build());
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล
ShoppingOrderTrackingCluster
ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก - ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์การติดตามคำสั่งซื้อ Shopping ที่อัปเดตแล้ว
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
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();
เมื่อได้รับคำขอ บริการจะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์แนะนำ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้
deleteShoppingCartCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์รถเข็นช็อปปิ้ง
Kotlin
client.deleteShoppingCartCluster()
Java
client.deleteShoppingCartCluster();
เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์รถเข็นช็อปปิ้ง ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้
deleteShoppingListCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์รายการช็อปปิ้ง
Kotlin
client.deleteShoppingListCluster()
Java
client.deleteShoppingListCluster();
เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์รายการช็อปปิ้ง ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้
deleteShoppingReorderCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์การสั่งซื้อซ้ำของ Shopping
Kotlin
client.deleteShoppingReorderCluster()
Java
client.deleteShoppingReorderCluster();
เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์การเรียงลำดับใหม่ของ Shopping ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้
deleteShoppingOrderTrackingCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์การติดตามคำสั่งซื้อของ Shopping
Kotlin
client.deleteShoppingOrderTrackingCluster()
Java
client.deleteShoppingOrderTrackingCluster();
เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์การติดตามคำสั่งซื้อของ Shopping ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
deleteUserManagementCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ UserAccountManagement
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
เมื่อบริการได้รับคำขอแล้ว ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ UserAccountManagement ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
deleteClusters
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ประเภทหนึ่งๆ
Kotlin
client.deleteClusters(
DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build())
Java
client.deleteClusters(
new DeleteClustersRequest.Builder()
.addClusterType(ClusterType.TYPE_FEATURED)
.addClusterType(ClusterType.TYPE_RECOMMENDATION)
...
.build());
เมื่อได้รับคำขอ บริการจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ทั้งหมดที่ตรงกับประเภทคลัสเตอร์ที่ระบุ ไคลเอ็นต์เลือกส่งคลัสเตอร์ประเภทเดียวหรือหลายประเภทได้ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
การจัดการข้อผิดพลาด
เราขอแนะนำอย่างยิ่งให้รับฟังผลลัพธ์ของงานจาก API การเผยแพร่ เช่น เพื่อให้ดำเนินการติดตามผลเพื่อกู้คืนและส่งงานที่สำเร็จอีกครั้งได้
Kotlin
client.publishRecommendationClusters(
PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(..)
.build())
.addOnCompleteListener { task ->
if (task.isSuccessful) {
// do something
} else {
val exception = task.exception
if (exception is AppEngageException) {
@AppEngageErrorCode val errorCode = exception.errorCode
if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
// do something
}
}
}
}
Java
client.publishRecommendationClusters(
new PublishRecommendationClustersRequest.Builder()
.addRecommendationCluster(...)
.build())
.addOnCompleteListener(
task -> {
if (task.isSuccessful()) {
// do something
} else {
Exception exception = task.getException();
if (exception instanceof AppEngageException) {
@AppEngageErrorCode
int errorCode = ((AppEngageException) exception).getErrorCode();
if (errorCode == AppEngageErrorCode.SERVICE_NOT_FOUND) {
// do something
}
}
}
});
ข้อผิดพลาดจะแสดงเป็น AppEngageException
พร้อมสาเหตุที่รวมเป็นรหัสข้อผิดพลาด
รหัสข้อผิดพลาด | ชื่อข้อผิดพลาด | หมายเหตุ |
---|---|---|
1 |
SERVICE_NOT_FOUND |
บริการไม่พร้อมใช้งานในอุปกรณ์ที่ระบุ |
2 |
SERVICE_NOT_AVAILABLE |
บริการพร้อมใช้งานในอุปกรณ์ที่ระบุ แต่ไม่พร้อมใช้งาน ในเวลาที่โทร (เช่น ปิดใช้บริการอย่างชัดเจน) |
3 |
SERVICE_CALL_EXECUTION_FAILURE |
การดำเนินการงานล้มเหลวเนื่องจากปัญหาการแยกเธรด ในกรณีนี้ คุณสามารถ ลองอีกครั้งได้ |
4 |
SERVICE_CALL_PERMISSION_DENIED |
ผู้โทรไม่ได้รับอนุญาตให้โทรหาบริการ |
5 |
SERVICE_CALL_INVALID_ARGUMENT |
คำขอมีข้อมูลที่ไม่ถูกต้อง (เช่น มีคลัสเตอร์มากกว่าจำนวนที่อนุญาต) |
6 |
SERVICE_CALL_INTERNAL |
เกิดข้อผิดพลาดที่ฝั่งบริการ |
7 |
SERVICE_CALL_RESOURCE_EXHAUSTED |
มีการเรียกใช้บริการบ่อยเกินไป |
ขั้นตอนที่ 3: จัดการ Intent การออกอากาศ
นอกเหนือจากการเรียกใช้ API การเผยแพร่เนื้อหาผ่านงานแล้ว คุณยังต้องตั้งค่า
BroadcastReceiver
เพื่อรับ
คำขอเผยแพร่เนื้อหาด้วย
เป้าหมายของความตั้งใจในการออกอากาศคือการเปิดใช้งานแอปอีกครั้งและการบังคับซิงค์ข้อมูลเป็นหลัก Broadcast Intents ไม่ได้ออกแบบมาให้ส่งบ่อยมาก ระบบจะทริกเกอร์การอัปเดตก็ต่อเมื่อบริการ 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 shopping cart cluster publish when PUBLISH_SHOPPING_CART broadcast
// is received
// Trigger shopping list cluster publish when PUBLISH_SHOPPING_LIST broadcast
// is received
// Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
// received
// Trigger shopping order tracking cluster publish when
// PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER 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 Shopping Cart Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_SHOPPING_CART),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Shopping List Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_SHOPPING_LIST),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Reorder Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_REORDER_CLUSTER),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null)
// Register Shopping Order Tracking Cluster Publish Intent
context.registerReceiver(AppEngageBroadcastReceiver(),
IntentFilter(Intents.ACTION_PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER),
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 shopping cart cluster publish when PUBLISH_SHOPPING_CART broadcast is
// received
// Trigger shopping list cluster publish when PUBLISH_SHOPPING_LIST broadcast is
// received
// Trigger reorder cluster publish when PUBLISH_REORDER_CLUSTER broadcast is
// received
// Trigger reorder cluster publish when PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER
// 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 Shopping Cart Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_SHOPPING_CART),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Shopping List Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_SHOPPING_LIST),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Reorder Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_REORDER_CLUSTER),
com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
/*scheduler=*/null);
// Register Shopping Order Tracking Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER),
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.shopping.PUBLISH_SHOPPING_CART" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.shopping.PUBLISH_SHOPPING_LIST" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.shopping.PUBLISH_REORDER_CLUSTER" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.engage.action.shopping.PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER" />
</intent-filter>
</receiver>
</application>
บริการจะส่ง Intent ต่อไปนี้
com.google.android.engage.action.PUBLISH_RECOMMENDATION
ขอแนะนำให้เริ่มpublishRecommendationClusters
การโทรเมื่อได้รับ Intent นี้com.google.android.engage.action.PUBLISH_FEATURED
ขอแนะนำให้เริ่มการโทรpublishFeaturedCluster
เมื่อได้รับความตั้งใจนี้com.google.android.engage.action.shopping.PUBLISH_SHOPPING_CART
ขอแนะนำให้เริ่มการโทรpublishShoppingCart
เมื่อได้รับความตั้งใจนี้com.google.android.engage.action.shopping.PUBLISH_SHOPPING_LIST
ขอแนะนำให้เริ่มการโทรpublishShoppingList
เมื่อได้รับความตั้งใจนี้com.google.android.engage.action.shopping.PUBLISH_REORDER_CLUSTER
ขอแนะนำให้เริ่มการโทรpublishReorderCluster
เมื่อได้รับความตั้งใจนี้com.google.android.engage.action.shopping.PUBLISH_SHOPPING_ORDER_TRACKING_CLUSTER
เราขอแนะนำให้เริ่มpublishShoppingOrderTrackingCluster
การโทรเมื่อ ได้รับความตั้งใจนี้
เวิร์กโฟลว์การผสานรวม
ดูคำแนะนำแบบทีละขั้นตอนเกี่ยวกับการยืนยันการผสานรวมหลังจากเสร็จสมบูรณ์ได้ที่ เวิร์กโฟลว์การผสานรวมนักพัฒนาแอป Engage
คำถามที่พบบ่อย
ดูคำถามที่พบบ่อยได้ที่คำถามที่พบบ่อยเกี่ยวกับ Engage SDK
รายชื่อติดต่อ
โปรดติดต่อ
engage-developers@google.com
หากมีคำถาม
ในระหว่างกระบวนการผสานรวม ทีมของเราจะตอบกลับโดยเร็วที่สุด
ขั้นตอนถัดไป
หลังจากผสานรวมเสร็จสมบูรณ์แล้ว ขั้นตอนถัดไปมีดังนี้
- ส่งอีเมลไปที่
engage-developers@google.com
และแนบ APK ที่ผสานรวมแล้วซึ่งพร้อมให้ Google ทดสอบ - Google จะทำการยืนยันและตรวจสอบภายในเพื่อให้แน่ใจว่าการผสานรวมทำงานได้ตามที่คาดไว้ หากจำเป็นต้องเปลี่ยนแปลง Google จะติดต่อคุณพร้อมรายละเอียดที่จำเป็น
- เมื่อการทดสอบเสร็จสมบูรณ์และไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ Google จะติดต่อคุณเพื่อ แจ้งให้ทราบว่าคุณเริ่มเผยแพร่ APK ที่อัปเดตและผสานรวมไปยัง Play Store ได้แล้ว
- หลังจากที่ Google ยืนยันว่าได้เผยแพร่ APK ที่อัปเดตแล้วไปยัง Play Store คำแนะนำ รายการแนะนำ รถเข็นช็อปปิ้ง รายการช็อปปิ้ง คลัสเตอร์การสั่งซื้อซ้ำ และคลัสเตอร์การติดตามคำสั่งซื้อ อาจได้รับการเผยแพร่และผู้ใช้จะมองเห็น