กระตุ้นการมีส่วนร่วมในแอปด้วยการเข้าถึงผู้ใช้ในที่ที่ผู้ใช้อยู่ ผสานรวม Engage SDK เพื่อส่งคำแนะนำที่ปรับเปลี่ยนตามการใช้งานของผู้ใช้และเนื้อหาต่อเนื่องไปยัง ผู้ใช้โดยตรงในแพลตฟอร์มต่างๆ ในอุปกรณ์ เช่น คอลเล็กชัน, Entertainment Space และ Google Play Store การผสานรวมจะเพิ่มขนาด APK โดยเฉลี่ยไม่ถึง 50 KB (บีบอัด) และใช้เวลาของนักพัฒนาแอปประมาณ 1 สัปดาห์สำหรับแอปส่วนใหญ่ ดูข้อมูลเพิ่มเติมได้ที่เว็บไซต์ ธุรกิจ
คู่มือนี้มีวิธีการสำหรับพาร์ทเนอร์นักพัฒนาแอปในการส่งเนื้อหาเกี่ยวกับอาหาร (การสั่งอาหาร การรีวิวและการค้นพบอาหารหรือร้านอาหาร การสมัครใช้บริการมื้ออาหาร สูตรอาหาร) ไปยังแพลตฟอร์มเนื้อหาของ Engage
รายละเอียดการผสานรวม
คำศัพท์
การผสานรวมนี้มีคลัสเตอร์ 5 ประเภท ได้แก่ แนะนำ แนะนำ รถเข็นช็อปปิ้งอาหาร รายการช็อปปิ้งอาหาร และสั่งซื้ออีกครั้ง
- คลัสเตอร์การแนะนำจะแสดงคำแนะนำเกี่ยวกับอาหารที่ปรับเปลี่ยนในแบบของคุณจาก พาร์ทเนอร์นักพัฒนาแอปแต่ละราย คำแนะนำเหล่านี้สามารถปรับเปลี่ยนในแบบของผู้ใช้หรือแบบทั่วไปได้ (เช่น ใหม่ลดราคา) ใช้เพื่อแสดงสูตรอาหาร ร้านค้า อาหาร จ่ายตลาด และอื่นๆ ได้ตามต้องการ - คลัสเตอร์คำแนะนำอาจประกอบด้วยข้อมูล ProductEntity,StoreEntityหรือRecipeEntityแต่จะใช้ข้อมูลประเภทเอนทิตีที่แตกต่างกันผสมกันไม่ได้
   - รูปภาพ :`ProductEntity`, `StoreEntity` และ `RecipeEntity` (*UI สำหรับวัตถุประสงค์ในการอธิบายเท่านั้น) 
- คลัสเตอร์คำแนะนำอาจประกอบด้วยข้อมูล 
- คลัสเตอร์แนะนำจะแสดงตัวเลือกเอนทิตีจากพาร์ทเนอร์นักพัฒนาแอปหลายราย ในการจัดกลุ่ม UI เดียว โดยจะมีคลัสเตอร์ "แนะนำ" เพียงคลัสเตอร์เดียว ซึ่งจะแสดงที่ด้านบนของ UI พร้อมการจัดวางที่มีลำดับความสำคัญสูงกว่าคลัสเตอร์คำแนะนำทั้งหมด พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะได้รับอนุญาตให้ ออกอากาศเอนทิตีได้สูงสุด 10 รายการในคลัสเตอร์แนะนำ   - รูปที่ : คลัสเตอร์แนะนำที่มี `RecipeEntity` (*UI ใช้เพื่อการอธิบายเท่านั้น) 
- คลัสเตอร์รถเข็นช็อปปิ้งอาหารจะแสดงตัวอย่างรถเข็นช็อปปิ้ง ของชำจากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการจัดกลุ่ม UI เดียว ซึ่งจะกระตุ้นให้ผู้ใช้ ทำการซื้อในรถเข็นที่ยังไม่ได้ชำระเงินให้เสร็จสมบูรณ์ มีคลัสเตอร์รถเข็นช็อปปิ้งอาหารเพียงคลัสเตอร์เดียว - คลัสเตอร์รถเข็นช็อปปิ้งอาหารต้องแสดงจำนวนรายการทั้งหมดในรถเข็น และอาจรวมรูปภาพสำหรับรายการ X ในรถเข็นของผู้ใช้ด้วย   - รูปที่: กลุ่มรถเข็นช็อปปิ้งอาหารจากพาร์ทเนอร์รายเดียว (*UI มีไว้เพื่อวัตถุประสงค์ในการอธิบายเท่านั้น) 
 
- คลัสเตอร์รายการช็อปปิ้งอาหารจะแสดงตัวอย่างรายการช็อปปิ้งของชำ จากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการจัดกลุ่ม UI เดียว ซึ่งจะแจ้งให้ผู้ใช้ กลับไปที่แอปที่เกี่ยวข้องเพื่ออัปเดตและทำรายการให้เสร็จสมบูรณ์ มี คลัสเตอร์รายการช็อปปิ้งอาหารเพียงคลัสเตอร์เดียว   - รูปภาพ: คลัสเตอร์รายการช็อปปิ้งอาหารจากพาร์ทเนอร์รายเดียว (*UI for illustrative purposes only) 
- คลัสเตอร์สั่งซื้ออีกครั้งจะแสดงตัวอย่างคำสั่งซื้อก่อนหน้าจาก พาร์ทเนอร์นักพัฒนาแอปหลายรายในการจัดกลุ่ม UI เดียว ซึ่งจะกระตุ้นให้ผู้ใช้สั่งซื้ออีกครั้ง มีคลัสเตอร์เรียงลำดับใหม่เพียงคลัสเตอร์เดียว - คลัสเตอร์การเรียงลำดับใหม่ต้องแสดงจำนวนรวมของสินค้าใน คำสั่งซื้อก่อนหน้าของผู้ใช้ และต้องมีรายการใดรายการหนึ่งต่อไปนี้ด้วย - รูปภาพสำหรับรายการ X ในคำสั่งซื้อก่อนหน้าของผู้ใช้
- ป้ายกำกับสำหรับรายการ X ในคำสั่งซื้อก่อนหน้าของผู้ใช้
 
   - รูปภาพ: คลัสเตอร์การสั่งอาหารซ้ำจากพาร์ทเนอร์รายเดียว (*UI for illustrative purposes only) 
สิ่งที่ต้องเตรียมก่อนดำเนินการ
ระดับ 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'
}
สรุป
การออกแบบนี้อิงตามการใช้งานบริการ ที่เชื่อมโยง
ข้อมูลที่ไคลเอ็นต์เผยแพร่ได้จะขึ้นอยู่กับขีดจำกัดต่อไปนี้สำหรับคลัสเตอร์ประเภทต่างๆ
| ประเภทคลัสเตอร์ | ขีดจำกัดของคลัสเตอร์ | ขีดจำกัดสูงสุดของเอนทิตีในคลัสเตอร์ | 
|---|---|---|
| คลัสเตอร์คำแนะนำ | ไม่เกิน 7 | สูงสุด 50 รายการ ( ProductEntity,RecipeEntityหรือStoreEntity) | 
| คลัสเตอร์แนะนำ | มากที่สุด 1 | สูงสุด 20 รายการ ( ProductEntity,RecipeEntityหรือStoreEntity) | 
| กลุ่มรถเข็นช็อปปิ้งอาหาร | มากที่สุด 1 | ShoppingCartEntityสูงสุด 1 รายการ | 
| กลุ่มรายการช็อปปิ้งอาหาร | มากที่สุด 1 | ShoppingListEntityสูงสุด 1 รายการ | 
| คลัสเตอร์การสั่งอาหารอีกครั้ง | มากที่สุด 1 | ReorderEntityสูงสุด 1 รายการ | 
ขั้นตอนที่ 1: ระบุข้อมูลนิติบุคคล
SDK ได้กำหนดเอนทิตีต่างๆ เพื่อแสดงรายการแต่ละประเภท เรารองรับ เอนทิตีต่อไปนี้สำหรับหมวดหมู่อาหาร
- ProductEntity
- StoreEntity
- RecipeEntity
- FoodShoppingCart
- FoodShoppingList
- FoodReorderCluster
แผนภูมิด้านล่างแสดงแอตทริบิวต์ที่มีและข้อกำหนดสำหรับแต่ละประเภท
ProductEntity
ออบเจ็กต์ ProductEntity แสดงถึงรายการแต่ละรายการ (เช่น รายการของชำ
อาหาร จานจากร้านอาหาร หรือโปรโมชัน) ที่พาร์ทเนอร์นักพัฒนาแอปต้องการ
เผยแพร่
 
    ProductEntity
    | แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ | 
|---|---|---|---|
| ภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 ภาพ | ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ | 
| URI ของการดำเนินการ | ต้องระบุ | Deep Link ไปยังหน้าในแอปที่แสดงรายละเอียดเกี่ยวกับ ผลิตภัณฑ์ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ | URI | 
| ชื่อ | ไม่บังคับ | ชื่อผลิตภัณฑ์ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 90 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ราคา - ปัจจุบัน | ต้องมีแบบมีเงื่อนไข | ราคาปัจจุบันของผลิตภัณฑ์ ต้องระบุหากระบุราคาขีดทับ | ข้อความอิสระ | 
| ราคา - ขีดฆ่า | ไม่บังคับ | ราคาเดิมของเอนทิตีซึ่งมีขีดทับใน UI | ข้อความอิสระ | 
| ข้อความเสริม | ไม่บังคับ | ข้อความไฮไลต์เพื่อแสดงโปรโมชัน กิจกรรม หรือข้อมูลอัปเดตสำหรับผลิตภัณฑ์ หากมี | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ข้อความเสริม | ไม่บังคับ | ข้อความข้อกำหนดและเงื่อนไขสำหรับข้อความไฮไลต์ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| การให้คะแนน (ไม่บังคับ) - หมายเหตุ: การให้คะแนนทั้งหมดจะแสดง โดยใช้ระบบการให้คะแนนดาวมาตรฐานของเรา | |||
| การจัดประเภท - ค่าสูงสุด | ไม่บังคับ | ค่าสูงสุดของระดับการให้คะแนน ต้องระบุหากมีการระบุค่าปัจจุบันของการจัดประเภทด้วย | ตัวเลข >= 0.0 | 
| การจัดประเภท - ค่าปัจจุบัน | ไม่บังคับ | ค่าปัจจุบันของระดับการให้คะแนน ต้องระบุหากระบุค่าสูงสุดของการจัดประเภทด้วย | ตัวเลข >= 0.0 | 
| การให้คะแนน - จำนวน | ไม่บังคับ | จำนวนการให้คะแนนของผลิตภัณฑ์ หมายเหตุ: ระบุฟิลด์นี้หากแอปของคุณ ควบคุมวิธีแสดงจำนวนต่อผู้ใช้ ใช้สตริงที่กระชับ เช่น หากจำนวนคือ 1,000,000 ให้พิจารณาใช้ตัวย่อ เช่น 1M เพื่อไม่ให้ระบบตัดจำนวนในขนาดการแสดงผลที่เล็กลง | สตริง | 
| การจัดประเภท - ค่าจำนวน | ไม่บังคับ | จำนวนการให้คะแนนของผลิตภัณฑ์ หมายเหตุ: ระบุช่องนี้หากคุณไม่ได้จัดการ ตรรกะการย่อคำที่แสดงด้วยตนเอง หากมีทั้งจำนวนและค่าจำนวน ระบบจะแสดงจำนวนต่อผู้ใช้ | ยาว | 
| DisplayTimeWindow (ไม่บังคับ) - ตั้งค่ากรอบเวลา เพื่อให้เนื้อหาแสดงในแพลตฟอร์ม | |||
| การประทับเวลาเริ่มต้น | ไม่บังคับ | การประทับเวลา Epoch หลังจากที่ควรแสดงเนื้อหาบน แพลตฟอร์ม หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงในแพลตฟอร์ม | การประทับเวลา Epoch ในหน่วยมิลลิวินาที | 
| การประทับเวลาสิ้นสุด | ไม่บังคับ | การประทับเวลา Epoch หลังจากที่ระบบจะไม่แสดงเนื้อหาบนแพลตฟอร์มอีกต่อไป หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงในแพลตฟอร์ม | การประทับเวลา Epoch ในหน่วยมิลลิวินาที | 
StoreEntity
ออบเจ็กต์ StoreEntity แสดงถึงร้านค้าแต่ละร้านที่พาร์ทเนอร์นักพัฒนาแอป
ต้องการเผยแพร่ เช่น ร้านอาหารหรือร้านขายของชำ
 
    StoreEntity
    | แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ | 
|---|---|---|---|
| ภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 ภาพ | ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ | 
| URI การดำเนินการ | ต้องระบุ | Deep Link ไปยังหน้าในแอปที่แสดงรายละเอียดเกี่ยวกับ ร้านค้า หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ | URI | 
| ชื่อ | ไม่บังคับ | ชื่อร้านค้า | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ตำแหน่ง | ไม่บังคับ | สถานที่ตั้งของร้านค้า | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ข้อความเสริม | ไม่บังคับ | ข้อความไฮไลต์เพื่อแสดงโปรโมชัน กิจกรรม หรือข้อมูลอัปเดตสำหรับร้านค้า หากมี | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ข้อความเสริม | ไม่บังคับ | ข้อความข้อกำหนดและเงื่อนไขสำหรับข้อความไฮไลต์ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| คำอธิบาย | ไม่บังคับ | คำอธิบายของร้านค้า | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 90 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| หมวดหมู่ | ไม่บังคับ | หมวดหมู่ของร้านค้า ในบริบทของสถานที่รับประทานอาหาร อาจเป็น อาหาร เช่น "ฝรั่งเศส" "อเมริกันสมัยใหม่" "ราเม็ง" "ไฟน์ไดนิ่ง" | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| หมายเหตุ: การให้คะแนนทั้งหมดจะแสดงโดยใช้ ระบบการให้คะแนนดาวมาตรฐาน | |||
| การจัดประเภท - ค่าสูงสุด | ไม่บังคับ | ค่าสูงสุดของระดับการให้คะแนน ต้องระบุหากมีการระบุค่าปัจจุบันของการจัดประเภทด้วย | ตัวเลข >= 0.0 | 
| การจัดประเภท - ค่าปัจจุบัน | ไม่บังคับ | ค่าปัจจุบันของระดับการให้คะแนน ต้องระบุหากระบุค่าสูงสุดของการจัดประเภทด้วย | ตัวเลข >= 0.0 | 
| การให้คะแนน - จำนวน | ไม่บังคับ | จำนวนคะแนนของร้านค้า หมายเหตุ: ระบุฟิลด์นี้หากแอปต้องการ ควบคุมวิธีแสดงต่อผู้ใช้ ระบุสตริงที่กระชับ ซึ่งแสดงต่อผู้ใช้ได้ เช่น หากจำนวนคือ 1,000,000 ให้พิจารณาใช้ตัวย่อ เช่น 1M เพื่อไม่ให้ระบบตัดข้อความ ในขนาดการแสดงผลที่เล็กลง | สตริง | 
| การจัดประเภท - ค่าจำนวน | ไม่บังคับ | จำนวนคะแนนของร้านค้า หมายเหตุ: ระบุช่องนี้หากไม่ต้องการจัดการ ตรรกะการย่อคำที่แสดงด้วยตนเอง หากมีทั้งจำนวนและค่าจำนวน เราจะใช้จำนวนเพื่อแสดงต่อผู้ใช้ | ยาว | 
RecipeEntity
ออบเจ็กต์ RecipeEntity แสดงถึงรายการสูตรอาหารที่พาร์ทเนอร์นักพัฒนาแอปต้องการ
เผยแพร่
 
    RecipeEntity
    | แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ | 
|---|---|---|---|
| ภาพโปสเตอร์ | ต้องระบุ | ต้องระบุรูปภาพอย่างน้อย 1 ภาพ | ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ | 
| URI ของการดำเนินการ | ต้องระบุ | Deep Link ไปยังหน้าในแอปที่แสดงรายละเอียดเกี่ยวกับ สูตรอาหาร หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ | URI | 
| ชื่อ | ไม่บังคับ | ชื่อสูตรอาหาร | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ผู้เขียน | ไม่บังคับ | ผู้เขียนสูตรอาหาร | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| เวลาในการทำ/เตรียม | ไม่บังคับ | เวลาทำอาหารของสูตรอาหาร | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ข้อความเสริม | ไม่บังคับ | ข้อความไฮไลต์เพื่อแสดงโปรโมชัน กิจกรรม หรือข้อมูลอัปเดตสำหรับสูตรอาหาร หากมี | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| หมวดหมู่ | ไม่บังคับ | หมวดหมู่ของสูตรอาหาร | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 45 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| คำอธิบาย | ไม่บังคับ | คำอธิบายของสูตรอาหาร | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 90 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| หมายเหตุ: การจัดประเภททั้งหมดจะแสดงโดยใช้ ระบบการให้คะแนนดาวมาตรฐาน | |||
| การจัดประเภท - ค่าสูงสุด | ไม่บังคับ | ค่าสูงสุดของระดับการให้คะแนน ต้องระบุหากมีการระบุค่าปัจจุบันของการจัดประเภทด้วย | ตัวเลข >= 0.0 | 
| การจัดประเภท - ค่าปัจจุบัน | ไม่บังคับ | ค่าปัจจุบันของระดับการให้คะแนน ต้องระบุหากระบุค่าสูงสุดของการจัดประเภทด้วย | ตัวเลข >= 0.0 | 
| การให้คะแนน - จำนวน | ไม่บังคับ | จำนวนการให้คะแนนสำหรับสูตรอาหาร หมายเหตุ: ระบุฟิลด์นี้หากแอปต้องการ ควบคุมวิธีแสดงต่อผู้ใช้ ระบุสตริงที่กระชับ ซึ่งแสดงต่อผู้ใช้ได้ เช่น หากจำนวนคือ 1,000,000 ให้พิจารณาใช้ตัวย่อ เช่น 1M เพื่อไม่ให้ระบบตัดข้อความ ในขนาดการแสดงผลที่เล็กลง | สตริง | 
| การจัดประเภท - ค่าจำนวน | ไม่บังคับ | จำนวนการให้คะแนนสำหรับสูตรอาหาร หมายเหตุ: ระบุช่องนี้หากไม่ต้องการจัดการ ตรรกะการย่อคำที่แสดงด้วยตนเอง หากมีทั้งจำนวนและค่าจำนวน เราจะใช้จำนวนเพื่อแสดงต่อผู้ใช้ | ยาว | 
FoodShoppingCart
 
        | แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ | 
|---|---|---|---|
| URI การดำเนินการ | ต้องระบุ | Deep Link ไปยังรถเข็นช็อปปิ้งในแอปของพาร์ทเนอร์ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ | URI | 
| จำนวนรายการ | ต้องระบุ | จํานวนสินค้า (ไม่ใช่แค่จํานวนผลิตภัณฑ์) ในรถเข็นช็อปปิ้ง ตัวอย่าง: หากมีส้ม 3 ผลและแอปเปิล 1 ผลใน รถเข็น ตัวเลขนี้ควรเป็น 4 | จำนวนเต็ม >= 1 | 
| ชื่อ | ไม่บังคับ | ชื่อของรถเข็น (เช่น รถเข็นของคุณ) หากนักพัฒนาแอปไม่ได้ระบุชื่อ รถเข็น จะเป็นชื่อเริ่มต้น | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 25 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ข้อความการดำเนินการ | ไม่บังคับ | ข้อความคำกระตุ้นให้ดำเนินการของปุ่มในรถเข็นช็อปปิ้ง (เช่น ถุงช็อปปิ้งของคุณ) หากนักพัฒนาแอปไม่ได้ระบุข้อความการดำเนินการ ดูรถเข็นจะเป็นค่าเริ่มต้น แอตทริบิวต์นี้รองรับในเวอร์ชัน 1.1.0 ขึ้นไป | สตริง | 
| รูปภาพรถเข็น | ไม่บังคับ | รูปภาพของผลิตภัณฑ์แต่ละรายการในรถเข็น ระบุรูปภาพได้สูงสุด 10 รูปตามลำดับความสำคัญ จำนวนรูปภาพที่แสดงจริงจะขึ้นอยู่กับรูปแบบของอุปกรณ์ | ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ | 
| ป้ายกำกับรายการ | ไม่บังคับ | รายการป้ายกำกับสำหรับสินค้าในรายการช็อปปิ้ง จำนวนป้ายกำกับที่แสดงจริง ขึ้นอยู่กับรูปแบบของอุปกรณ์ | รายการป้ายกำกับข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| DisplayTimeWindow (ไม่บังคับ) - ตั้งค่ากรอบเวลา เพื่อให้เนื้อหาแสดงในแพลตฟอร์ม | |||
| การประทับเวลาเริ่มต้น | ไม่บังคับ | การประทับเวลา Epoch หลังจากที่ควรแสดงเนื้อหาบน แพลตฟอร์ม หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงในแพลตฟอร์ม | การประทับเวลา Epoch ในหน่วยมิลลิวินาที | 
| การประทับเวลาสิ้นสุด | ไม่บังคับ | การประทับเวลา Epoch หลังจากที่ระบบจะไม่แสดงเนื้อหาบนแพลตฟอร์มอีกต่อไป หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงในแพลตฟอร์ม | การประทับเวลา Epoch ในหน่วยมิลลิวินาที | 
FoodShoppingList
 
        | แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ | 
|---|---|---|---|
| URI การดำเนินการ | ต้องระบุ | Deep Link ไปยังรายการช็อปปิ้งในแอปของพาร์ทเนอร์ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ | URI | 
| จำนวนรายการ | ต้องระบุ | จำนวนสินค้าในรายการช็อปปิ้ง | จำนวนเต็ม >= 1 | 
| ชื่อ | ไม่บังคับ | ชื่อของรายการ (เช่น รายการซื้อของชำของคุณ) หากนักพัฒนาแอปไม่ได้ระบุชื่อ รายการช็อปปิ้งจะเป็นชื่อเริ่มต้น | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 25 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ป้ายกำกับรายการ | ต้องระบุ | รายการป้ายกำกับสำหรับสินค้าในรายการช็อปปิ้ง ต้องระบุป้ายกำกับอย่างน้อย 1 รายการ และระบุได้สูงสุด 10 รายการตามลำดับความสำคัญ จำนวนป้ายกำกับที่แสดงจริงจะขึ้นอยู่กับรูปแบบของอุปกรณ์ | รายการป้ายกำกับข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 20 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
FoodReorderCluster
 
        | แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ | 
|---|---|---|---|
| URI การดำเนินการ | ต้องระบุ | Deep Link สำหรับสั่งซื้ออีกครั้งในแอปของพาร์ทเนอร์ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ | URI | 
| ข้อความการดำเนินการ | ไม่บังคับ | ข้อความกระตุ้นให้ดำเนินการของปุ่มในส่วน "สั่งซื้ออีกครั้ง" (เช่น สั่งซื้ออีกครั้ง) หากนักพัฒนาแอปไม่ได้ระบุข้อความการดำเนินการ สั่งซื้ออีกครั้งจะเป็นค่าเริ่มต้น แอตทริบิวต์นี้รองรับในเวอร์ชัน 1.1.0 ขึ้นไป | สตริง | 
| จำนวนรายการ | ต้องระบุ | จำนวนสินค้า (ไม่ใช่แค่จำนวนผลิตภัณฑ์) ในคำสั่งซื้อก่อนหน้า ตัวอย่างเช่น หากมีกาแฟขนาดเล็ก 3 แก้วและครัวซองต์ 1 ชิ้นใน คำสั่งซื้อก่อนหน้า ตัวเลขนี้ควรเป็น 4 | จำนวนเต็ม >= 1 | 
| ชื่อ | ต้องระบุ | ชื่อของสินค้าที่สั่งซื้อซ้ำ | ข้อความอิสระ ขนาดข้อความที่แนะนำ: ไม่เกิน 40 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ป้ายกำกับรายการ | ไม่บังคับ (หากไม่ได้ระบุไว้ คุณควรระบุภาพโปสเตอร์) | รายการป้ายกำกับสินค้าสำหรับคำสั่งซื้อก่อนหน้า ระบุป้ายกำกับได้สูงสุด 10 รายการตามลำดับความสำคัญ จำนวนป้ายกำกับที่แสดงจริงจะขึ้นอยู่กับรูปแบบของอุปกรณ์ | รายการข้อความอิสระ ขนาดข้อความที่แนะนำต่อป้ายกำกับ: ไม่เกิน 20 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ภาพโปสเตอร์ | ไม่บังคับ (หากไม่ได้ระบุไว้ คุณควรระบุป้ายกำกับรายการ) | รูปภาพของสินค้าในคำสั่งซื้อก่อนหน้า ระบุรูปภาพได้สูงสุด 10 รูปตามลำดับความสำคัญ จำนวนรูปภาพที่แสดงจริงจะขึ้นอยู่กับรูปแบบของอุปกรณ์ | ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ | 
ข้อกำหนดเกี่ยวกับรูปภาพ
ข้อกำหนดที่จำเป็นสำหรับชิ้นงานรูปภาพแสดงอยู่ด้านล่าง
| สัดส่วนภาพ | พิกเซลขั้นต่ำ | พิกเซลที่แนะนํา | 
|---|---|---|
| สี่เหลี่ยมจัตุรัส (1x1) Preferred | 300x300 | 1200x1200 | 
| แนวนอน (1.91x1) | 600x314 | 1200x628 | 
| แนวตั้ง (4x5) | 480x600 | 960x1200 | 
รูปแบบไฟล์
PNG, JPG, GIF แบบภาพนิ่ง, WebP
ขนาดไฟล์สูงสุด
5120 KB
คำแนะนำเพิ่มเติม
- พื้นที่ปลอดภัยของรูปภาพ: ใส่เนื้อหาที่สําคัญไว้ตรงกลาง 80% ของ รูปภาพ
- ใช้พื้นหลังโปร่งใสเพื่อให้รูปภาพแสดงอย่างถูกต้องในการตั้งค่าธีมมืดและธีมสว่าง
ขั้นตอนที่ 2: ระบุข้อมูลคลัสเตอร์
ขอแนะนำให้เรียกใช้งานเนื้อหาที่เผยแพร่ในเบื้องหลัง (เช่น ใช้ WorkManager) และกำหนดเวลาเป็นประจำหรือตามเหตุการณ์ (เช่น ทุกครั้งที่ ผู้ใช้เปิดแอป หรือเมื่อผู้ใช้เพิ่งเพิ่มสินค้าลงในรถเข็น)
AppEngageFoodClient มีหน้าที่เผยแพร่คลัสเตอร์อาหาร
มี API ต่อไปนี้เพื่อเผยแพร่คลัสเตอร์ในไคลเอ็นต์
- isServiceAvailable
- publishRecommendationClusters
- publishFeaturedCluster
- publishFoodShoppingCart
- publishFoodShoppingList
- publishReorderCluster
- publishUserAccountManagementRequest
- updatePublishStatus
- deleteRecommendationsClusters
- deleteFeaturedCluster
- deleteFoodShoppingCartCluster
- deleteFoodShoppingListCluster
- deleteReorderCluster
- 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 มีแอตทริบิวต์ต่อไปนี้ได้
| แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | 
|---|---|---|
| รายการ ProductEntity, StoreEntity หรือ RecipeEntity | ต้องระบุ | รายการเอนทิตีที่ประกอบกันเป็นคำแนะนำสำหรับ คลัสเตอร์คำแนะนำนี้ เอนทิตีในคลัสเตอร์เดียวต้องเป็นประเภทเดียวกัน | 
| ชื่อ | ต้องระบุ | ชื่อของคลัสเตอร์คำแนะนำ (เช่น ประหยัด สุดคุ้มกับเมนูวันขอบคุณพระเจ้า) ขนาดข้อความที่แนะนำ: ไม่เกิน 25 อักขระ (ข้อความที่ยาวเกินไปอาจแสดงจุดไข่ปลา) | 
| ชื่อรอง | ไม่บังคับ | คำบรรยายของคลัสเตอร์คำแนะนำ | 
| URI ของการดำเนินการ | ไม่บังคับ | Deep Link ไปยังหน้าในแอปพาร์ทเนอร์ที่ผู้ใช้จะดู รายการคำแนะนำทั้งหมดได้ หมายเหตุ: คุณใช้ Deep Link สำหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ | 
Kotlin
client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Big savings on Thanksgiving menu")
                        .build())
                .build())
Java
client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Big savings on Thanksgiving menu")
                        .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ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก
- ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์แนะนำที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
publishFoodShoppingCart
ใช้ API นี้เพื่อเผยแพร่ออบเจ็กต์ FoodShoppingCart
Kotlin
client.publishFoodShoppingCart(
            PublishFoodShoppingCartClusterRequest.Builder()
                .setShoppingCart(
                    FoodShoppingCart.Builder()
                        ...
                        .build())
                .build())
Java
client.publishFoodShoppingCart(
            new PublishFoodShoppingCartClusterRequest.Builder()
                .setShoppingCart(
                    new FoodShoppingCart.Builder()
                        ...
                        .build())
                .build());
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล FoodShoppingCartที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก
- ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์รถเข็นช็อปปิ้งที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
publishFoodShoppingList
ใช้ 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ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก
- ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์รายการช็อปปิ้งที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
publishReorderCluster
ใช้ API นี้เพื่อเผยแพร่ออบเจ็กต์ FoodReorderCluster
Kotlin
client.publishReorderCluster(
            PublishReorderClusterRequest.Builder()
                .setReorderCluster(
                    FoodReorderCluster.Builder()
                        ...
                        .build())
                .build())
Java
client.publishReorderCluster(
            new PublishReorderClusterRequest.Builder()
                .setReorderCluster(
                    new FoodReorderCluster.Builder()
                        ...
                        .build())
                .build());
เมื่อบริการได้รับคำขอ ระบบจะดำเนินการต่อไปนี้ภายในธุรกรรมเดียว
- ระบบจะนำข้อมูล FoodReorderClusterที่มีอยู่จากพาร์ทเนอร์นักพัฒนาออก
- ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอในคลัสเตอร์การเรียงลำดับใหม่ที่อัปเดต
ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะเดิมไว้
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();
เมื่อได้รับคำขอ บริการจะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์แนะนำ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้
deleteFoodShoppingCartCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์รถเข็นช็อปปิ้งอาหาร
Kotlin
client.deleteFoodShoppingCartCluster()
Java
client.deleteFoodShoppingCartCluster();
เมื่อได้รับคำขอ บริการจะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์รถเข็นช็อปปิ้งอาหาร ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้
deleteFoodShoppingListCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์รายการช็อปปิ้งอาหาร
Kotlin
client.deleteFoodShoppingListCluster()
Java
client.deleteFoodShoppingListCluster();
เมื่อได้รับคำขอ บริการจะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์รายการช็อปปิ้งอาหาร ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้
deleteReorderCluster
API นี้ใช้เพื่อลบเนื้อหาของ FoodReorderCluster
Kotlin
client.deleteReorderCluster()
Java
client.deleteReorderCluster();
เมื่อได้รับคำขอ บริการจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์การเรียงลำดับใหม่ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และคงสถานะเดิมไว้
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 การเผยแพร่ เช่น เพื่อให้ดำเนินการติดตามผลเพื่อกู้คืนและส่งงานที่สำเร็จอีกครั้งได้
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 food shopping cart cluster publish when PUBLISH_FOOD_SHOPPING_CART broadcast
  // is received
  // Trigger food shopping list cluster publish when PUBLISH_FOOD_SHOPPING_LIST broadcast
  // is received
  // Trigger reorder cluster publish when PUBLISH_REORDER_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 food Shopping Cart Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART),
                           com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                           /*scheduler=*/null)
// Register food Shopping List Cluster Publish Intent
  context.registerReceiver(AppEngageBroadcastReceiver(),
                           IntentFilter(Intents.ACTION_PUBLISH_FOOD_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)
}
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 food shopping cart cluster publish when PUBLISH_FOOD_SHOPPING_CART broadcast is
// received
// Trigger food shopping list cluster publish when PUBLISH_FOOD_SHOPPING_LIST broadcast is
// received
// Trigger reorder cluster publish when PUBLISH_REORDER_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 food Shopping Cart Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_FOOD_SHOPPING_CART),
                         com.google.android.engage.service.BroadcastReceiverPermissions.BROADCAST_REQUEST_DATA_PUBLISH_PERMISSION,
                         /*scheduler=*/null);
// Register food Shopping List Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
                         new IntentFilter(com.google.android.engage.shopping.service.Intents.ACTION_PUBLISH_FOOD_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);
}
- ประกาศการติดตั้งใช้งานแบบคงที่ด้วยแท็ก - <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.food.PUBLISH_FOOD_SHOPPING_CART" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LIST" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTER" />
      </intent-filter>
   </receiver>
</application>
บริการจะส่ง Intent ต่อไปนี้
- com.google.android.engage.action.PUBLISH_RECOMMENDATIONเราขอแนะนำให้เริ่มการโทร- publishRecommendationClustersเมื่อ ได้รับความตั้งใจนี้
- com.google.android.engage.action.PUBLISH_FEATUREDขอแนะนำให้เริ่ม- publishFeaturedClusterเมื่อได้รับ เจตนานี้
- com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_CARTเราขอแนะนำให้เริ่ม- publishFoodShoppingCartการโทรเมื่อได้รับ ความตั้งใจนี้
- com.google.android.engage.action.food.PUBLISH_FOOD_SHOPPING_LISTเราขอแนะนำให้เริ่ม- publishFoodShoppingListการโทรเมื่อได้รับ ความตั้งใจนี้
- com.google.android.engage.action.food.PUBLISH_REORDER_CLUSTERขอแนะนำให้เริ่ม- publishReorderClusterเมื่อได้รับ เจตนานี้
เวิร์กโฟลว์การผสานรวม
ดูคำแนะนำแบบทีละขั้นตอนเกี่ยวกับการยืนยันการผสานรวมหลังจากเสร็จสมบูรณ์ได้ที่ เวิร์กโฟลว์การผสานรวมนักพัฒนาแอป Engage
คำถามที่พบบ่อย
ดูคำถามที่พบบ่อยได้ที่คำถามที่พบบ่อยเกี่ยวกับ Engage SDK
รายชื่อติดต่อ
โปรดติดต่อ engage-developers@google.com หากมีคำถามในระหว่าง
กระบวนการผสานรวม ทีมของเราจะตอบกลับโดยเร็วที่สุด
ขั้นตอนถัดไป
หลังจากผสานรวมเสร็จสมบูรณ์แล้ว ขั้นตอนถัดไปมีดังนี้
- ส่งอีเมลไปที่
engage-developers@google.comและแนบ APK ที่ผสานรวมแล้วซึ่งพร้อมให้ Google ทดสอบ
- Google จะดำเนินการยืนยันและตรวจสอบภายในเพื่อให้มั่นใจว่าการผสานรวมทำงานได้ตามที่คาดไว้ หากจำเป็นต้องเปลี่ยนแปลง Google จะติดต่อคุณ พร้อมรายละเอียดที่จำเป็น
- เมื่อการทดสอบเสร็จสมบูรณ์และไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ Google จะติดต่อคุณเพื่อ แจ้งให้ทราบว่าคุณเริ่มเผยแพร่ APK ที่อัปเดตและผสานรวมไปยัง Play Store ได้แล้ว
- หลังจาก Google ยืนยันว่าได้เผยแพร่ APK ที่อัปเดตแล้วไปยัง Play Store แล้ว ระบบจะเผยแพร่คลัสเตอร์รายการแนะนำ รายการแนะนำ รถเข็นช็อปปิ้ง รายการช็อปปิ้ง และสั่งซื้ออีกครั้ง และผู้ใช้จะเห็นคลัสเตอร์ดังกล่าว
