Google กำลังสร้างแพลตฟอร์มในอุปกรณ์เพื่อจัดระเบียบ แอปแยกตามประเภทธุรกิจ และมอบประสบการณ์ดื่มด่ำกับประสบการณ์ใหม่ สำหรับการบริโภคเนื้อหาแอปที่ปรับเปลี่ยนในแบบของคุณ และการค้นพบ ประสบการณ์การใช้งานแบบเต็มหน้าจอนี้ช่วยให้พาร์ทเนอร์นักพัฒนาแอป โอกาสในการแสดงเนื้อหาจำนวนมากที่ดีที่สุด ในช่องทางเฉพาะภายนอก ของแอปของตนได้อย่างไร
เอกสารนี้มีคำแนะนำสำหรับพาร์ทเนอร์นักพัฒนาซอฟต์แวร์ในการผสานรวม เนื้อหาโซเชียลโดยใช้ Engage SDK ในการสร้างพื้นที่ใหม่นี้
รายละเอียดการผสานรวม
ส่วนต่อไปนี้จะแสดงรายละเอียดการผสานรวม
คำศัพท์
คลัสเตอร์คำแนะนำแสดงคำแนะนำที่ปรับเปลี่ยนในแบบของคุณจากผู้ใช้แต่ละราย พาร์ทเนอร์นักพัฒนาซอฟต์แวร์
คำแนะนำจะมีโครงสร้างต่อไปนี้
คลัสเตอร์คำแนะนำ: มุมมอง UI ที่มีกลุ่มคำแนะนำ จากพาร์ทเนอร์นักพัฒนาคนเดียวกัน
คลัสเตอร์คำแนะนำแต่ละรายการประกอบด้วย 1 ใน 2 ประเภทต่อไปนี้ เอนทิตี :
- เอนทิตีสื่อแนวตั้ง
- เอนทิตีโพสต์บนโซเชียล
PortraitMediaEntity ต้องมีรูปภาพแนวตั้ง 1 รูปสำหรับโพสต์ โปรไฟล์และ ข้อมูลเมตาที่เกี่ยวข้องกับการโต้ตอบเป็นตัวเลือกที่ไม่บังคับ
โพสต์
- รูปภาพในโหมดแนวตั้งและการประทับเวลา หรือ
- รูปภาพในโหมดแนวตั้ง + เนื้อหาข้อความและการประทับเวลา
โปรไฟล์
- รูปโปรไฟล์ ชื่อ หรือแฮนเดิล รูปภาพเพิ่มเติม
การโต้ตอบ
- นับและติดป้ายกำกับเท่านั้น หรือ
- จำนวนและภาพ (ไอคอน)
SocialPostEntity มีข้อมูลเมตาเกี่ยวกับโปรไฟล์ โพสต์ และการโต้ตอบ
โปรไฟล์
- รูปโปรไฟล์ ชื่อ หรือแฮนเดิล ข้อความเพิ่มเติม รูปภาพเพิ่มเติม
โพสต์
- ข้อความและการประทับเวลา หรือ
- ริชมีเดีย (URL ของรูปภาพหรือริชมีเดีย) และการประทับเวลา หรือ
- ข้อความและริชมีเดีย (URL ของรูปภาพหรือริชมีเดีย) และการประทับเวลา หรือ
- ตัวอย่างวิดีโอ (ภาพปกและระยะเวลา) และการประทับเวลา
การโต้ตอบ
- จำนวนและ ป้ายกำกับเท่านั้น หรือ
- จำนวนและ ภาพ (ไอคอน)
งานก่อนเริ่มเวิร์กช็อป
ระดับ 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'
}
สรุป
การออกแบบนี้มาจากการใช้ ขอบเขต service [บริการ]
ข้อมูลที่ไคลเอ็นต์เผยแพร่ได้จะขึ้นอยู่กับขีดจำกัดต่อไปนี้สำหรับ ประเภทคลัสเตอร์
ประเภทคลัสเตอร์ | ขีดจำกัดของคลัสเตอร์ | ขีดจำกัดเอนทิตีขั้นต่ำในคลัสเตอร์ | ขีดจำกัดเอนทิตีสูงสุดในคลัสเตอร์ |
---|---|---|---|
คลัสเตอร์คำแนะนำ | สูงสุด 5 รายการ | อย่างน้อย 5 (PortraitMediaEntity หรือ
SocialPostEntity ) |
สูงสุด 25 (PortraitMediaEntity หรือ
SocialPostEntity ) |
ขั้นตอนที่ 1: ระบุข้อมูลเอนทิตี
SDK ได้กำหนดเอนทิตีที่แตกต่างกันเพื่อแสดงรายการแต่ละประเภท SDK สนับสนุนเอนทิตีต่อไปนี้สำหรับหมวดหมู่โซเชียล
PortraitMediaEntity
SocialPostEntity
แผนภูมิด้านล่างแสดงแอตทริบิวต์และข้อกำหนดสำหรับแต่ละประเภท
PortraitMediaEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI การทำงาน | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปผู้ให้บริการ หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
URI |
ข้อมูลเมตาที่เกี่ยวข้องกับโพสต์ (ต้องระบุ) | |||
รูปภาพ | ต้องระบุ |
รูปภาพควรเป็นสัดส่วนภาพแนวตั้ง UI อาจแสดงเพียง 1 ภาพหากมีหลายภาพ อย่างไรก็ตาม UI อาจมีภาพบ่งชี้ว่ามีภาพมากกว่า แอป หากโพสต์เป็นวิดีโอ ผู้ให้บริการควรแสดงภาพขนาดย่อ วิดีโอที่จะใช้แสดงเป็นรูปภาพ |
โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
เนื้อหาข้อความ | ไม่บังคับ | ข้อความหลักของโพสต์ ข้อมูลอัปเดต ฯลฯ | สตริง (สูงสุด 140 อักขระที่แนะนำ) |
การประทับเวลา | ไม่บังคับ | เวลาที่เผยแพร่โพสต์ | การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
เป็นเนื้อหาวิดีโอ | ไม่บังคับ | โพสต์นั้นเป็นวิดีโอใช่ไหม | บูลีน |
ระยะเวลาของวิดีโอ | ไม่บังคับ | ระยะเวลาของวิดีโอเป็นมิลลิวินาที | ยาว |
ข้อมูลเมตาที่เกี่ยวข้องกับโปรไฟล์ (ไม่บังคับ) | |||
ชื่อ | ต้องระบุ | ชื่อหรือแฮนเดิลโปรไฟล์ เช่น "สมชาย สกุลดี", "@TeamPixel" | สตริง(สูงสุด 25 อักขระที่แนะนำ) |
รูปโปรไฟล์ | ต้องระบุ |
รูปโปรไฟล์หรือรูปโปรไฟล์ของผู้ใช้ รูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
รูปภาพเพิ่มเติม | ไม่บังคับ |
ป้ายโปรไฟล์ ตัวอย่างเช่น - ป้ายที่ผ่านการยืนยันแล้ว รูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
ข้อมูลเมตาที่เกี่ยวข้องกับการโต้ตอบ (ไม่บังคับ) | |||
จำนวน | ไม่บังคับ |
ระบุจำนวนการโต้ตอบ เช่น "3.7 ล้าน" หมายเหตุ: หากมีทั้งค่าการนับและค่าการนับ ระบบจะใช้จำนวน |
สตริง ขนาดข้อความที่แนะนำ: สูงสุด 20 อักขระสำหรับจำนวน + ป้ายกำกับ รวมกัน |
ค่าจำนวน | ไม่บังคับ | จำนวนการโต้ตอบเป็นค่า หมายเหตุ: ระบุค่าการนับแทนค่า Count ถ้าแอปของคุณไม่จัดการตรรกะเกี่ยวกับ สำหรับโฆษณาแบบดิสเพลย์ขนาดต่างๆ กัน ถ้าทั้งสองนับ และมีค่าการนับ ระบบจะใช้จำนวน |
ยาว |
ป้ายกำกับ | ไม่บังคับ | ระบุว่าป้ายกำกับการโต้ตอบมีไว้เพื่ออะไร เช่น "ชอบ" | สตริง ขนาดข้อความที่แนะนำ: สูงสุด 20 อักขระสำหรับจำนวน + ป้ายกำกับ รวมกัน |
ภาพ | ไม่บังคับ |
ระบุว่าการโต้ตอบนี้มีไว้เพื่ออะไร ตัวอย่างเช่น - รูปภาพที่แสดง ไอคอนชอบ อีโมจิ ใส่รูปภาพได้มากกว่า 1 รูป แต่บางรูปอาจไม่ได้แสดงในบางรายการ รูปแบบของอุปกรณ์ หมายเหตุ: ต้องเป็นรูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
DisplayTimeWindow (ไม่บังคับ) - ตั้งค่ากรอบเวลา เนื้อหาจะแสดงบนแพลตฟอร์ม | |||
การประทับเวลาเริ่มต้น | ไม่บังคับ |
การประทับเวลา Epoch ที่เนื้อหาควรแสดงใน แพลตฟอร์ม หากไม่ได้ตั้งค่า เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
การประทับเวลาสิ้นสุด | ไม่บังคับ |
การประทับเวลา Epoch ที่เนื้อหาไม่แสดงอีกต่อไป บนพื้นผิว หากไม่ได้ตั้งค่า เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
SocialPostEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI การทำงาน | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปผู้ให้บริการ หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
URI |
ข้อมูลเมตาที่เกี่ยวข้องกับโพสต์ (ต้องระบุ) ต้องมี TextContent, รูปภาพ หรือ WebContent อย่างน้อย 1 รายการ |
|||
รูปภาพ | ไม่บังคับ |
รูปภาพควรเป็นสัดส่วนภาพแนวตั้ง UI อาจแสดงเพียง 1 ภาพหากมีหลายภาพ อย่างไรก็ตาม UI อาจมีภาพบ่งชี้ว่ามีภาพมากกว่า แอป หากโพสต์เป็นวิดีโอ ผู้ให้บริการควรแสดงภาพขนาดย่อ วิดีโอที่จะใช้แสดงเป็นรูปภาพ |
โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
เนื้อหาข้อความ | ไม่บังคับ | ข้อความหลักของโพสต์ ข้อมูลอัปเดต ฯลฯ | สตริง (สูงสุด 140 อักขระที่แนะนำ) |
เนื้อหาวิดีโอ (ไม่บังคับ) | |||
ระยะเวลา | ต้องระบุ | ระยะเวลาของวิดีโอเป็นมิลลิวินาที | ยาว |
รูปภาพ | ต้องระบุ | แสดงตัวอย่างรูปภาพเนื้อหาวิดีโอ | โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
ตัวอย่างลิงก์ (ไม่บังคับ) | |||
ตัวอย่างลิงก์ - ชื่อ | ต้องระบุ | ข้อความเพื่อระบุชื่อเนื้อหาหน้าเว็บ | สตริง |
แสดงตัวอย่างลิงก์ - ชื่อโฮสต์ | ต้องระบุ | ข้อความเพื่อระบุเจ้าของหน้าเว็บ เช่น "INSIDER" | สตริง |
ตัวอย่างลิงก์ - รูปภาพ | ไม่บังคับ | รูปภาพหลักของเนื้อหาเว็บ | โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
การประทับเวลา | ไม่บังคับ | เวลาที่เผยแพร่โพสต์ | การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
ข้อมูลเมตาที่เกี่ยวข้องกับโปรไฟล์ (ไม่บังคับ) | |||
ชื่อ | ต้องระบุ | ชื่อหรือรหัสหรือแฮนเดิลโปรไฟล์ เช่น "สมชาย สกุลดี", "@TeamPixel" | สตริง(สูงสุด 25 อักขระที่แนะนำ) |
ข้อความเพิ่มเติม | ไม่บังคับ |
สามารถใช้เป็นรหัสโปรไฟล์หรือแฮนเดิล หรือข้อมูลเมตาเพิ่มเติม เช่น "@John-Doe", "ผู้ติดตาม 5 ล้านคน", "คุณอาจชอบ", "มาแรง", "5 โพสต์ใหม่" |
สตริง(สูงสุด 40 อักขระที่แนะนำ) |
รูปโปรไฟล์ | ต้องระบุ |
รูปโปรไฟล์หรือรูปโปรไฟล์ของผู้ใช้ รูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
รูปภาพเพิ่มเติม | ไม่บังคับ |
ป้ายโปรไฟล์ เช่น ป้ายที่ผ่านการยืนยันแล้ว รูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
ข้อมูลเมตาที่เกี่ยวข้องกับการโต้ตอบ (ไม่บังคับ) | |||
จำนวน | ต้องระบุ | ระบุจำนวนการโต้ตอบ เช่น - "3.7 ล้าน" | สตริง (แนะนำให้ใช้อักขระไม่เกิน 20 ตัวสำหรับจำนวนและป้ายกำกับรวมกัน) |
ป้ายกำกับ |
ไม่บังคับ หากไม่ได้ตั้งค่า ต้องระบุภาพ |
ระบุว่าการโต้ตอบนี้มีไว้เพื่ออะไร เช่น "ชอบ" | สตริง (แนะนำให้ใช้อักขระไม่เกิน 20 ตัวสำหรับจำนวนและป้ายกำกับรวมกัน) |
ภาพ |
ไม่บังคับ หากจำเป็น ต้องระบุป้ายกำกับ |
ระบุว่าการโต้ตอบนี้มีไว้เพื่ออะไร เช่น รูปภาพที่แสดงไอคอนชอบ อีโมจิ ใส่รูปภาพได้มากกว่า 1 รูป แต่อาจไม่แสดงในบางรูป รูปแบบของอุปกรณ์ รูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
DisplayTimeWindow (ไม่บังคับ) - ตั้งค่ากรอบเวลา เนื้อหาจะแสดงบนแพลตฟอร์ม | |||
การประทับเวลาเริ่มต้น | ไม่บังคับ |
การประทับเวลา Epoch ที่เนื้อหาควรแสดงใน แพลตฟอร์ม หากไม่ได้ตั้งค่า เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
การประทับเวลาสิ้นสุด | ไม่บังคับ |
การประทับเวลา Epoch ที่เนื้อหาไม่แสดงอีกต่อไป บนพื้นผิว หากไม่ได้ตั้งค่า เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม |
การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
ข้อกำหนดเกี่ยวกับรูปภาพ
รูปภาพต้องโฮสต์บน CDN สาธารณะเพื่อให้ Google เข้าถึงได้ ให้พวกเขา
รูปแบบไฟล์
PNG, JPG, GIF แบบภาพนิ่ง, WebP
ขนาดไฟล์สูงสุด
5,120 KB
คำแนะนำเพิ่มเติม
- พื้นที่ปลอดภัยของรูปภาพ: ใส่เนื้อหาสําคัญไว้ตรงกลาง 80% ของ รูปภาพ
- ใช้พื้นหลังโปร่งใสเพื่อให้แสดงภาพได้อย่างถูกต้องใน การตั้งค่าธีมมืดและสว่าง
ขั้นตอนที่ 2: ระบุข้อมูลคลัสเตอร์
ขอแนะนำให้ดำเนินการเผยแพร่เนื้อหาในเบื้องหลัง (เช่น ใช้ WorkManager) เป็นประจำหรือตามเหตุการณ์ (เช่น ทุกครั้ง ผู้ใช้เปิดแอปหรือเมื่อผู้ใช้เพิ่งติดตามบัญชีใหม่)
AppEngageSocialClient
รับผิดชอบในการเผยแพร่คลัสเตอร์โซเชียล
การเผยแพร่คลัสเตอร์ในไคลเอ็นต์มี API ต่อไปนี้
isServiceAvailable
publishRecommendationClusters
publishUserAccountManagementRequest
updatePublishStatus
deleteRecommendationsClusters
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
อาจมีแอตทริบิวต์ต่อไปนี้
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย |
---|---|---|
รายการ SocialPostEntity หรือ PortraitMediaEntity | ต้องระบุ | รายการเอนทิตีที่ประกอบขึ้นเป็นคำแนะนำในเรื่องนี้ คลัสเตอร์คำแนะนำ เอนทิตีในคลัสเตอร์เดียวต้องเหมือนกัน ประเภท |
ชื่อ | ต้องระบุ | ชื่อคลัสเตอร์คำแนะนำ (เช่น ล่าสุด จากเพื่อนของคุณ) ขนาดข้อความที่แนะนำ: ไม่เกิน 25 อักขระ (ข้อความที่ ยาวเกินไป อาจแสดงจุดไข่ปลา) |
ชื่อรอง | ไม่บังคับ | คำบรรยายของคลัสเตอร์คำแนะนำ |
การดำเนินการ Uri | ไม่บังคับ |
Deep Link ไปยังหน้าในแอปพาร์ทเนอร์ซึ่งผู้ใช้สามารถดู รายการคำแนะนำทั้งหมด หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
Kotlin
client.publishRecommendationClusters( PublishRecommendationClustersRequest.Builder() .addRecommendationCluster( RecommendationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .setTitle("Latest from your friends") .build()) .build())
Java
client.publishRecommendationClusters( new PublishRecommendationClustersRequest.Builder() .addRecommendationCluster( new RecommendationCluster.Builder() .addEntity(entity1) .addEntity(entity2) .setTitle("Latest from your friends") .build()) .build());
เมื่อบริการได้รับคำขอ การดำเนินการต่อไปนี้จะเกิดขึ้นภายใน ธุรกรรมรายการเดียว:
- นำข้อมูลคลัสเตอร์คำแนะนำที่มีอยู่ทั้งหมดออกแล้ว
- ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอไว้ในคลัสเตอร์คำแนะนำใหม่
ในกรณีที่เกิดข้อผิดพลาด คำขอทั้งหมดจะถูกปฏิเสธและสถานะที่มีอยู่คือ บำรุง
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
หากไม่มีการเผยแพร่คลัสเตอร์ใดเลยด้วยเหตุผลทางธุรกิจภายใน เราขอแนะนำเป็นอย่างยิ่งให้อัปเดตสถานะการเผยแพร่โดยใช้ updatePublishStatus API ซึ่งเป็นสิ่งสำคัญเนื่องจาก :
- การแจ้งสถานะในทุกสถานการณ์ แม้ว่าจะมีการเผยแพร่เนื้อหาแล้วก็ตาม (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 ขอแนะนำให้เผยแพร่การ์ดลงชื่อเข้าใช้ หากผู้ให้บริการไม่สามารถเผยแพร่การ์ดลงชื่อเข้าใช้ได้ ไม่ว่าจะด้วยเหตุผลใดก็ตาม เราขอแนะนำให้เรียกใช้ updatePublishStatus API มีรหัสสถานะ 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();
เมื่อบริการได้รับคำขอ จะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์คำแนะนำ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมด และสภาวะเดิมจะยังคงอยู่
deleteUserManagementCluster
API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ UserAccountManagement
Kotlin
client.deleteUserManagementCluster()
Java
client.deleteUserManagementCluster();
เมื่อบริการได้รับคำขอ จะนำข้อมูลที่มีอยู่ออกจาก คลัสเตอร์ UserAccountManagement ในกรณีที่มีข้อผิดพลาด คำขอทั้งหมดจะ ถูกปฏิเสธและคงสถานะเดิมไว้
deleteClusters
API นี้ใช้เพื่อลบเนื้อหาของประเภทคลัสเตอร์ที่ระบุ
Kotlin
client.deleteClusters( DeleteClustersRequest.Builder() .addClusterType(ClusterType.TYPE_RECOMMENDATION) ... .build())
Java
client.deleteClusters( new DeleteClustersRequest.Builder() .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
พร้อมระบุสาเหตุเป็น
รหัสข้อผิดพลาด
รหัสข้อผิดพลาด | โน้ต |
---|---|
SERVICE_NOT_FOUND |
บริการไม่พร้อมใช้งานในอุปกรณ์ที่ระบุ |
SERVICE_NOT_AVAILABLE |
บริการพร้อมใช้งานในอุปกรณ์ที่ระบุ แต่ไม่พร้อมใช้งาน ณ เวลาที่โทร (เช่น ปิดใช้งานอย่างชัดแจ้ง) |
SERVICE_CALL_EXECUTION_FAILURE |
การดําเนินงานล้มเหลวเนื่องจากปัญหาเกี่ยวกับการแยกชุดข้อความ ในกรณีนี้ ลองอีกครั้งได้ |
SERVICE_CALL_PERMISSION_DENIED |
ผู้โทรไม่ได้รับอนุญาตให้เรียกใช้บริการ |
SERVICE_CALL_INVALID_ARGUMENT |
คำขอนี้มีข้อมูลที่ไม่ถูกต้อง (ตัวอย่างเช่น มากกว่าที่อนุญาต จำนวนคลัสเตอร์) |
SERVICE_CALL_INTERNAL |
เกิดข้อผิดพลาดที่ฝั่งบริการ |
SERVICE_CALL_RESOURCE_EXHAUSTED |
มีการเรียกใช้บริการบ่อยเกินไป |
ขั้นตอนที่ 3: จัดการการออกอากาศ Intent
นอกจากการเผยแพร่การเรียก Content API ผ่านงานแล้ว
ที่จำเป็นต่อการตั้งค่า
BroadcastReceiver
เพื่อรับ
คำขอสำหรับการเผยแพร่เนื้อหา
เป้าหมายของการออกอากาศเพื่อการเผยแพร่นั้นหลักๆ แล้วคือการเปิดใช้แอปอีกครั้งและการบังคับให้ใช้ข้อมูล การซิงค์ ความตั้งใจในการออกอากาศไม่ได้ออกแบบมาให้ส่งบ่อยครั้ง แต่เป็นเพียง ทริกเกอร์เมื่อบริการ Engage ระบุว่าเนื้อหาอาจไม่มีอัปเดต (สำหรับ เช่น 1 สัปดาห์) วิธีนี้จะเพิ่มความมั่นใจให้ผู้ใช้ ประสบการณ์การใช้งานเนื้อหาแบบใหม่ แม้ว่าแอปพลิเคชันจะไม่มีการเรียกใช้เพื่อ เป็นเวลานาน
ต้องตั้งค่า BroadcastReceiver
ด้วย 2 วิธีต่อไปนี้
- ลงทะเบียนอินสแตนซ์ของคลาส
BroadcastReceiver
แบบไดนามิกโดยใช้Context.registerReceiver()
การดำเนินการนี้จะทำให้แอปพลิเคชันสามารถสื่อสารกันได้ ที่ยังหลงเหลืออยู่ในความทรงจำ
class AppEngageBroadcastReceiver extends BroadcastReceiver {
// Trigger recommendation cluster publish when PUBLISH_RECOMMENDATION 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));
}
- ประกาศการติดตั้งใช้งานที่มีแท็ก
<receiver>
แบบคงที่ในบัญชีAndroidManifest.xml
วิธีนี้ช่วยให้แอปพลิเคชันสามารถรับการออกอากาศ เมื่อไม่ได้ทำงานอยู่ และอนุญาตให้แอปพลิเคชันสามารถเผยแพร่ เนื้อหานั้น
<application>
<receiver
android:name=".AppEngageBroadcastReceiver"
android:exported="true"
android:enabled="true">
<intent-filter>
<action android:name="com.google.android.engage.action.PUBLISH_RECOMMENDATION" />
</intent-filter>
</receiver>
</application>
ความตั้งใจต่อไปนี้จะส่งโดย บริการ:
com.google.android.engage.action.PUBLISH_RECOMMENDATION
ขอแนะนำให้เริ่มการโทรpublishRecommendationClusters
เมื่อ ที่จะได้รับเจตนานี้
เวิร์กโฟลว์การผสานรวม
ดูคำแนะนำทีละขั้นตอนเกี่ยวกับการยืนยันการผสานรวมหลังจากที่เสร็จสมบูรณ์ได้ที่ มีส่วนร่วมกับเวิร์กโฟลว์การผสานรวมของนักพัฒนาซอฟต์แวร์
คำถามที่พบบ่อย
ดูคำถามที่พบบ่อยเกี่ยวกับ Engage SDK สำหรับ คำถามที่พบบ่อย
รายชื่อติดต่อ
ข้อมูลติดต่อ Engage-developers@google.com หากมี คำถามใดๆ ระหว่างขั้นตอนการผสานรวม ทีมของเราจะตอบกลับโดยเร็วที่สุด เท่าที่จะเป็นไปได้
ขั้นตอนถัดไป
หลังจากผสานรวมเสร็จแล้ว ขั้นตอนถัดไปของคุณมีดังนี้
- ส่งอีเมลถึง Engage-developers@google.com และแนบ APK ที่ผสานรวมซึ่งพร้อมสำหรับการทดสอบโดย Google
- Google จะดำเนินการยืนยันและตรวจสอบเป็นการภายใน ทำงานตามที่คาดไว้ หากจำเป็น Google จะติดต่อคุณ พร้อมรายละเอียดที่จำเป็น
- เมื่อการทดสอบเสร็จสิ้นและไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ Google จะติดต่อหาคุณ คุณสามารถเริ่มเผยแพร่ APK ที่อัปเดตและผสานรวมไปยัง Play Store
- หลังจากที่ Google ยืนยันว่า APK ที่อัปเดตแล้วของคุณได้รับการเผยแพร่ไปยัง Play Store, คำแนะนำ, คลัสเตอร์จะได้รับการเผยแพร่และมองเห็นได้ ผู้ใช้