Google กำลังสร้างแพลตฟอร์มในอุปกรณ์ที่จัดระเบียบแอปของผู้ใช้ตามประเภทธุรกิจ และสร้างประสบการณ์ที่สมจริงแบบใหม่สำหรับการบริโภคและการค้นพบเนื้อหาของแอปที่ปรับเปลี่ยนในแบบของคุณ ประสบการณ์การใช้งานแบบเต็มหน้าจอนี้ให้โอกาสพาร์ทเนอร์นักพัฒนาซอฟต์แวร์ในการแสดงเนื้อหาแบบสมบูรณ์ที่ดีที่สุดในช่องเฉพาะนอกแอปของตน
เอกสารนี้มีคำแนะนำสำหรับพาร์ทเนอร์นักพัฒนาซอฟต์แวร์ในการผสานรวมเนื้อหาโซเชียลของตนโดยใช้ Engage SDK เพื่อเติมข้อมูลพื้นที่ใหม่นี้
รายละเอียดการผสานรวม
ส่วนต่อไปนี้จะแสดงรายละเอียดการผสานรวม
คำศัพท์
กลุ่มคําแนะนําจะแสดงคําแนะนําที่ปรับเปลี่ยนในแบบของคุณจากพาร์ทเนอร์นักพัฒนาแอปรายบุคคล
คำแนะนำของคุณควรมีโครงสร้างดังต่อไปนี้
คลัสเตอร์คําแนะนํา: มุมมอง UI ที่มีกลุ่มคําแนะนําจากพาร์ทเนอร์นักพัฒนาแอปรายเดียวกัน
คลัสเตอร์คำแนะนำแต่ละรายการประกอบด้วยเอนทิตี 1 ใน 2 ประเภทต่อไปนี้
- PortraitMediaEntity
- SocialPostEntity
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'
}
สรุป
การออกแบบนี้อิงตามการใช้งานบริการที่มีผลผูกพัน
ข้อมูลที่จะเผยแพร่ได้จะขึ้นอยู่กับขีดจํากัดต่อไปนี้สําหรับคลัสเตอร์ประเภทต่างๆ
ประเภทคลัสเตอร์ | ขีดจํากัดของคลัสเตอร์ | ขีดจำกัดเอนทิตีขั้นต่ำในคลัสเตอร์ | ขีดจำกัดเอนทิตีสูงสุดในคลัสเตอร์ |
---|---|---|---|
กลุ่มคําแนะนํา | ไม่เกิน 5 | อย่างน้อย 5 (PortraitMediaEntity หรือ
SocialPostEntity ) |
สูงสุด 25 (PortraitMediaEntity หรือ SocialPostEntity ) |
ขั้นตอนที่ 1: ระบุข้อมูลเอนทิตี
SDK ได้กําหนดเอนทิตีต่างๆ เพื่อแสดงรายการแต่ละประเภท SDK รองรับเอนทิตีต่อไปนี้สําหรับหมวดหมู่โซเชียล
PortraitMediaEntity
SocialPostEntity
แผนภูมิด้านล่างแสดงแอตทริบิวต์และข้อกําหนดที่ใช้ได้สําหรับแต่ละประเภท
PortraitMediaEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI ของการดำเนินการ | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link เพื่อการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้ |
URI |
ข้อมูลเมตาที่เกี่ยวข้องกับโพสต์ (ต้องระบุ) | |||
รูปภาพ | ต้องระบุ |
รูปภาพควรอยู่ในสัดส่วนภาพแนวตั้ง UI อาจแสดงเพียง 1 ภาพหากมีหลายภาพ อย่างไรก็ตาม UI อาจมีภาพบ่งชี้ว่ามีรูปภาพอื่นๆ ในแอปอีก หากโพสต์เป็นวิดีโอ ผู้ให้บริการควรระบุภาพปกของวิดีโอที่จะแสดงเป็นภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
ชิ้นงานข้อความ | ไม่บังคับ | ข้อความหลักของโพสต์ ข้อมูลอัปเดต ฯลฯ | สตริง (แนะนำให้ใช้ไม่เกิน 140 อักขระ) |
การประทับเวลา | ไม่บังคับ | เวลาเผยแพร่โพสต์ | การประทับเวลา Epoch ในหน่วยมิลลิวินาที |
เป็นเนื้อหาวิดีโอ | ไม่บังคับ | โพสต์เป็นวิดีโอไหม | บูลีน |
ระยะเวลาของวิดีโอ | ไม่บังคับ | ระยะเวลาของวิดีโอเป็นมิลลิวินาที | ยาว |
ข้อมูลเมตาที่เกี่ยวข้องกับโปรไฟล์ (ไม่บังคับ) | |||
ชื่อ | ต้องระบุ | ชื่อหรือรหัสหรือแฮนเดิลของโปรไฟล์ เช่น "John Doe", "@TeamPixel" | สตริง (แนะนำไม่เกิน 25 อักขระ) |
รูปโปรไฟล์ | ต้องระบุ |
รูปโปรไฟล์หรือรูปโปรไฟล์ของผู้ใช้ รูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
รูปภาพเพิ่มเติม | ไม่บังคับ |
ป้ายโปรไฟล์ เช่น ป้ายยืนยันแล้ว รูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
ข้อมูลเมตาที่เกี่ยวข้องกับการโต้ตอบ (ไม่บังคับ) | |||
จำนวน | ไม่บังคับ |
ระบุจํานวนการโต้ตอบ เช่น "3.7 ล้านครั้ง" หมายเหตุ: หากมีทั้งค่าการนับและค่าการนับ ระบบจะใช้จำนวน |
สตริง ขนาดข้อความที่แนะนำ: อักขระสูงสุด 20 ตัวสำหรับจำนวน + ป้ายกำกับรวมกัน |
ค่าการนับ | ไม่บังคับ | จํานวนการโต้ตอบเป็นค่า หมายเหตุ: ระบุค่าจํานวนแทนจํานวน หากแอปของคุณไม่จัดการตรรกะเกี่ยวกับวิธีเพิ่มประสิทธิภาพจํานวนขนาดใหญ่สําหรับขนาดการแสดงผลที่แตกต่างกัน หากระบุทั้งจํานวน และค่าจํานวน ระบบจะใช้จํานวน |
ยาว |
ป้ายกำกับ | ไม่บังคับ | ระบุวัตถุประสงค์ของป้ายกำกับการโต้ตอบ เช่น "ชอบ" | สตริง ขนาดข้อความที่แนะนำ: สูงสุด 20 อักขระสำหรับจำนวนและป้ายกำกับรวมกัน |
ภาพ | ไม่บังคับ |
ระบุวัตถุประสงค์ของการโต้ตอบ เช่น รูปภาพแสดงไอคอนชอบ อีโมจิ ใส่รูปภาพได้มากกว่า 1 รูป แต่อาจไม่แสดงในอุปกรณ์ทุกรูปแบบ หมายเหตุ: ต้องเป็นรูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
DisplayTimeWindow (ไม่บังคับ) - ตั้งค่ากรอบเวลาสำหรับเนื้อหาที่จะแสดงบนแพลตฟอร์ม | |||
การประทับเวลาเริ่มต้น | ไม่บังคับ |
การประทับเวลา Epoch ที่ต้องการให้เนื้อหาแสดงบนแพลตฟอร์ม หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม |
การประทับเวลา Epoch เป็นมิลลิวินาที |
การประทับเวลาสิ้นสุด | ไม่บังคับ |
การประทับเวลาตามยุคหลังจากนั้นเนื้อหาจะไม่แสดงในแพลตฟอร์มอีกต่อไป หากไม่ได้ตั้งค่า เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม |
การประทับเวลา Epoch เป็นมิลลิวินาที |
SocialPostEntity
แอตทริบิวต์ | ข้อกำหนด | คำอธิบาย | รูปแบบ |
---|---|---|---|
URI ของการดำเนินการ | ต้องระบุ |
Deep Link ไปยังเอนทิตีในแอปของผู้ให้บริการ หมายเหตุ: คุณใช้ Deep Link เพื่อการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้ |
URI |
ข้อมูลเมตาที่เกี่ยวข้องกับโพสต์ (ต้องระบุ) ต้องระบุ TextContent, Image หรือ WebContent อย่างน้อย 1 รายการ |
|||
รูปภาพ | ไม่บังคับ |
รูปภาพควรอยู่ในสัดส่วนภาพแนวตั้ง UI อาจแสดงเพียง 1 ภาพหากมีหลายภาพ อย่างไรก็ตาม UI อาจมีภาพบ่งชี้ว่ามีรูปภาพอื่นๆ ในแอปอีก หากโพสต์เป็นวิดีโอ ผู้ให้บริการควรระบุภาพปกของวิดีโอที่จะแสดงเป็นภาพ |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
ชิ้นงานข้อความ | ไม่บังคับ | ข้อความหลักของโพสต์ ข้อมูลอัปเดต ฯลฯ | สตริง (สูงสุด 140 อักขระที่แนะนำ) |
เนื้อหาวิดีโอ (ไม่บังคับ) | |||
ระยะเวลา | ต้องระบุ | ระยะเวลาของวิดีโอเป็นมิลลิวินาที | ยาว |
รูปภาพ | ต้องระบุ | แสดงตัวอย่างรูปภาพของเนื้อหาวิดีโอ | โปรดดูข้อกำหนดเกี่ยวกับรูปภาพสำหรับคำแนะนำ |
ตัวอย่างลิงก์ (ไม่บังคับ) | |||
ตัวอย่างลิงก์ - ชื่อ | ต้องระบุ | ข้อความที่ระบุชื่อเนื้อหาของหน้าเว็บ | สตริง |
แสดงตัวอย่างลิงก์ - ชื่อโฮสต์ | ต้องระบุ | ข้อความเพื่อระบุเจ้าของหน้าเว็บ เช่น "INSIDER" | สตริง |
ตัวอย่างลิงก์ - รูปภาพ | ไม่บังคับ | รูปภาพหลักสำหรับเนื้อหาเว็บ | ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
การประทับเวลา | ไม่บังคับ | เวลาเผยแพร่โพสต์ | การประทับเวลา Epoch เป็นมิลลิวินาที |
ข้อมูลเมตาที่เกี่ยวข้องกับโปรไฟล์ (ไม่บังคับ) | |||
ชื่อ | ต้องระบุ | ชื่อหรือรหัสหรือแฮนเดิลของโปรไฟล์ เช่น "John Doe", "@TeamPixel" | สตริง (แนะนำไม่เกิน 25 อักขระ) |
ข้อความเพิ่มเติม | ไม่บังคับ |
สามารถใช้เป็นรหัสโปรไฟล์หรือแฮนเดิล หรือข้อมูลเมตาเพิ่มเติม เช่น "@John-Doe", "ผู้ติดตาม 5 ล้านคน", "คุณอาจชอบ", "มาแรง", "5 โพสต์ใหม่" |
สตริง(แนะนำไม่เกิน 40 อักขระ) |
รูปโปรไฟล์ | ต้องระบุ |
รูปโปรไฟล์หรือรูปโปรไฟล์ของผู้ใช้ รูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
รูปภาพเพิ่มเติม | ไม่บังคับ |
ป้ายโปรไฟล์ เช่น ป้ายยืนยันแล้ว รูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
ข้อมูลเมตาที่เกี่ยวข้องกับการโต้ตอบ (ไม่บังคับ) | |||
จำนวน | ต้องระบุ | ระบุจํานวนการโต้ตอบ เช่น "3.7 ล้านครั้ง" | สตริง (แนะนำไม่เกิน 20 อักขระสำหรับจำนวน + ป้ายกำกับรวมกัน) |
ป้ายกำกับ |
ไม่บังคับ หากไม่ได้ตั้งค่า ต้องระบุภาพ |
ระบุวัตถุประสงค์ของการโต้ตอบ เช่น "ชอบ" | สตริง (แนะนำไม่เกิน 20 อักขระสำหรับจำนวน + ป้ายกำกับรวมกัน) |
ภาพ |
ไม่บังคับ หากไม่ได้ระบุ คุณต้องระบุป้ายกำกับ |
ระบุว่าการโต้ตอบนี้มีไว้เพื่ออะไร เช่น รูปภาพแสดงไอคอนชอบ อีโมจิ ระบุรูปภาพได้มากกว่า 1 รูป แต่รูปภาพบางรูปอาจไม่แสดงในอุปกรณ์บางรูปแบบ รูปภาพสี่เหลี่ยมจัตุรัส 1:1 |
ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ |
DisplayTimeWindow (ไม่บังคับ) - ตั้งค่ากรอบเวลาสำหรับเนื้อหาที่จะแสดงบนแพลตฟอร์ม | |||
การประทับเวลาเริ่มต้น | ไม่บังคับ |
การประทับเวลา 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 ไปยังการดําเนินการ (เช่น ไปยังหน้าลงชื่อเข้าใช้แอป) |
รูปภาพ | ไม่บังคับ - หากไม่ระบุ จะต้องระบุชื่อ |
รูปภาพที่แสดงในการ์ด รูปภาพสัดส่วนภาพ 16:9 ที่มีความละเอียด 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
โดยระบุสาเหตุเป็นรหัสข้อผิดพลาด
รหัสข้อผิดพลาด | ชื่อข้อผิดพลาด | หมายเหตุ |
---|---|---|
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 ของข้อความประกาศ
นอกจากการเรียกใช้ Content API ผ่านงานแล้ว คุณยังต้องตั้งค่า BroadcastReceiver
เพื่อรับคำขอการเผยแพร่เนื้อหาด้วย
เป้าหมายของ Intent แบบออกอากาศมีไว้สำหรับการเปิดใช้งานแอปอีกครั้งและการบังคับให้ซิงค์ข้อมูลเป็นหลัก Intent แบบออกอากาศไม่ได้ออกแบบมาเพื่อส่งบ่อยครั้ง ระบบจะทริกเกอร์เฉพาะเมื่อบริการ 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>
บริการจะส่ง Intent ต่อไปนี้
com.google.android.engage.action.PUBLISH_RECOMMENDATION
ขอแนะนำให้เริ่มการโทรpublishRecommendationClusters
เมื่อได้รับ Intent นี้
เวิร์กโฟลว์การผสานรวม
ดูคู่มือทีละขั้นตอนเกี่ยวกับการยืนยันการผสานรวมหลังจากดำเนินการเสร็จแล้วได้ที่หัวข้อเวิร์กโฟลว์การผสานรวมของนักพัฒนาแอป
คำถามที่พบบ่อย
ดูคำถามที่พบบ่อยได้ที่คำถามที่พบบ่อยเกี่ยวกับ Engage SDK
รายชื่อติดต่อ
โปรดติดต่อ engage-developers@google.com หากมีคำถามระหว่างกระบวนการผสานรวม ทีมของเราจะตอบกลับโดยเร็วที่สุด
ขั้นตอนถัดไป
หลังจากการผสานรวมนี้เสร็จสมบูรณ์แล้ว ขั้นตอนถัดไปมีดังนี้
- ส่งอีเมลไปที่ Engage-developers@google.com และแนบ APK ที่ผสานรวมซึ่งพร้อมสำหรับการทดสอบโดย Google
- Google จะทำการตรวจสอบและตรวจสอบเป็นการภายในเพื่อให้แน่ใจว่าการผสานรวมทำงานได้ตามที่คาดไว้ หากจำเป็นต้องทำการเปลี่ยนแปลง Google จะติดต่อคุณพร้อมรายละเอียดที่จำเป็น
- เมื่อการทดสอบเสร็จสมบูรณ์และไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ แล้ว Google จะติดต่อคุณเพื่อแจ้งให้ทราบว่าคุณสามารถเริ่มเผยแพร่ APK ที่อัปเดตและผสานรวมแล้วไปยัง Play Store
- หลังจากที่ Google ยืนยันว่า APK ที่อัปเดตแล้วของคุณเผยแพร่ไปยัง Play Store แล้ว คำแนะนำของคุณ คลัสเตอร์จะได้รับการเผยแพร่และแสดงต่อผู้ใช้