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

Google กำลังสร้างแพลตฟอร์มในอุปกรณ์ที่จัดระเบียบแอปของผู้ใช้ตามประเภทธุรกิจ และสร้างประสบการณ์ที่สมจริงแบบใหม่สำหรับการบริโภคและการค้นพบเนื้อหาของแอปที่ปรับเปลี่ยนในแบบของคุณ ประสบการณ์การใช้งานแบบเต็มหน้าจอนี้เปิดโอกาสให้พาร์ทเนอร์นักพัฒนาซอฟต์แวร์ได้แสดงเนื้อหาสมบูรณ์ที่ดีที่สุดในช่องเฉพาะนอกแอปของตน

คู่มือนี้มีวิธีสำหรับพาร์ทเนอร์นักพัฒนาแอปในการผสานรวมเนื้อหาที่อ่านได้ โดยใช้ Engage SDK เพื่อป้อนข้อมูลทั้งพื้นที่ใหม่นี้และแพลตฟอร์มที่มีอยู่ของ Google

รายละเอียดการผสานรวม

คำศัพท์

การผสานรวมนี้ประกอบด้วยคลัสเตอร์ 3 ประเภท ได้แก่ คําแนะนํา การต่อเรื่อง และแนะนํา

  • คลัสเตอร์คำแนะนำแสดงคำแนะนำที่ปรับเปลี่ยนในแบบของคุณสำหรับเนื้อหาน่าอ่านจากพาร์ทเนอร์นักพัฒนาแอปแต่ละราย

    คําแนะนําของคุณควรมีโครงสร้างดังต่อไปนี้

    • คลัสเตอร์คําแนะนํา: มุมมอง UI ที่มีกลุ่มคําแนะนําจากพาร์ทเนอร์นักพัฒนาแอปรายเดียว

      รูปที่ 1 UI ของ Entertainment Space แสดงกลุ่มคำแนะนำจากพาร์ทเนอร์รายเดียว
    • เอนทิตี: ออบเจ็กต์ที่แสดงถึงรายการเดียวในคลัสเตอร์ เอนทิตีอาจเป็น eBook, หนังสือเสียง, ชุดหนังสือ และอื่นๆ ดูรายการประเภทเอนทิตีที่รองรับได้ในส่วนระบุข้อมูลเอนทิตี

      รูปที่ 2 UI ของ Entertainment Space ที่แสดงเอนทิตีเดียวภายในคลัสเตอร์คําแนะนําของพาร์ทเนอร์รายเดียว
  • กลุ่มการดําเนินการต่อจะแสดงหนังสือที่ยังไม่เสร็จจากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการรวม UI เดียว พาร์ทเนอร์นักพัฒนาซอฟต์แวร์แต่ละรายจะได้รับอนุญาตให้เผยแพร่เอนทิตีในคลัสเตอร์ "ต่อเนื่อง" ได้สูงสุด 10 รายการ

    ภาพที่ 3 UI ของ Entertainment Space แสดงคลัสเตอร์เวอร์ชันต่อเนื่องซึ่งมีคําแนะนําที่ยังทําไม่เสร็จจากพาร์ทเนอร์หลายราย (ตอนนี้มีคำแนะนำเพียงรายการเดียวแสดงอยู่)
  • กลุ่มแนะนำจะแสดงรายการที่คัดสรรจากพาร์ทเนอร์นักพัฒนาแอปหลายรายในการรวมกลุ่ม UI เดียว โดยจะมีคลัสเตอร์แนะนำกลุ่มเดียวที่แสดงอยู่ใกล้กับด้านบนของ UI ด้วยตำแหน่งที่มีลำดับความสำคัญเหนือคลัสเตอร์คำแนะนำทั้งหมด พาร์ทเนอร์นักพัฒนาแอปแต่ละรายจะออกอากาศได้สูงสุด 10 รายการในคลัสเตอร์แนะนํา

    ภาพที่ 4 UI ของ Entertainment Space ที่แสดงคลัสเตอร์แนะนำพร้อมคําแนะนําจากพาร์ทเนอร์หลายราย (ขณะนี้จะแสดงคําแนะนําเพียงรายการเดียว)

งานก่อนเริ่มเวิร์กช็อป

ระดับ 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'
}

สรุป

การออกแบบนี้อิงตามการใช้งาน bound service

ข้อมูลที่ไคลเอ็นต์เผยแพร่ได้จะขึ้นอยู่กับขีดจำกัดต่อไปนี้สำหรับประเภทคลัสเตอร์ต่างๆ

ประเภทคลัสเตอร์ ขีดจํากัดของคลัสเตอร์ ขีดจํากัดสูงสุดของเอนทิตีในคลัสเตอร์
คลัสเตอร์คำแนะนำ ไม่เกิน 5 ไม่เกิน 50
คลัสเตอร์ความต่อเนื่อง มากที่สุด 1 ไม่เกิน 10
คลัสเตอร์แนะนำ ไม่เกิน 1 สูงสุด 10 รายการ

ขั้นตอนที่ 1: ระบุข้อมูลเอนทิตี

SDK ได้กำหนดเอนทิตีที่แตกต่างกันเพื่อแสดงรายการแต่ละประเภท เรารองรับเอนทิตีต่อไปนี้สำหรับหมวดหมู่อ่าน

  1. EbookEntity
  2. AudiobookEntity
  3. BookSeriesEntity

แผนภูมิด้านล่างแสดงแอตทริบิวต์และข้อกําหนดที่ใช้ได้สําหรับแต่ละประเภท

EbookEntity

ออบเจ็กต์ EbookEntity แสดงถึง eBook (เช่น eBook ของ Becoming โดย Michelle Obama)

แอตทริบิวต์ ข้อกำหนด หมายเหตุ
ชื่อ ต้องระบุ
ภาพโปสเตอร์ ต้องระบุ ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
ผู้เขียน ต้องระบุ ต้องระบุชื่อผู้แต่งอย่างน้อย 1 ชื่อ
URI ลิงก์การดำเนินการ ต้องระบุ

Deep Link ที่ไปยังแอปผู้ให้บริการสำหรับ eBook

หมายเหตุ: คุณสามารถใช้ Deep Link สําหรับการระบุแหล่งที่มาได้ โปรดดูคำถามที่พบบ่อยนี้

วันที่เผยแพร่ ไม่บังคับ ในมิลลิวินาทีของยุคสมัย (หากระบุ)
คำอธิบาย ไม่บังคับ ต้องมีความยาวไม่เกิน 200 อักขระ (หากระบุ)
ราคา ไม่บังคับ ข้อความอิสระ
จำนวนหน้า ไม่บังคับ ต้องเป็นจำนวนเต็มบวก หากมี
ประเภท ไม่บังคับ รายการประเภทที่เกี่ยวข้องกับหนังสือ
ชื่อหนังสือชุด ไม่บังคับ ชื่อชุดหนังสือของ eBook (เช่น Harry Potter)
ดัชนีหน่วยของชุดหนังสือ ไม่บังคับ ดัชนีของ eBook ในชุด โดย 1 คือ eBook เล่มแรกในชุด เช่น หากแฮร์รี่ พอตเตอร์กับนักโทษแห่งอัซคาบันเป็นหนังสือเล่มที่ 3 ในชุด คุณควรตั้งค่านี้เป็น 3
ประเภทหนังสือต่อ ไม่บังคับ

TYPE_CONTINUE - กลับมาอ่านหนังสือที่ยังไม่จบ

TYPE_NEXT - ทำต่อในซีรีส์ใหม่

TYPE_NEW - ออกใหม่

เวลาในการมีส่วนร่วมสุดท้าย ต้องระบุแบบมีเงื่อนไข

ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์การต่ออายุ

หนังสืออิเล็กทรอนิกส์ที่ซื้อ *ใหม่* จะเป็นส่วนหนึ่งของคลัสเตอร์การอ่านต่อได้

เป็นมิลลิวินาทีตามยุค

เปอร์เซ็นต์ความคืบหน้าที่เสร็จสมบูรณ์ ต้องระบุแบบมีเงื่อนไข

ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์การต่ออายุ

ค่าต้องมากกว่า 0 และน้อยกว่า 100

DisplayTimeWindow - ตั้งค่ากรอบเวลาสำหรับการแสดงเนื้อหาบนแพลตฟอร์ม
การประทับเวลาเริ่มต้น ไม่บังคับ

การประทับเวลาตามยุคสมัยหลังจากที่เนื้อหาควรแสดงบนแพลตฟอร์ม

หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม

เป็นมิลลิวินาทีตามยุค

การประทับเวลาสิ้นสุด ไม่บังคับ

การประทับเวลา Epoch ที่เนื้อหาไม่แสดงในแพลตฟอร์มอีกต่อไป

หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม

ในหน่วย Epoch ในหน่วยมิลลิวินาที

AudiobookEntity

ออบเจ็กต์ AudiobookEntity แสดงถึงหนังสือเสียง (เช่น หนังสือเสียงBecoming ของ Michelle Obama)

แอตทริบิวต์ ข้อกำหนด หมายเหตุ
ชื่อ ต้องระบุ
ภาพโปสเตอร์ ต้องระบุ ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
ผู้เขียน ต้องระบุ ต้องระบุชื่อผู้แต่งอย่างน้อย 1 ชื่อ
ผู้บรรยาย ต้องระบุ ต้องระบุชื่อผู้บรรยายอย่างน้อย 1 คน
URI ลิงก์การดำเนินการ ต้องระบุ

Deep Link ที่ไปยังแอปผู้ให้บริการสำหรับหนังสือเสียง

หมายเหตุ: คุณใช้ Deep Link เพื่อการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้

วันที่เผยแพร่ ไม่บังคับ ในมิลลิวินาทีของยุคสมัย (หากระบุ)
คำอธิบาย ไม่บังคับ ต้องมีความยาวไม่เกิน 200 อักขระ (หากระบุ)
ราคา ไม่บังคับ ข้อความอิสระ
ระยะเวลา ไม่บังคับ ต้องเป็นค่าบวกหากมี
ประเภท ไม่บังคับ รายการประเภทที่เกี่ยวข้องกับหนังสือ
ชื่อหนังสือชุด ไม่บังคับ ชื่อชุดหนังสือเสียง (เช่น Harry Potter)
ดัชนีหน่วยของชุดหนังสือ ไม่บังคับ ดัชนีของหนังสือเสียงในชุด โดย 1 คือหนังสือเสียงเล่มแรกในชุด เช่น หาก Harry Potter and the Prisoner of Azkaban เป็นเล่มที่ 3 ในซีรีส์ ก็ควรตั้งค่านี้เป็น 3 เล่ม
ประเภทหนังสือต่อ ไม่บังคับ

TYPE_CONTINUE - กลับมาอ่านหนังสือที่ยังไม่จบ

TYPE_NEXT - ทำต่อในซีรีส์ใหม่

TYPE_NEW - ออกใหม่

เวลาในการมีส่วนร่วมสุดท้าย ต้องระบุแบบมีเงื่อนไข

ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์ Continuation

ในหน่วย Epoch ในหน่วยมิลลิวินาที

เปอร์เซ็นต์ความคืบหน้าที่เสร็จสมบูรณ์ ต้องระบุแบบมีเงื่อนไข

ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์ Continuation

หนังสือเสียง *ที่เพิ่งได้มา* อาจเป็นส่วนหนึ่งของคลัสเตอร์การอ่านต่อ

ค่าต้องมากกว่า 0 และน้อยกว่า 100

DisplayTimeWindow - ตั้งค่ากรอบเวลาสำหรับการแสดงเนื้อหาบนแพลตฟอร์ม
การประทับเวลาเริ่มต้น ไม่บังคับ

การประทับเวลาตามยุคสมัยหลังจากที่เนื้อหาควรแสดงบนแพลตฟอร์ม

หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม

เป็นมิลลิวินาทีตามยุค

การประทับเวลาสิ้นสุด ไม่บังคับ

การประทับเวลา Epoch ที่เนื้อหาไม่แสดงในแพลตฟอร์มอีกต่อไป

หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม

เป็นมิลลิวินาทีตามยุค

BookSeriesEntity

ออบเจ็กต์ BookSeriesEntity แสดงชุดหนังสือ (เช่น ชุดหนังสือแฮร์รี่ พอตเตอร์ ซึ่งมีหนังสือ 7 เล่ม)

แอตทริบิวต์ ข้อกำหนด หมายเหตุ
ชื่อ ต้องระบุ
ภาพโปสเตอร์ ต้องระบุ ต้องระบุรูปภาพอย่างน้อย 1 รูป ดูคำแนะนำได้ที่ข้อกำหนดเกี่ยวกับรูปภาพ
ผู้เขียน ต้องระบุ ต้องมีชื่อผู้แต่งอย่างน้อยหนึ่งชื่อ
URI ลิงก์การดำเนินการ ต้องระบุ

Deep Link ไปยังแอปผู้ให้บริการสําหรับหนังสือเสียงหรือ eBook

หมายเหตุ: คุณใช้ Deep Link เพื่อการระบุแหล่งที่มาได้ ดูคำถามที่พบบ่อยนี้

จำนวนหนังสือ ต้องระบุ จำนวนหนังสือในชุด
คำอธิบาย ไม่บังคับ ต้องมีความยาวไม่เกิน 200 อักขระ (หากระบุ)
ประเภท ไม่บังคับ รายการประเภทที่เชื่อมโยงกับหนังสือ
ประเภทสมุดภาพต่อเนื่อง ไม่บังคับ

TYPE_CONTINUE - กลับมาอ่านหนังสือที่ยังไม่จบ

TYPE_NEXT - ทำต่อในซีรีส์ใหม่

TYPE_NEW - ออกใหม่

เวลาในการมีส่วนร่วมสุดท้าย ต้องระบุแบบมีเงื่อนไข

ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์ Continuation

ในหน่วย Epoch ในหน่วยมิลลิวินาที

เปอร์เซ็นต์ความคืบหน้าที่เสร็จสมบูรณ์ ต้องระบุแบบมีเงื่อนไข

ต้องระบุเมื่อรายการอยู่ในคลัสเตอร์ Continuation

ชุดหนังสือที่ซื้อ *ใหม่* สามารถเป็นส่วนหนึ่งของคลัสเตอร์การอ่านต่อ

ค่าต้องมากกว่า 0 และน้อยกว่า 100

DisplayTimeWindow - ตั้งค่ากรอบเวลาสำหรับการแสดงเนื้อหาบนแพลตฟอร์ม
การประทับเวลาเริ่มต้น ไม่บังคับ

การประทับเวลาตามยุคสมัยหลังจากที่เนื้อหาควรแสดงบนแพลตฟอร์ม

หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม

เป็นมิลลิวินาทีตามยุค

การประทับเวลาสิ้นสุด ไม่บังคับ

การประทับเวลา Epoch ที่เนื้อหาไม่แสดงในแพลตฟอร์มอีกต่อไป

หากไม่ได้ตั้งค่าไว้ เนื้อหาจะมีสิทธิ์แสดงบนแพลตฟอร์ม

ในหน่วย Epoch ในหน่วยมิลลิวินาที

ข้อกำหนดเกี่ยวกับรูปภาพ

ข้อกำหนดที่จำเป็นสำหรับชิ้นงานรูปภาพมีดังนี้

สัดส่วนภาพ ข้อกำหนด พิกเซลขั้นต่ำ พิกเซลแนะนํา
สี่เหลี่ยมจัตุรัส (1x1) ต้องระบุ 300x300 1200x1200
แนวนอน (1.91x1) ไม่บังคับ 600x314 1200x628
แนวตั้ง (4x5) ไม่บังคับ 480x600 960x1200

รูปแบบไฟล์

PNG, JPG, GIF แบบภาพนิ่ง, WebP

ขนาดไฟล์สูงสุด

5120 KB

คําแนะนําเพิ่มเติม

  • พื้นที่ปลอดภัยของรูปภาพ: ใส่เนื้อหาสําคัญไว้ตรงกลาง ซึ่งก็คือ 80% ของรูปภาพนั้น

ตัวอย่าง

AudiobookEntity audiobookEntity =
        new AudiobookEntity.Builder()
            .setName("Becoming")
            .addPosterImage(
                      new Image.Builder()
                          .setImageUri(Uri.parse("http://www.x.com/image.png"))
                          .setImageHeightInPixel(960)
                          .setImageWidthInPixel(408)
                          .build())
            .addAuthor("Michelle Obama")
            .addNarrator("Michelle Obama")
            .setActionLinkUri(Uri.parse("https://play.google/audiobooks/1"))
            .setDurationMillis(16335L)
            .setPublishDateEpochMillis(1633032895L)
            .setDescription("An intimate, powerful, and inspiring memoir")
            .setPrice("$16.95")
            .addGenre("biography")
            .build();

ขั้นตอนที่ 2: ระบุข้อมูลคลัสเตอร์

เราขอแนะนำให้เรียกใช้งานเผยแพร่เนื้อหาในเบื้องหลัง (เช่น ใช้ WorkManager) และกำหนดเวลาเป็นประจำหรือตามเหตุการณ์ (เช่น ทุกครั้งที่ผู้ใช้เปิดแอปหรือเมื่อผู้ใช้เพิ่งเพิ่มสินค้าลงในรถเข็น)

AppEngagePublishClient มีหน้าที่รับผิดชอบในการเผยแพร่คลัสเตอร์ API ต่อไปนี้มีอยู่ในไคลเอ็นต์

  • isServiceAvailable
  • publishRecommendationClusters
  • publishFeaturedCluster
  • publishContinuationCluster
  • publishUserAccountManagementRequest
  • updatePublishStatus
  • deleteRecommendationsClusters
  • deleteFeaturedCluster
  • deleteContinuationCluster
  • 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

Kotlin


client.publishRecommendationClusters(
            PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Reconnect with yourself")
                        .build())
                .build())

Java


client.publishRecommendationClusters(
            new PublishRecommendationClustersRequest.Builder()
                .addRecommendationCluster(
                    new RecommendationCluster.Builder()
                        .addEntity(entity1)
                        .addEntity(entity2)
                        .setTitle("Reconnect with yourself")
                        .build())
                .build());

เมื่อบริการได้รับคำขอ การดำเนินการต่อไปนี้จะเกิดขึ้นในธุรกรรมเดียว

  • ระบบจะนำข้อมูล RecommendationCluster ที่มีอยู่ออกจากพาร์ทเนอร์นักพัฒนาแอป
  • ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคําขอไว้ในคลัสเตอร์คําแนะนําที่อัปเดตแล้ว

ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้

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 ที่มีอยู่ออกจากพาร์ทเนอร์นักพัฒนาแอป
  • ระบบจะแยกวิเคราะห์และจัดเก็บข้อมูลจากคำขอไว้ในคลัสเตอร์แนะนําที่อัปเดตแล้ว

ในกรณีที่เกิดข้อผิดพลาด คำขอทั้งหมดจะถูกปฏิเสธและระบบจะคงสถานะที่มีอยู่ไว้

publishContinuationCluster

API นี้ใช้เพื่อเผยแพร่ออบเจ็กต์ ContinuationCluster

Kotlin


client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(book_entity1)
                        .addEntity(book_entity2)
                        .build())
                .build())

Java


client.publishContinuationCluster(
            PublishContinuationClusterRequest.Builder()
                .setContinuationCluster(
                    ContinuationCluster.Builder()
                        .addEntity(book_entity1)
                        .addEntity(book_entity2)
                        .build())
                .build())

เมื่อบริการได้รับคําขอแล้ว ระบบจะดําเนินการต่อไปนี้ภายในธุรกรรมเดียว

  • ระบบจะนำข้อมูล ContinuationCluster ที่มีอยู่จากพาร์ทเนอร์นักพัฒนาแอปออก
  • ข้อมูลจากคำขอจะได้รับการแยกวิเคราะห์และจัดเก็บไว้ในคลัสเตอร์ Continuation ที่มีการอัปเดต

ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้

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 == 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();

เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์แนะนํา ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้

deleteContinuationCluster

API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์การต่อเรื่อง

Kotlin


client.deleteContinuationCluster()

Java


client.deleteContinuationCluster();

เมื่อบริการได้รับคำขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ความต่อเนื่อง ในกรณีที่มีข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้

deleteUserManagementCluster

API นี้ใช้เพื่อลบเนื้อหาของคลัสเตอร์ UserAccountManagement

Kotlin


client.deleteUserManagementCluster()

Java


client.deleteUserManagementCluster();

เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์การจัดการบัญชีผู้ใช้ ในกรณีที่เกิดข้อผิดพลาด ระบบจะปฏิเสธคำขอทั้งหมดและคงสถานะที่มีอยู่ไว้

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());

เมื่อบริการได้รับคําขอ ระบบจะนำข้อมูลที่มีอยู่ออกจากคลัสเตอร์ทั้งหมดที่ตรงกับประเภทคลัสเตอร์ที่ระบุ ไคลเอ็นต์เลือกที่จะส่งคลัสเตอร์อย่างน้อย 1 ประเภทได้ ในกรณีที่เกิดข้อผิดพลาด คำขอทั้งหมดจะถูกปฏิเสธและคงสถานะที่มีอยู่ไว้

การจัดการข้อผิดพลาด

ขอแนะนำเป็นอย่างยิ่งให้ฟังผลลัพธ์ของงานจาก 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 เพื่อรับคําขอเผยแพร่เนื้อหาด้วย

เป้าหมายของ Intent แบบออกอากาศมีไว้สำหรับการเปิดใช้งานแอปอีกครั้งและการบังคับให้ซิงค์ข้อมูลเป็นหลัก Intent แบบออกอากาศไม่ได้ออกแบบมาเพื่อส่งบ่อยครั้ง และทริกเกอร์ก็ต่อเมื่อบริการ Engage ระบุว่าเนื้อหาอาจไม่มีอัปเดต (เช่น มีอายุ 1 สัปดาห์) วิธีนี้จะทำให้มั่นใจได้มากขึ้นว่าผู้ใช้จะมีประสบการณ์การรับชมเนื้อหาที่สดใหม่ แม้ว่าจะไม่มีการเรียกใช้แอปพลิเคชันดังกล่าวเป็นเวลานานก็ตาม

BroadcastReceiver ต้องตั้งค่าด้วย 2 วิธีต่อไปนี้

  • ลงทะเบียนอินสแตนซ์ของคลาส BroadcastReceiver แบบไดนามิกโดยใช้ Context.registerReceiver() ซึ่งทำให้สามารถสื่อสารกันได้จาก แอปพลิเคชันที่ยังอยู่ในหน่วยความจำ
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 continuation cluster publish when PUBLISH_CONTINUATION 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));

// Register Featured Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_FEATURED));

// Register Continuation Cluster Publish Intent
context.registerReceiver(new AppEngageBroadcastReceiver(),
new IntentFilter(com.google.android.engage.service.Intents.ACTION_PUBLISH_CONTINUATION));

}
  • ประกาศการติดตั้งใช้งานกับแท็ก <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>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_FEATURED" />
      </intent-filter>
      <intent-filter>
         <action android:name="com.google.android.engage.action.PUBLISH_CONTINUATION" />
      </intent-filter>
   </receiver>
</application>

บริการจะส่งความตั้งใจต่อไปนี้

  • com.google.android.engage.action.PUBLISH_RECOMMENDATION ขอแนะนำให้เริ่มการโทร publishRecommendationClusters เมื่อได้รับ Intent นี้
  • com.google.android.engage.action.PUBLISH_FEATURED เราขอแนะนำให้เริ่มการโทร publishFeaturedCluster เมื่อได้รับ Intent นี้
  • com.google.android.engage.action.PUBLISH_CONTINUATIONIt is recommended to start apublishContinuationCluster" เมื่อได้รับ Intent นี้

เวิร์กโฟลว์การผสานรวม

ดูคำแนะนำทีละขั้นตอนเกี่ยวกับการยืนยันการผสานรวมหลังจากที่เสร็จสมบูรณ์แล้วได้ที่มีส่วนร่วมกับเวิร์กโฟลว์การผสานรวมของนักพัฒนาซอฟต์แวร์

คำถามที่พบบ่อย

ดูคำถามที่พบบ่อยได้ที่คำถามที่พบบ่อยเกี่ยวกับ Engage SDK

รายชื่อติดต่อ

โปรดติดต่อ Engage-developers@google.com หากคุณมีคำถามระหว่างขั้นตอนการผสานรวม ทีมงานของเราจะตอบกลับ โดยเร็วที่สุด

ขั้นตอนถัดไป

หลังจากการผสานรวมนี้เสร็จสมบูรณ์แล้ว ขั้นตอนถัดไปมีดังนี้

  • ส่งอีเมลไปที่ Engage-developers@google.com และแนบ APK ที่ผสานรวมซึ่งพร้อมสำหรับการทดสอบโดย Google
  • Google จะทำการตรวจสอบและตรวจสอบเป็นการภายในเพื่อให้แน่ใจว่าการผสานรวมทำงานได้ตามที่คาดไว้ หากจำเป็นต้องทำการเปลี่ยนแปลง Google จะติดต่อคุณพร้อมรายละเอียดที่จำเป็น
  • เมื่อการทดสอบเสร็จสิ้นและไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ Google จะติดต่อคุณเพื่อแจ้งให้คุณทราบว่าคุณสามารถเริ่มเผยแพร่ APK ที่อัปเดตและผสานรวมไปยัง Play Store ได้
  • หลังจาก Google ยืนยันว่าได้เผยแพร่ APK ที่อัปเดตแล้วไปยัง Play Store แล้ว ระบบจะเผยแพร่คลัสเตอร์คำแนะนำ แนะนํา และการต่อเรื่องให้ผู้ใช้เห็น