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

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

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