Engage SDK Social: คำแนะนำการผสานรวมทางเทคนิคของบุคคลที่สาม

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 รองรับเอนทิตีต่อไปนี้สําหรับหมวดหมู่โซเชียล

  1. PortraitMediaEntity
  2. 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 แล้ว คำแนะนำของคุณ คลัสเตอร์จะได้รับการเผยแพร่และแสดงต่อผู้ใช้