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