ข้ามไปที่เนื้อหา

การมีส่วนร่วมของผู้ใช้ (UE, ลิงก์ลึก)

การมีส่วนร่วมของผู้ใช้ (UE) มีฟังก์ชัน Deep Link พร้อมคูปอง ซึ่งช่วยให้เชิญผู้เล่นเกมไปยังสถานที่หรือหน้ากิจกรรมเฉพาะในเกมด้วยการแตะที่ลิงก์เพียงครั้งเดียว หรือเพื่อรับรางวัลโดยตรง

ใน Hive SDK การกระทำที่คุณต้องการทำผ่าน URL สคีมเรียกว่าการกระทำการมีส่วนร่วมของผู้ใช้ เมื่อเกมดำเนินการตามการกระทำที่ระบุใน URL ที่กำหนด Hive จะส่งคำขอไปยังเกมในรูปแบบของเหตุการณ์การมีส่วนร่วมของผู้ใช้

การมีส่วนร่วมของผู้ใช้คืออะไร?

UE เป็นบริการที่ทำการร้องขอจากภายในและภายนอกของแอปพลิเคชัน และทำหน้าที่ดังต่อไปนี้:

  • ดำเนินการ URL แผนจากภายนอกแอปผ่านลิงก์ลึกหรือการแจ้งเตือนแบบพุช
  • ดำเนินการ URL แผนจากภายในแอปผ่านการทำงานร่วมกัน
  • ด้วย Hive SDK v4.4.0 และเวอร์ชันที่ใหม่กว่า,
    • ส่งประวัติการเข้าถึงไปยังแอปเกมผ่านเส้นทางภายนอก เช่น รหัส QR และลิงก์ที่สร้างโดยการจัดหาผู้ใช้เพื่อขอรับรางวัล
    • ส่งประวัติการเข้าถึงไปยังแอปเกมผ่าน offerwall หรือฟังก์ชันอื่น ๆ ของ Hive SDK เพื่อขอรับรางวัล (คำขอสำหรับรางวัล CPI)
    • ตรวจสอบให้แน่ใจว่า Game Client ใช้ API setEngagementReady และส่งคำขอเมื่อโมดูล Hive SDK พร้อมใช้งานเพื่อดำเนินการฟังก์ชันของ UE ในการประมวลผลรางวัล CPI และอื่น ๆ

วิธีการระบุ URL ของสกีม

Scheme URL เป็นรูปแบบในการแสดงการกระทำของ UE มันบ่งบอกว่าการกระทำใดถูกกำหนดใน Scheme URL และมีการนำไปใช้กับใคร Scheme URL ที่ใช้ใน Hive จะปฏิบัติตามรูปแบบมาตรฐานที่เรียกว่า Uniform Resource Identifier (URI) และประกอบด้วยฟิลด์บริการและฟิลด์ทั่วไป

  • รูปแบบมาตรฐาน: {scheme}://{host}/{path}?{query}
  • รูปแบบ Hive: {scheme}://{host}/{api}?{parameters}
  • ฟิลด์บริการ: {scheme}://{host} | ฟิลด์ทั่วไป: /{api}?{parameters}
Note

Hive format หมายถึงเหตุการณ์ที่ประมวลผลบน Hive SDK และรวมถึง {api} ที่กำหนดไว้ตามที่แสดงในส่วน Common Field ด้วยเหตุนี้ ฟิลด์ทั่วไปของ Hive format จะประกอบด้วย /{api}?{parameters} แทนที่จะเป็น /{path}?{query} ของฟอร์แมตมาตรฐาน สำหรับรายการของ {api} ที่รวมอยู่ใน Hive format โปรดดูที่ Common Field.

การใช้ URL โครงการในเกม

นอกเหนือจากการใช้ UE สำหรับการเชื่อมโยงลึกของคูปอง หากคุณต้องการย้ายไปยังสถานที่เฉพาะในเกม (เช่น ดันเจี้ยน กล่องของขวัญ ร้านค้า ฯลฯ) เพื่อวัตถุประสงค์ในการส่งเสริมการขายของคุณ ให้แน่ใจว่ากำหนดเส้นทางในเกมและให้ URL ของ Scheme URL URL นี้จะถูกแปลงเป็น URL ที่ลงจอดบน Hive Console และจากนั้นส่งไปยังผู้ใช้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ Scheme URL ในเกม โปรดดูที่ หากโฮสต์ของ Scheme URL คือเกม.

ฟิลด์บริการ

ฟิลด์บริการของ Scheme URL คือ {scheme}://{host} ซึ่งระบุเส้นทางที่ลิงก์ลึกถูกส่งไปยัง SDK ของ Hive และประกอบด้วย scheme และ host.

แผน

มีสามเส้นทางที่ URL ถูกส่งไปยังแอป:

Push

ไม่ว่าคุณจะเปิดแอปเกมที่ถูกกำหนดโดย URL ของ Scheme หรือไม่ ผู้รับ URL จะได้รับข้อความพุชที่มี URL ของ Scheme เมื่อผู้รับแตะที่ข้อความ URL ของ Scheme จะถูกส่งไปยัง Hive Client และจากนั้น Hive Client จะประมวลผล URL

  • เช่น push://{host}/{path}?{query}
Deep Link

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

  • ตัวอย่างเช่น com.com2us.example://{host}/{path}?{query}

ผู้ใช้ที่ติดตามจะแตกต่างกันไปขึ้นอยู่กับสถานะของการติดตั้งเกมเมื่อใช้โครงการลิงก์ลึก

1. <b>ถ้าเกมถูกติดตั้งแล้ว</b>
เมื่อแตะที่ลิงก์ลึก ผู้ใช้จะตรวจสอบเคล็ดลับเกมก่อน และย้ายไปที่เกม
![](https://developers.withhive.com/wp-content/uploads/2024/05/deep_link_installed_240517.png){width="700px"}
2. <b>ถ้าเกมไม่ได้ติดตั้ง</b>
เมื่อผู้ใช้แตะที่ลิงก์ในข้อความ จะมีการแจ้งเตือนว่ารางวัลมีให้หลังจากติดตั้งเกม เนื่องจากเกมไม่ได้ติดตั้ง จะถูกย้ายไปที่ตลาดดาวน์โหลด (Google Play Store / Apple App Store)
![](http://developers.withhive.com/wp-content/uploads/2018/04/23_develop-promotion_userengagement_3_en.png){width="700px"}
Interwork

หากผู้ใช้แตะที่ลิงก์ URL ที่เฉพาะเจาะจงของหน้าส่งเสริมการขาย (แบนเนอร์, ข้อความแจ้งเตือน, ฯลฯ) ของ Hive SDK ขณะที่แอปกำลังทำงานอยู่ และฟิลด์สคีมของ URL นั้นเป็น "interwork" URL จะถูกส่งไปยัง Hive SDK.

+ เช่น <i>interwork://{host}/{path}?{query}</i>

คุณสามารถเรียกคำขอสำหรับการประมวลผลแผนการเชื่อมต่อโดยใช้ <b>processURI</b> API เพื่อส่ง URL จากเกมไปยัง Hive SDK โดยตรง

=== "ยูนิตี้"

    ```cs
    String uri = "";


    Boolean result = Promotion.processURI(uri);

    if(result) {
            // การลงทะเบียนเหตุการณ์ UE สำเร็จ
    } else {
            // รูปแบบไม่เหมาะสมสำหรับ Scheme URI
    }
    ```

=== "C++"

    ```cpp
    std::string uri = "";


    bool result = Promotion::processURI(uri);

    if(result) {
            // การลงทะเบียนเหตุการณ์ UE สำเร็จ
    } else {
            // รูปแบบไม่เหมาะสมสำหรับ Scheme URI
    }
    ```

=== "แอนดรอยด์"

    ```java
    String uri = "";


    boolean result = Promotion.processURI(uri);

    if(result) {
            // การลงทะเบียนเหตุการณ์ UE สำเร็จ
    } else {
            // รูปแบบไม่เหมาะสมสำหรับ Scheme URI
    }
    ```

=== "iOS"

    ```swift

    NSString* uri = @"";


    bool result = [HIVEPromotion processURI:uri];

    if(result) {
            // การลงทะเบียนเหตุการณ์ UE สำเร็จ
    } else {
            // รูปแบบไม่เหมาะสมสำหรับ Scheme URI
    }
    ```

โฮสต์

โฮสต์ ระบุว่าใครเป็นผู้รับผิดชอบต่อการกระทำที่ร้องขอ:

  • เกม: การกระทำที่เกมรับผิดชอบ
  • ฮันน่า: การกระทำที่ Hive SDK รับผิดชอบ

ฟิลด์ทั่วไป

ฟิลด์ทั่วไปของ Scheme URL คือ /{api}/{parameters} ซึ่งระบุการดำเนินการที่จะประมวลผลรวมถึงข้อมูลที่จำเป็น:

API ชี้แจงว่าควรดำเนินการใดผ่าน URL การดำเนินการต่อไปนี้สามารถทำได้ขึ้นอยู่กับโฮสต์:

หากโฮสต์ของ URL แผนคือ

โปรดทราบว่า API ที่มีอยู่จะแตกต่างกันขึ้นอยู่กับเวอร์ชันการตรวจสอบสิทธิ์ v4 หรือ v1.

API Implementation Auth v4 Auth v1
authlogin auth/login การเข้าสู่ระบบสมาชิก (แขก -> บัญชีที่ตรวจสอบแล้ว) X O
socialinquiry social/inquiry เข้าถึงหน้าสอบถาม 1:1 O O
promotionshow promotion/show การแสดงผลแบบกำหนดเองของโปรโมชั่น O O
promotioncoupon promotion/coupon ประมวลผลคูปองโปรโมชั่นว่าใช้แล้ว O O
offerwallshow promotion/offerwall การแสดงผลของ Offerwall O O
iappromote การจองการซื้อสินค้า (Hive SDK v4.5.0 ขึ้นไปพร้อมกับ IAP v4) O O
iappurchase การซื้อสินค้าบนแบนเนอร์ในสถานที่ (Hive SDK v4.5.0 ขึ้นไปพร้อมกับ IAP v4) เมื่อทำการติดตั้ง iappurchase, setEngagementReady() จะเป็น false โดยอัตโนมัติ หลังจากการซื้อ, คุณต้องตั้งค่า setEngagementReady() เป็น true O O
social/myinquiry เข้าถึงหน้าสอบถามของฉัน O O
social/profile เข้าถึงหน้าประวัติส่วนตัว O O

Hive SDK จะได้รับการแจ้งเตือนก่อนและหลังจากกระบวนการที่เกี่ยวข้องกับ UE ผ่าน EngagementListener เกมอาจต้องการการทำงานเช่นการหยุดเกมตามที่จำเป็น

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ iappromote และ iappurchase โปรดดูเนื้อหาด้านล่าง

iappromote

IAP v4 กับ Hive SDK v4.5.0 และเวอร์ชันที่ใหม่กว่าสนับสนุนฟีเจอร์นี้ มันให้การจองการซื้อสำหรับผู้ใช้ก่อนที่จะดำเนินการเกม ฟีเจอร์นี้ทำงานเหมือนกับ Promotional IAP ที่มีให้โดย iOS 11 และสนับสนุนสภาพแวดล้อมที่ใช้ Android iappromote มีให้บริการในหน้าเหตุการณ์ บริการพุช และข้อความ

* เมื่อผู้ใช้คลิกที่ URL แผนผ่าตัดผ่านหน้ากิจกรรม บริการส่งข้อความและข้อความ ให้รับข้อมูลการซื้อโดยการดำเนินการเกม
* เรียกใช้แผนผ่าตัด iappromote และรับ `EngagementEventType.IAP\_PROMOTE` เป็นข้อมูลผลลัพธ์ ด้วยค่าผลลัพธ์นี้ ให้ดำเนินการ checkPromotePurchase API เพื่อรับตลาด PID คุณสามารถดำเนินการซื้อได้เมื่อดำเนินการ API ซื้อด้วยตลาด PID ที่คุณได้รับเป็นข้อมูลอ้างอิง
* iappromote ใช้งานได้ทั้งบน iOS และ Android
* โครงสร้างของ URL แผนผ่าตัด: [AppID/push/interwork]://hive/iappromote?marketpid=[marketpid]
* ตัวอย่าง, 
    + interwork://hive/iappromote?marketpid=com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.cs02
    + เปลี่ยนส่วนที่เป็นสีแดงเป็นตลาด PID ที่เกี่ยวข้องกับการซื้อที่จองไว้
iappurchase

IAP v4 กับ Hive SDK v4.5.0 และเวอร์ชันที่ใหม่กว่าสนับสนุนฟีเจอร์นี้ คุณสามารถขายสินค้าบนแบนเนอร์แบบทันทีโดยใช้ iappurchase ใน URL ของสคีม

* หากคุณเรียกใช้แผนการ iappurchase จะมีการดำเนินการซื้อ ดังนั้นโปรดตรวจสอบให้แน่ใจว่าได้เริ่มต้นตลาดและรับข้อมูลร้านค้าก่อนที่จะดำเนินการตามแผนการ ซึ่งหมายความว่าต้องดำเนินการ `marketConnect API` และ `getProductInfo API` ก่อนที่จะเปลี่ยนสถานะของ `setEngagementReady` เป็นจริง
* เนื่องจากเกมจะดำเนินการตามตรรกะหลังจากการซื้อ มันจะหยุดการมีส่วนร่วม ( `setEngagementReady` จะกลายเป็น false โดยอัตโนมัติ)
* หลังจากการซื้อเสร็จสมบูรณ์ ให้เปลี่ยนสถานะของ `setEngagementReady` เป็นจริงเพื่อดำเนินการต่อ
* โครงสร้างของ URL แผนการ: [AppID/push/interwork]://hive/iappurchase?marketpid=[marketpid]
* ตัวอย่างเช่น,
    + interwork://hive/iappurchase?marketpid=com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.cs01
    + เปลี่ยนส่วนที่เป็นสีแดงเป็น PID ตลาดที่เกี่ยวข้องกับการซื้อที่จองไว้.
ซิงค์ iappurchase กับ Spot Banner

หากคุณต้องการขายสินค้าโดยใช้แผน iappurchase ให้ใช้ Spot Banner ดูแนวทางการใช้ Spot Banner

  • ตั้งค่า ID แบนเนอร์จุดที่ตำแหน่งหรือเวลาที่ต้องการในเกมเพื่อกระตุ้นให้ผู้ใช้ซื้อสินค้า
  • เรียก ID แบนเนอร์จุด เมื่อผู้ใช้แตะที่แบนเนอร์จุด ให้ดำเนินการตามแผนการเชื่อมต่อ ผู้ฟัง EngagementListener ที่ลงทะเบียนจะส่งสถานะการทำงานของการเชื่อมต่อ
  • หากคุณเรียกแผนการเชื่อมต่อ จะมีการดำเนินการตรรกะการซื้อ ดังนั้นให้แน่ใจว่าได้เริ่มต้นตลาดและรับข้อมูลร้านค้าก่อนที่จะดำเนินการตามแผนการ นี่หมายความว่าให้ดำเนินการ marketConnect API และ getProductInfo API ก่อนที่จะเรียกแบนเนอร์จุด
  • ขณะที่เกมดำเนินการตรรกะหลังจากการซื้อ มันจะหยุดการดำเนินการมีส่วนร่วม (setEngagementReady จะกลายเป็น false โดยอัตโนมัติ)
  • หลังจากการซื้อเสร็จสิ้น ให้เปลี่ยนสถานะของ setEngagementReady เป็น true เพื่อดำเนินการต่อ
  • ป้อน ID แบนเนอร์จุดใน Hive Console > Promotion > Campaign Settings > Spot Banner และแทรกลิงก์แผนการในลิงก์ภายใน ขอวิธีการลงทะเบียนแบนเนอร์จุดกับ Business PM
  • ตัวอย่างเช่น,
    • interwork://hive/iappurchase?marketpid=com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.cs01
    • แทนที่ส่วนที่เป็นสีแดงด้วย market PID ที่เกี่ยวข้องกับการซื้อที่จองไว้
  • เมื่อคุณลงทะเบียนแบนเนอร์ในคอนโซล ให้ทดสอบการซื้อในเกมของคุณ

หากโฮสต์ของ URL แผนคือเกม

ในกรณีนี้ เกมต้องดำเนินการตามที่ร้องขอ Hive SDK กำลังจัดการ URL Scheme และจากนั้นส่งผลลัพธ์ในรูปแบบ JSONObject ผ่าน EngagementListener ผลลัพธ์จะแบ่งออกเป็นคีย์ scheme, api, และ param ตรวจสอบให้แน่ใจว่าเกมดำเนินการตามที่เกี่ยวข้องในเวลาที่เหมาะสมหลังจากได้รับค่า

  • เช่น การให้ไอเท็มในกล่องจดหมาย
    • URL Scheme : com.com2us.example://game/postboxadditem?item_id=123456&item_title=item01
    • JSONObject ผลลัพธ์จาก Hive SDK

      {
      "scheme" : "com.com2us.example",
      "api" : "/postboxadditem",
      "param" : "item_id=123456&item"
      }
      

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการนำ UE ไปใช้ โปรดดูที่ Sample Code ของ การนำเสนอการมีส่วนร่วมของผู้ใช้ > การประกาศและการลงทะเบียน Callback ทั่วไป.

การตั้งค่าโครงการ

ในการใช้ UE ในแอปเกม ให้ตั้งค่าโดย OS ก่อนที่จะสร้างแอป

การตั้งค่า Android

ตั้งค่าเมธอด launchMode เป็น singleTask หรือ singleTop เมธอดนี้เป็นหนึ่งในรายการกิจกรรมหลักในไฟล์ AndroidManifest.xml

//<application
   android:hardwareAccelerated="true"
   android:icon="@drawable/app_icon"
   android:label="@string/app_name"
   android:isGame="true">
   <activity
       android:label="@string/app_name"
       android:name="com.hive.sample.MainActivity"
       android:screenOrientation="sensor"
       android:launchMode="singleTask"
...

การตั้งค่า iOS

  1. เลือก Build ของแอปที่คุณต้องการพัฒนาจากรายการ Xcode TARGETS.
  2. เลือกแท็บ Info.
  3. เพิ่มรายการ Additional url type properties ในส่วน URL Types เพื่อป้อน AppID ในฟิลด์ Bundle Identifier และ URL Schemes

การดำเนินการมีส่วนร่วมของผู้ใช้

การประกาศและลงทะเบียน Callback ทั่วโลก

ประกาศและลงทะเบียนการเรียกกลับทั่วโลกเพื่อนำไปใช้กับ UE วิธีการประกาศและการลงทะเบียนขึ้นอยู่กับเวอร์ชันของ Hive SDK.

Note
  • จาก Hive SDK v4.5.0 ขึ้นไป การประกาศและการลงทะเบียน callback ทั่วโลกจะทำผ่าน API การลงทะเบียน handler ของคลาส Promotion.
  • รูปแบบ Engagement Handler และค่า enum ได้มีการเปลี่ยนแปลงจาก Hive SDK v4.5.0 ขึ้นไป.

คุณต้องลงทะเบียนการเรียกกลับทั่วโลกโดยใช้ API การลงทะเบียนตัวจัดการของคลาส Promotion ตัวอย่างโค้ดมีดังนี้

API Reference: hive.Promotion.setEngagementListener

using hive;    
    Promotion.setEngagementListener((ResultAPI result, EngagementEventType engagementEventType, EngagementEventState engagementEventState, JSONObject param) => {    
    switch (engagementEventType) {    
    case EngagementEventType.EVENT_TYPE:    
                 switch (engagementEventState) {    
                     case EngagementEventState.BEGIN:    
                         // การดำเนินการทั้งหมดของ Engagement จะถูกดำเนินการ    
                         break;    
                     case EngagementEventState.FINISH:    
                         // การดำเนินการทั้งหมดของ Engagement เสร็จสิ้น    
                         break;    
                 }    
                 break;    
             case EngagementEventType.AUTH_LOGIN_VIEW:    
                 switch (engagementEventState) {    
                     case EngagementEventState.START:    
                         // เริ่มต้นการขอแสดงหน้าล็อกอินสมาชิก    
                         break;    
                     case EngagementEventState.END:    
                         // การล็อกอินสมาชิกเสร็จสิ้น (ส่งหลังจากการล็อกอินเสร็จสิ้น/หน้าต่างปิด)    
                         break;    
                 }    
                 break;    
             case EngagementEventType.SOCIAL_INQUIRY_VIEW:    
                 switch (engagementEventState) {    
                     case EngagementEventState.START:    
                         // เริ่มต้นการขอแสดงหน้าสอบถาม 1:1    
                         break;    
                     case EngagementEventState.END:    
                         // การแสดงหน้าสอบถาม 1:1 เสร็จสิ้น (ส่งหลังจากหน้าต่างสอบถาม 1:1 ปิด)    
                         break;    
                 }    
                 break;    
             case EngagementEventType.PROMOTION_VIEW:    
                 switch (engagementEventState) {    
                     case EngagementEventState.START:    
                         // เริ่มต้นการขอแสดงผลการโปรโมชัน    
                         break;    
                     case EngagementEventState.END:    
                         // การแสดงผลการโปรโมชันเสร็จสิ้น (ส่งหลังจากหน้าต่างโปรโมชันปิด)    
                         break;    
                 }    
                 break;    
             caseEngagementEventType.COUPON:    
                 switch (engagementEventState) {    
                     case EngagementEventState.START:    
                         // เริ่มต้นการขอใช้คูปอง    
                         break;    
                     case EngagementEventState.END:    
                         // เสร็จสิ้นการขอใช้คูปองและส่งการตอบกลับ    
                         break;    
                 }    
                 break;    
             case EngagementEventType.OFFERWALL_VIEW:    
                 switch (engagementEventState) {    
                     case EngagementEventState.START:    
                         // เริ่มต้นการขอแสดงหน้าผนังข้อเสนอ    
                         break;    
                     case EngagementEventState.END:    
                         // การแสดงหน้าผนังข้อเสนอเสร็จสิ้น (ส่งหลังจากปิดหน้าต่างผนังข้อเสนอ)    
                         break;    
                 }    
                 break;    

             case EngagementEventType.EVENT:    
                 // ถ้าผู้จัดงานเป็นเกม ให้ส่งค่า JSONObject result    
                 String api = "";    
                 String param = "";    

                 param.GetField(ref api, "api");    
                 param.GetField(ref param, "param");    

                 // ตรวจสอบผลลัพธ์การวิเคราะห์ api และพารามิเตอร์โดย Hive เวอร์ชัน SDK (ความแตกต่างขึ้นอยู่กับ Hive SDK C# JSONObject เวอร์ชัน)    
                 // ex) interwork://game/openurl?rurl=https://www.withhive.com    

                 //ภายใต้ Hive SDK 4.16.2    
                 // เมื่อส่งออกไปยังคอนโซลดีบัก api: \/openurl    
                 // ( api.Equals("\\/openurl"); )    
                 // พารามิเตอร์ผลลัพธ์คอนโซลดีบัก: rurl=https:\/\/www.withhive.com    

                 // Hive SDK 4.16.2 หรือสูงกว่า    
                 // เมื่อส่งออกไปยังคอนโซลดีบัก api: /openurl    
                 // (api.Equals("/openurl"); )    
                 // พารามิเตอร์ผลลัพธ์คอนโซลดีบัก: rurl=https://www.withhive.com    

                 // TODO: ทำตามการกระทำต่อไปนี้ตามค่า api และ param    
                 break;    
            case EngagementEventType.IAP_UPDATED:    
                switch (engagementEventState) {    
                    case EngagementEventState.EVENT_START:    
                        // สัญญาณเพื่อยอมรับเนื่องจากประวัติการซื้อได้เปลี่ยนแปลง (เรียกใช้เมธอด Restore())    
                        break;    
                    case EngagementEventState.EVENT_END:    
                        // สัญญาณเพื่อยอมรับเนื่องจากประวัติการซื้อได้เปลี่ยนแปลง (เรียกใช้เมธอด Restore())    
                        String type = "";    
                        param.getField(ref type, "type");    

                        if (type == "subscription") {    
                            // TODO: restore subscription product    
                            IAPV4.restoreSubscription((ResultAPI result, List <hive.IAPV4.IAPV4Receipt> receiptList) => {    
                                if (!result.isSuccess()) {    
                                    return;    
                                }    
                                // TODO: Request receipt verification using the received receiptList    
                            });    
                            return;    
                        }    

                        // TODO: คืนสินค้าที่สามารถบริโภคได้    
                        IAPV4.restore((ResultAPI result, List <hive.IAPV4.IAPV4Receipt> receiptList) => {    
                            if (!result.isSuccess()) {    
                                return;    
                            }    
                            // TODO: ขอการตรวจสอบใบเสร็จโดยใช้ receiptList ที่ได้รับ    
                        });    
                        break;    
                }    
                break;    

            case EngagementEventType.IAP_PROMOTE:    
                switch (engagementEventState) {    
                case EngagementEventState.START:    
                    // Convey whether IAP Promote data exists    
                    break;    
                case EngagementEventState.END:    
                    if (!result.isSuccess()) {    
                        return;    
                    }    

                    // เนื่องจากข้อมูล IAP Promote มีอยู่, marketPid จะถูกส่งผ่าน checkPromote API.    
                    IAPV4.checkPromotePurchase((ResultAPI promoteResult, String marketPid) => {    
                        if (!promoteResult.isSuccess()) {    
                            return;    
                        }    

                        // TODO: ขอซื้อด้วย marketPid ที่ได้รับ    
                        IAPV4.purchase(marketPid, null, (ResultAPI purchaseResult, hive.IAPV4.IAPV4Receipt receipt) => {    
                            if (!purchaseResult.isSuccess()) {    
                                return;    
                            }    
                            // TODO: ขอการตรวจสอบใบเสร็จด้วยใบเสร็จที่ได้รับ    
                        });    
                    });    
                    break;    
                }    
                break;    

            case EngagementEventType.IAP_PURCHASE:    
                switch (engagementEventState) {    
                case EngagementEventState.START:    
                    // แสดงป๊อปอัพสำหรับการซื้อสินค้าที่ได้รับผ่านสคีม่า IAPPurchase    
                    break;    
                case EngagementEventState.END:    
                    // แจ้งว่าการซื้อสินค้าที่ร้องขอนั้นสำเร็จหรือไม่ผ่านสคีม่า IAPPurchase    
                    if (!result.isSuccess()) {    
                        return;    
                    }    
                    String receipt = "";    
                    param.GetField(ref receipt, "iapV4Receipt");    
                    break;    
                }    
                break;    

            case EngagementEventType.SOCIAL_MY_INQUIRY:    
                switch (engagementEventState) {    
                case EngagementEventState.START:    
                    // เริ่มต้นการขอเปิดหน้า "สอบถามของฉัน"    
                    break;    
                case EngagementEventState.END:    
                    // หน้า "สอบถามของฉัน" ได้ถูกเปิดเผยแล้ว (ส่งหลังจากที่หน้าสอบถามของฉันถูกปิด)    
                    break;    
                }    
                break;    

            case EngagementEventType.SOCIAL_PROFILE:    
                switch (engagementEventState) {    
                case EngagementEventState.START:    
                    // Initiate profile page exposure request    
                    break;    
                case EngagementEventState.END:    
                    // Profile page exposure completed (delivered after closing the profile window)    
                    break;    
                }    
                break;    
        }    
});
#include "HivePromotion.h"

FHivePromotion::SetEngagementDelegate(FHivePromotionOnEngagementDelegate::CreateLambda([this](const FHiveResultAPI& Result, the EHiveEngagementEventType& EngagementEventType, the EHiveEngagementEventState& EngagementEventState, TSharedPtr<FJsonObject> Param) {

        switch (EngagementEventType) {
                case EHiveEngagementEventType::EVENT_TYPE:
                        switch (EngagementEventState) {
                                case EHiveEngagementEventState::BEGIN:
                                        // การกระทำทั้งหมดของ Engagement จะถูกดำเนินการ
                                        break;
                                case EHiveEngagementEventState::FINISH:
                                        // การกระทำทั้งหมดของ Engagement เสร็จสิ้นแล้ว
                                        break;
                        }
                        break;

                case EHiveEngagementEventType::AUTH_LOGIN_VIEW:
                        switch (EngagementEventState) {
                                case EHiveEngagementEventState::EVENT_START:
                                        // เริ่มต้นการแสดงหน้าล็อกอินสมาชิก Hive
                                        break;
                                case EHiveEngagementEventState::EVENT_END:
                                        // การดำเนินการล็อกอินสมาชิก Hive เสร็จสิ้น (ผ่านหลังจากการล็อกอินเสร็จสิ้น/ปิดหน้าต่าง)
                                        break;
                        }
                        break;

                case EHiveEngagementEventType::SOCIAL_INQUIRY_VIEW:
                        switch (EngagementEventState) {
                                case EHiveEngagementEventState::EVENT_START:
                                        // เริ่มต้นการแสดงผลหน้าสอบถาม 1:1
                                        break;
                                case EHiveEngagementEventState::EVENT_END:
                                        // การแสดงผลหน้าสอบถาม 1:1 เสร็จสมบูรณ์ (หลังจากปิดหน้าต่างสอบถาม 1:1)
                                        break;
                        }
                        break;

                case EHiveEngagementEventType::PROMOTION_VIEW:
                        switch (EngagementEventState) {
                                case EHiveEngagementEventState::EVENT_START:
                                        // เริ่มต้นการขอแสดงผลโปรโมชั่น
                                        break;
                                case EHiveEngagementEventState::EVENT_END:
                                        // การแสดงผลโปรโมชั่นเสร็จสิ้น (ส่งหลังจากปิดหน้าต่างโปรโมชั่น)
                                        break;
                        }
                        break;

                case EHiveEngagementEventType::COUPON:
                        switch (EngagementEventState) {
                                case EHiveEngagementEventState::EVENT_START:
                                        // เริ่มต้นการขอใช้คูปอง
                                        break;
                                case EHiveEngagementEventState::EVENT_END:
                                        // เสร็จสิ้นการขอใช้คูปองและส่งการตอบกลับ
                                        break;
                        }
                        break;

                case EHiveEngagementEventType::OFFERWALL_VIEW:
                        switch (EngagementEventState) {
                                case EHiveEngagementEventState::EVENT_START:
                                        // เริ่มต้นการร้องขอเพื่อแสดงหน้า offerwall
                                        break;
                                case EHiveEngagementEventState::EVENT_END:
                                        // เสร็จสิ้นการแสดงหน้า offerwall (ส่งหลังจากที่หน้าต่าง offerwall ถูกปิด)
                                        break;
                        }
                        break;

                case EHiveEngagementEventType::EVENT:
                        // หากโฮสต์เป็นเกม ให้ส่งค่าผลลัพธ์ของพาราม (คีย์: "api", "param")
                        // TODO: ดำเนินการประมวลผลตามค่า api และ param
                        break;

                case EHiveEngagementEventType::IAP_UPDATED:
                        switch (EngagementEventState) {
                                case EHiveEngagementEventState::EVENT_START:
                                        //สัญญาณเพื่อรับข้อมูลการซื้อเนื่องจากมีการเปลี่ยนแปลง
                                        break;
                                case EHiveEngagementEventState::EVENT_END:
                                        // ประวัติการซื้อได้เปลี่ยนแปลงแล้ว ดังนั้นสัญญาณเพื่อรับข้อมูลนี้
                                        FString TypeValue;
                                        if (Param.IsValid() && Param->TryGetStringField(TEXT("type"), TypeValue)) {
                                                if (TypeValue == TEXT("subscription")) {
                                                        // TODO: กู้คืนผลิตภัณฑ์การสมัครสมาชิก
                                                } else {
                                                        // TODO: กู้คืนผลิตภัณฑ์ที่ใช้แล้ว
                                                }
                                        }

                                        break;
                        }
                        break;

                case EHiveEngagementEventType::IAP_PROMOTE:
                        switch (EngagementEventState) {
                                case EHiveEngagementEventState::EVENT_START:
                                        // การส่งข้อมูลการส่งเสริม IAP
                                        break;
                                case EHiveEngagementEventState::EVENT_END:
                                        if (!Result.IsSuccess()) {
                                                return;
                                        }

                                        // เนื่องจากข้อมูล IAP Promote มีอยู่ เราจึงได้รับ marketPid ผ่านการตรวจสอบ Promote API
                                        FHiveIAPV4::CheckPromotePurchase(FHiveIAPV4OnCheckPromotePurchaseDelegate::CreateLambda([=](const FHiveResultAPI& PromoteResult, const FString& MarketPid) {

                                                if (!PromoteResult.IsSuccess()) {
                                                        return;
                                                }

                                                // TODO: ขอซื้อรายการที่มี MarketPid ที่ส่งมา
                                                FString IapPayload = TEXT("");
                                                FHiveIAPV4::Purchase(MarketPid, IapPayload, FHiveIAPV4OnPurchaseDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveIAPV4Receipt& Receipt) {
                                                        // TODO: ขอการตรวจสอบใบเสร็จด้วยใบเสร็จที่ได้รับ
                                                }));
                                        }));
                                        break;
                        }
                        break;

                case EHiveEngagementEventType::IAP_PURCHASE:
                        switch (EngagementEventState) {
                                case EHiveEngagementEventState::EVENT_START:
                                        // แสดงป๊อปอัพการซื้อสำหรับรายการที่ได้รับด้วยสคีม่า IAPPurchase
                                        break;
                                case EHiveEngagementEventState::EVENT_END:
                                        // ไม่ว่าการซื้อรายการที่ร้องขอจะสำเร็จหรือไม่จะถูกส่งผ่านสคีม่า IAPPurchase

                                        if (!Result.IsSuccess) {
                                                return;
                                        }
                                        FString ReceiptValue;
                                        if (Param.IsValid() && Param->TryGetStringField(TEXT("iapV4Receipt"), ReceiptValue)) {
                                                // ส่งใบเสร็จการซื้อ
                                                // TODO: ตรวจสอบใบเสร็จและดำเนินการชำระเงินสำหรับรายการ리
                                        }

                                        break;
                        }
                        break;

                case EHiveEngagementEventType::SOCIAL_MY_INQUIRY:
                        switch (EngagementEventState) {
                                case EHiveEngagementEventState::EVENT_START:
                                        // เริ่มต้นการแสดงผลหน้าสอบถามของฉัน
                                        break;
                                case EHiveEngagementEventState::EVENT_END:
                                        // เสร็จสิ้นการแสดงผลหน้าสอบถามของฉัน (หลังจากปิดหน้าต่างสอบถามของฉัน)
                                        break;
                        }
                        break;

                case EHiveEngagementEventType::SOCIAL_PROFILE:
                        switch (EngagementEventState) {
                                case EHiveEngagementEventState::EVENT_START:
                                        // เริ่มต้นการขอแสดงหน้าสอบถามของฉัน
                                        break;
                                case EHiveEngagementEventState::EVENT_END:
                                        // เสร็จสิ้นการแสดงหน้าสอบถามของฉัน (ส่งหลังจากปิดหน้าต่างสอบถามของฉัน)
                                        break;
                        }
                        break;
        }
}));

API Reference: Promotion::setEngagementHandler

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    Promotion::setEngagementHandler([ = ](ResultAPI    
                const & result, EngagementEventType engagementEventType, EngagementEventState engagementEventState, picojson::value    
                const & param) {    
                switch (engagementEventType) {    
                case EngagementEventType::EVENT_TYPE:    
                    switch (engagementEventState) {    
                    case EngagementEventState::BEGIN:    
                        // การกระทำทั้งหมดของ Engagement จะถูกดำเนินการ    
                        break;    
                    case EngagementEventState::FINISH:    
                        // การกระทำทั้งหมดของ Engagement เสร็จสิ้นแล้ว    
                        break;    
                    }    
                    break;    
                case EngagementEventType::AUTH_LOGIN_VIEW:    
                    switch (engagementEventState) {    
                    case EngagementEventState::EVENT_START:    
                        // เริ่มต้นการขอให้แสดงหน้าเข้าสู่ระบบสมาชิก    
                        break;    
                    case EngagementEventState::EVENT_END:    
                        // การเข้าสู่ระบบสมาชิกเสร็จสิ้น (ส่งหลังจากเข้าสู่ระบบเสร็จสิ้น/หน้าต่างปิด)    
                        break;    
                    }    
                    break;    
                case EngagementEventType::SOCIAL_INQUIRY_VIEW:    
                    switch (engagementEventState) {    
                    case EngagementEventState::EVENT_START:    
                        // เริ่มต้นการขอให้แสดงหน้า 1:1 สอบถาม    
                        break;    
                    case EngagementEventState::EVENT_END:    
                        // การแสดงหน้า 1:1 สอบถามเสร็จสิ้น (ส่งหลังจากหน้าต่างสอบถาม 1:1 ปิด)    
                        break;    
                    }    
                    break;    
                case EngagementEventType::PROMOTION_VIEW:    
                    switch (engagementEventState) {    
                    case EngagementEventState::EVENT_START:    
                        // เริ่มต้นการขอให้แสดง Promotion View    
                        break;    
                    case EngagementEventState::EVENT_END:    
                        // การแสดง Promotion View เสร็จสิ้น (ส่งหลังจากหน้าต่าง Promotion ปิด)    
                        break;    
                    }    
                    break;    
                case EngagementEventType::COUPON:    
                    switch (engagementEventState) {    
                    case EngagementEventState::EVENT_START:    
                        // เริ่มต้นการขอให้ใช้คูปอง    
                        break;    
                    case EngagementEventState::EVENT_END:    
                        // เสร็จสิ้นการขอใช้คูปองและส่งการตอบกลับ    
                        break;    
                    }    
                    break;    
                case EngagementEventType::OFFERWALL_VIEW:    
                    switch (engagementEventState) {    
                    case EngagementEventState::EVENT_START:    
                        // เริ่มต้นการขอให้แสดงหน้า offer wall    
                        break;    
                    case EngagementEventState::EVENT_END:    
                        // การแสดงหน้า offerwall เสร็จสิ้น (ส่งหลังจากปิดหน้าต่าง offerwall)    
                        break;    
                    }    
                    break;    
                case EngagementEventType::EVENT:    
                    // หากโฮสต์เป็นเกม ส่งค่าผลลัพธ์ JSONObject    
                    if (param == null) {    
                        return;    
                    }    
                    string api = param.get("api").to_str();    
                    string param = param.get("param").to_str();    
                    // TODO: ดำเนินการตามค่าของ api และ param    
                    break;    

                case EngagementEventType::IAP_UPDATED:    
                    switch (engagementEventState) {    
                    case EngagementEventState::EVENT_START:    
                        // สัญญาณเพื่อรับข้อมูลเนื่องจากรายละเอียดการซื้อได้เปลี่ยนแปลง    
                        break;    
                    case EngagementEventState::EVENT_END:    
                        // สัญญาณเพื่อรับข้อมูลเนื่องจากรายละเอียดการซื้อได้เปลี่ยนแปลง    
                        string type = param.get("type").to_str();    

                        if (type != null, type == "subscription") {    
                            // TODO: restore subscription product    
                            IAPV4::restoreSubscription([ = ](ResultApi    
                                const & result, vector < reference_wrapper < IAPV4Receipt >> receiptList) {    
                                if (!result.isSuccess()) {    
                                    return;    
                                }    
                                // TODO: Request receipt verification using the received receiptList    
                            });    
                            return;    
                        }    

                        // TODO: คืนสินค้าที่สามารถบริโภคได้    
                        IAPV4::restore([ = ](ResultAPI    
                            const & result, vector < reference_wrapper < IAPV4Receipt >> receiptList) {    
                            if (!result.isSuccess()) {    
                                return;    
                            }    
                            // TODO: ขอการตรวจสอบใบเสร็จโดยใช้ receiptList ที่ได้รับ    
                        });    
                        break;    
                    }    
                break;    

            case EngagementEventType::IAP_PROMOTE:    
                switch (engagementEventState) {    
                case EngagementEventState::EVENT_START:    
                    // แจ้งว่าข้อมูล IAP Promote มีอยู่หรือไม่    
                    break;    
                case EngagementEventState::EVENT_END:    
                    if (!result.isSuccess()) {    
                        return;    
                    }    

                    // เนื่องจากข้อมูล IAP Promote มีอยู่, marketPid จะถูกได้รับผ่านการตรวจสอบ API Promote.    
                    IAPV4::checkPromotePurchase([ = ](ResultApi    
                        const & promoteResult, string marketPid) {    
                        if (!promoteResult.isSuccess()) {    
                            return;    
                        }    

                        // TODO: ขอซื้อรายการที่ส่งมาจากตลาด Pid    
                        IAPV4::purchase(marketPid, "", [ = ](ResultApi    
                            const & purchaseResult, IAPV4Receipt    
                            const * receipt) {    
                            if (!purchaseResult.isSuccess()) {    
                                return;    
                            }    
                            // TODO: ขอการตรวจสอบใบเสร็จด้วยใบเสร็จที่ได้รับ    
                        });    
                    });    
                    break;    
                }    
            break;    

            case EngagementEventType::IAP_PURCHASE:    
                switch (engagementEventState) {    
                case EngagementEventState::EVENT_START:    
                    // แสดงป๊อปอัพสำหรับการซื้อสินค้าที่ได้รับผ่านสคีมาของ IAPPurchase    
                    break;    
                case hive::EngagementEventState::EVENT_END:    
                    // สื่อสารว่าการซื้อสินค้าที่ร้องขอนั้นสำเร็จหรือไม่ผ่านสคีมาของ IAPPurchase    
                    if (result.isSucces()) {    
                        return;    
                    }    
                    picojson::value receiptJson = param.get("iapV4Receipt");    
                    shared_ptr receipt = IAPV4Receipt::create(receiptJson);    
                    break;    
                }    
            break;    

            case EngagementEventType::SOCIAL_MY_INQUIRY:    
                switch (engagementEventState) {    
                case EngagementEventState::EVENT_START:    
                    // เริ่มการเปิดเผยหน้าสอบถามของฉัน    
                    break;    
                case EngagementEventState::EVENT_END:    
                    // หน้าสอบถามของฉันได้ถูกเปิดเผยแล้ว (ส่งหลังจากที่หน้าสอบถามของฉันถูกปิด)    
                    break;    
                }    
            break;    

            case EngagementEventType::SOCIAL_PROFILE:    
                switch (engagementEventState) {    
                case EngagementEventState::EVENT_START:    
                    // เริ่มต้นคำขอการเปิดเผยหน้าโปรไฟล์    
                    break;    
                case EngagementEventState::EVENT_END:    
                    // การเปิดเผยหน้าโปรไฟล์เสร็จสิ้น (ส่งหลังจากปิดหน้าต่างโปรไฟล์)    
                    break;    
                }    
            break;    
        }    
});

API Reference: setEngagementListener

import com.hive.IAPV4    
    import com.hive.Promotion    
    import com.hive.ResultAPI    
    Promotion.setEngagementListener(object: Promotion.EngagementListener {    
                override fun onEngagement(    
                        result: ResultAPI,    
                        engagementEventType: Promotion.EngagementEventType,    
                        engagementEventState: Promotion.EngagementEventState,    
                        param: JSONObject ?    
                    ) {    
                        // โค้ดที่แยกจาก Hive SDK ขึ้นอยู่กับประเภทของการแทรกแซง    
                        when(engagementEventType) {    
                                Promotion.EngagementEventType.EVENT_TYPE -> when(engagementEventState) {    
                                    Promotion.EngagementEventState.BEGIN -> {    
                                        // การกระทำทั้งหมดของ Engagement ถูกดำเนินการ    
                                    }    
                                    Promotion.EngagementEventState.FINISH -> {    
                                        // การกระทำทั้งหมดของ Engagement เสร็จสิ้น    
                                    }    
                                    else -> {}    
                                }    
                                Promotion.EngagementEventType.AUTH_LOGIN_VIEW -> when(engagementEventState) {    
                                    Promotion.EngagementEventState.START -> {    
                                        // เริ่มการขอแสดงหน้าล็อกอินสมาชิก    
                                    }    
                                    Promotion.EngagementEventState.END -> {    
                                        // การล็อกอินสมาชิกเสร็จสิ้น (ส่งหลังจากล็อกอินเสร็จสิ้น/หน้าต่างปิด)    
                                    }    
                                    else -> {}    
                                }    
                                Promotion.EngagementEventType.SOCIAL_INQUIRY_VIEW -> when(engagementEventState) {    
                                    Promotion.EngagementEventState.START -> {    
                                        // เริ่มการขอแสดงหน้าสอบถาม 1:1    
                                    }    
                                    Promotion.EngagementEventState.END -> {    
                                        // การแสดงหน้าสอบถาม 1:1 เสร็จสิ้น (ส่งหลังจากหน้าต่างสอบถาม 1:1 ปิด)    
                                    }    
                                    else -> {}    
                                }    
                                Promotion.EngagementEventType.PROMOTION_VIEW -> when(engagementEventState) {    
                                    Promotion.EngagementEventState.START -> {    
                                        // เริ่มการขอแสดง Promotion View    
                                    }    
                                    Promotion.EngagementEventState.END -> {    
                                        // การแสดง Promotion View เสร็จสิ้น (ส่งหลังจากหน้าต่าง Promotion ปิด)    
                                    }    
                                    else -> {}    
                                }    
                                Promotion.EngagementEventType.COUPON -> when(engagementEventState) {    
                                    Promotion.EngagementEventState.START -> {    
                                        // เริ่มการขอใช้คูปอง    
                                    }    
                                    Promotion.EngagementEventState.END -> {    
                                        // เสร็จสิ้นการขอใช้คูปองและส่งการตอบกลับ    
                                    }    
                                    else -> {}    
                                }    
                                Promotion.EngagementEventType.OFFERWALL_VIEW -> when(engagementEventState) {    
                                    Promotion.EngagementEventState.START -> {    
                                        // เริ่มการขอแสดงหน้าผนังข้อเสนอ    
                                    }    
                                    Promotion.EngagementEventState.END -> {    
                                        // การแสดงหน้าผนังข้อเสนอเสร็จสิ้น (ส่งหลังจากปิดหน้าต่างผนังข้อเสนอ)    
                                    }    
                                    else -> {}    
                                }    
                                Promotion.EngagementEventType.EVENT -> {    

                                    // หากโฮสต์เป็นเกม ให้ส่งค่า JSONObject result value    
                                    if (param == null) {    
                                        return    
                                    }    
                                    val api = param.optString("api")    
                                    val param = param.optString("param")    
                                    // TODO: ดำเนินการตามค่าของ api และ param    
                                }    
                                Promotion.EngagementEventType.IAP_UPDATED -> when (engagementEventState) {    
                                    Promotion.EngagementEventState.START -> {    
                                        // สัญญาณเพื่อยอมรับเนื่องจากประวัติการซื้อได้เปลี่ยนแปลง (เรียกใช้ Restore() method)    
                                    }    
                                    Promotion.EngagementEventState.END -> {    
                                        // สัญญาณเพื่อยอมรับเนื่องจากประวัติการซื้อได้เปลี่ยนแปลง (เรียกใช้ Restore() method)    
                                        val iapUpdateType = param?.optString("type")    

                                        if (iapUpdateType == "subscription") {    
                                            // TODO: restore subscription product    
                                            IAPV4.restoreSubscription(object : IAPV4.IAPV4RestoreListener {    
                                                override fun onIAPV4Restore(    
                                                    result: ResultAPI,    
                                                    iapv4ReceiptList: ArrayList<IAPV4.IAPV4Receipt>?    
                                                ) {    
                                                    if (!result.isSuccess) {    
                                                        return    
                                                    }    
                                                    // TODO: Request receipt verification using the received iapv4ReceiptList    
                                                }    
                                            })    
                                        } else {    
                                            IAPV4.restore(object : IAPV4.IAPV4RestoreListener {    
                                                override fun onIAPV4Restore(    
                                                    result: ResultAPI,    
                                                    iapv4ReceiptList: ArrayList<IAPV4.IAPV4Receipt>?    
                                                ) {    
                                                    if (!result.isSuccess) {    
                                                        return    
                                                    }    
                                                    // TODO: Request receipt verification using the received iapv4ReceiptList    
                                                }    
                                            })    
                                        }    
                                    }    
                                    else -> {}    
                                }    

                                Promotion.EngagementEventType.IAP_PURCHASE -> when (engagementEventState) {    
                                    Promotion.EngagementEventState.START -> {    
                                        // แสดงป๊อปอัพสำหรับการซื้อสินค้าที่ได้รับผ่านสคีม่า IAPPurchase    
                                    }    
                                    Promotion.EngagementEventState.END -> {    
                                        // สื่อสารว่าการซื้อสินค้าที่ร้องขอนั้นสำเร็จหรือไม่ผ่านสคีม่า IAPPurchase    
                                        if (!result.isSuccess) {    
                                            return    
                                        }    
                                        val iapV4Receipt = param?.optJSONObject("iapV4Receipt")    
                                    }    
                                    else -> {}    
                                }    

                                Promotion.EngagementEventType.SOCIAL_MYINQUIRY_VIEW -> เมื่อ (engagementEventState) {    
                                    Promotion.EngagementEventState.START -> {    
                                        // เริ่มคำขอการเปิดเผยหน้าสอบถามของฉัน    
                                    }    
                                    Promotion.EngagementEventState.END -> {    
                                        // หน้าสอบถามของฉันได้ถูกเปิดเผยแล้ว (ส่งหลังจากที่หน้าสอบถามของฉันถูกปิด)    
                                    }    
                                    else -> {}    
                                }    

                                Promotion.EngagementEventType.SOCIAL_PROFILE_VIEW -> when (engagementEventState) {    
                                    Promotion.EngagementEventState.START -> {    
                                        // เริ่มต้นคำขอการเปิดเผยหน้าโปรไฟล์    
                                    }    
                                    Promotion.EngagementEventState.END -> {    
                                        // การเปิดเผยหน้าโปรไฟล์เสร็จสิ้น (ส่งหลังจากปิดหน้าต่างโปรไฟล์)    
                                    }    
                                    else -> {}    
                                }    

                                else -> {}    
                            }    
                        }    
               })

API Reference: com.hive.Promotion.setEngagementListener

import com.hive.IAPV4;    
    import com.hive.Promotion;    
    import com.hive.ResultAPI;    
    Promotion.INSTANCE.setEngagementListener((result, engagementEventType, engagementEventState, param) -> {    
            switch (engagementEventType) {    
                case EVENT_TYPE:    
                    switch (engagementEventState) {    
                        case BEGIN:    
                            // การดำเนินการทั้งหมดของ Engagement จะถูกดำเนินการ    
                            break;    
                        case FINISH:    
                            // การดำเนินการทั้งหมดของ Engagement เสร็จสิ้นแล้ว    
                            break;    
                    }    
                    break;    
                case AUTH_LOGIN_VIEW:    
                    switch (engagementEventState) {    
                        case START:    
                            // เริ่มการร้องขอการแสดงหน้าเข้าสู่ระบบสมาชิก    
                            break;    
                        case END:    
                            // การเข้าสู่ระบบสมาชิกเสร็จสิ้น (ส่งหลังจากเข้าสู่ระบบเสร็จสิ้น/หน้าต่างปิด)    
                            break;    
                    }    
                    break;    
                case SOCIAL_INQUIRY_VIEW:    
                    switch (engagementEventState) {    
                        case START:    
                            // เริ่มการร้องขอการแสดงหน้าการสอบถาม 1:1    
                            break;    
                        case END:    
                            // การแสดงหน้าการสอบถาม 1:1 เสร็จสิ้น (ส่งหลังจากหน้าต่างการสอบถาม 1:1 ปิด)    
                            break;    
                    }    
                    break;    
                case PROMOTION_VIEW:    
                    switch (engagementEventState) {    
                        case START:    
                            // เริ่มการร้องขอการแสดง Promotion View    
                            break;    
                        case END:    
                            // การแสดง Promotion View เสร็จสิ้น (ส่งหลังจากหน้าต่าง Promotion ปิด)    
                            break;    
                    }    
                    break;    
                case COUPON:    
                    switch (engagementEventState) {    
                        case START:    
                            // เริ่มการร้องขอการใช้คูปอง    
                            break;    
                        case END:    
                            // เสร็จสิ้นการร้องขอการใช้คูปองและส่งการตอบกลับ    
                            break;    
                    }    
                    break;    
                case OFFERWALL_VIEW:    
                    switch (engagementEventState) {    
                        case START:    
                            // เริ่มการร้องขอการแสดงหน้า offer wall    
                            break;    
                        case END:    
                            // การแสดงหน้า offerwall เสร็จสิ้น (ส่งหลังจากปิดหน้าต่าง offerwall)    
                            break;    
                    }    
                    break;    
                case EVENT:    
                    // หากโฮสต์เป็นเกม ให้ส่งค่าผลลัพธ์ JSONObject    
                    if (param == null)    
                        return;    

                    String api = param.optString("api");    
                    String paramData = param.optString("param");    
                    // TODO: Perform the following actions according to the api and param values    
                    break;    
                case IAP_UPDATED:    
                    switch (engagementEventState) {    
                        case START:    
                            // Signal to accept as purchase history has changed (call Restore() method)    
                            break;    
                        case END:    
                            // Signal to accept as purchase history has changed (call Restore() method)    
                            if(param == null)    
                                return;    

                            String iapUpdateType = param.optString("type");    
                            if(iapUpdateType == "subscription") {    
                                // TODO: คืนค่าผลิตภัณฑ์การสมัครสมาชิก    
                                IAPV4.INSTANCE.restoreSubscription((result1, iapv4ReceiptList) -> {    
                                    if (!result1.isSuccess()) {    
                                        return;    
                                    }    
                                    // TODO: ขอการตรวจสอบใบเสร็จโดยใช้ iapv4ReceiptList ที่ได้รับมา    
                                });    
                            } else {    
                                IAPV4.INSTANCE.restore((result2, iapv4ReceiptList) -> {    
                                    if (!result2.isSuccess()) {    
                                        return;    
                                    }    
                                    // TODO: ขอการตรวจสอบใบเสร็จโดยใช้ iapv4ReceiptList ที่ได้รับมา    
                                });    
                            }    
                            break;    
                    }    
                    break;    
                case IAP_PURCHASE:    
                    switch (engagementEventState) {    
                        case START:    
                            // แสดงป๊อปอัพสำหรับการซื้อสินค้าที่ได้รับผ่านสคีมาของ IAPPurchase    
                            break;    
                        case END:    
                            // แจ้งว่าการซื้อสินค้าที่ร้องขอสำเร็จหรือไม่ผ่านสคีมาของ IAPPurchase    
                            if(!result.isSuccess() || param == null)    
                                return;    

                            JSONObject iapV4Receipt = param.optJSONObject("iapV4Receipt");    
                            break;    
                    }    
                    break;    
                case SOCIAL_MYINQUIRY_VIEW:    
                    switch (engagementEventState) {    
                        case START:    
                            // เริ่มต้นคำขอแสดงหน้าการสอบถามของฉัน    
                            break;    
                        case END:    
                            // หน้าการสอบถามของฉันได้แสดงแล้ว (ส่งหลังจากที่หน้าการสอบถามของฉันถูกปิด)    
                            break;    
                    }    
                    break;    
                case SOCIAL_PROFILE_VIEW:    
                    switch (engagementEventState) {    
                        case START:    
                            // เริ่มต้นคำขอแสดงหน้าประวัติส่วนตัว    
                            break;    
                        case END:    
                            // การแสดงหน้าประวัติส่วนตัวเสร็จสิ้น (ส่งหลังจากปิดหน้าประวัติส่วนตัว)    
                            break;    
                    }    
                    break;    
        }    
});

API Reference: setEngagementHandler(_:)

import HIVEService    
    PromotionInterface.setEngagementHandler() { result, engagementEventType, engagementState, param in    

         switchengageEventType {    
             case.type:    
                 switch engagementState{    
                     case .begin:    
                         // การกระทำทั้งหมดของ Engagement จะถูกดำเนินการ    
                     case .finish:    
                         // การกระทำทั้งหมดของ Engagement เสร็จสิ้นแล้ว    
                 }    

             case .authLoginView:    
                 switch engagementState {    
                     case.eventStart:    
                         // เริ่มต้นการขอแสดงหน้าเข้าสู่ระบบสมาชิก    
                     case .eventEnd:    
                         // การเข้าสู่ระบบสมาชิกเสร็จสิ้น (ส่งหลังจากการเข้าสู่ระบบเสร็จสิ้น/หน้าต่างปิด)    
                 }    

             case .socialInquiryView:    
                 switch engagementState {    
                     case.eventStart:    
                         // เริ่มต้นการร้องขอการแสดงหน้า 1:1 inquiry    
                     case .eventEnd:    
                         // การแสดงหน้า 1:1 inquiry เสร็จสิ้น (ส่งหลังจากที่หน้าต่าง 1:1 inquiry ถูกปิด)    
                 }    

             case .promotionView:    
                 switch engagementState {    
                     case.eventStart:    
                         // เริ่มคำขอแสดงผล Promotion View    
                     case .eventEnd:    
                         // การแสดงผล Promotion View เสร็จสิ้น (ส่งหลังจากปิดหน้าต่าง Promotion)    
                 }    

             case .คูปอง:    
                 switch engagementState {    
                     case.eventStart:    
                         // เริ่มคำขอการใช้คูปอง    
                     case .eventEnd:    
                         // เสร็จสิ้นคำขอการใช้คูปองและส่งการตอบกลับ    
                 }    

             case .offerwallView:    
                 switch engagementState {    
                     case.eventStart:    
                         // เริ่มต้นการร้องขอการเปิดเผยหน้าเสนอ    
                     case .eventEnd:    
                         // การเปิดเผยหน้าเสนอเสร็จสิ้น (ส่งหลังจากปิดหน้าต่างเสนอ)    
                 }    

             case.event:    
                // หากโฮสต์เป็นเกม ให้ส่งค่า JSONObject result    

                let api = param?["api"]    
                    let param = param?["param"]    

                // ดำเนินการตามคำขอที่ระบุตามค่า api และ param    
            case.iapPromote:    
                switch engagementState {    
                    case.eventStart:    
                        // แจ้งว่าข้อมูล IAP Promote มีอยู่หรือไม่    
                        case.eventEnd:    
                        if ! result.isSuccess() {    
                        return    
                    }    
                    // เนื่องจากข้อมูล IAP Promote มีอยู่ marketPid จะถูกส่งผ่านการตรวจสอบ Promote API    
                    IAPV4Interface.checkPromotePurchase() {    
                        promoteResult,    
                        marketPid in    
                        if !promoteResult.isSuccess() {    
                            return    
                        }    
                        // TODO: ขอซื้อรายการ market Pid ที่ส่งมา    
                        IAPV4Interface.purchase(marketPid, additionalInfo: nil) {    
                            purchaseResult,    
                            receipt in    
                            if !purchaseResult.isSuccess() {    
                                return    
                            }    
                            // TODO: ขอการตรวจสอบใบเสร็จด้วยใบเสร็จที่ได้รับ    
                        }    
                    }    

            case.iapUpdated:    
                switch engagementState {    
                    case.eventStart:    
                        // สัญญาณเพื่อรับข้อมูลเนื่องจากรายละเอียดการซื้อได้เปลี่ยนแปลง    
                        case.eventEnd:    
                        // สัญญาณเพื่อรับข้อมูลเนื่องจากรายละเอียดการซื้อได้เปลี่ยนแปลง    
                        if    
                    let type = param ? ["type"],    
                        type == "subscription" {    
                            // TODO: กู้คืนผลิตภัณฑ์การสมัครสมาชิก    
                            IAPV4Interface.restoreSubscription() {    
                                (result, receiptList) in    
                                // TODO: ขอการตรวจสอบใบเสร็จโดยใช้ receiptList ที่ได้รับ    
                            }    
                            return    
                        }    
                    // TODO: กู้คืนสินค้าที่ใช้แล้ว    
                    IAPV4Interface.restore() {    
                        (result, receiptList) in    
                        // TODO: ขอการตรวจสอบใบเสร็จโดยใช้ receiptList ที่ได้รับ    
                    }    
                }    
            case.iapPurchase:    
                switch engagementState {    
                    case.eventStart:    
                        // แสดงป๊อปอัพสำหรับการซื้อสินค้าที่ได้รับผ่านสคีมาของ IAPPurchase    
                        case.eventEnd:    
                        // สื่อสารว่าการซื้อสินค้าที่ร้องขอนั้นสำเร็จหรือไม่ผ่านสคีมาของ IAPPurchase    
                        if result.isSuccess() {    
                        let receipt = param ? ["iapV4Receipt"];    
                    }    
                }    
            case.socialMyInquiry:    
                switch engagementState {    
                    case.eventStart:    
                        // เริ่มคำขอการเปิดเผยหน้าคำถามของฉัน    
                        case.eventEnd:    
                        // หน้าคำถามของฉันได้ถูกเปิดเผยแล้ว (ส่งหลังจากที่หน้าคำถามของฉันถูกปิด)    
                }    
            case.socialProfile:    
                switch engagementState {    
                    case.eventStart:    
                        // เริ่มคำขอการเปิดเผยหน้าประวัติส่วนตัว    
                        case.eventEnd:    
                        // การเปิดเผยหน้าประวัติส่วนตัวเสร็จสิ้น (ส่งหลังจากปิดหน้าประวัติส่วนตัว)    
                }    
        }    
}

API Reference: HIVEPromotion setEngagementHandler

#import <HIVEService/HIVEService-Swift.h>    
    [HIVEPromotion setEngagementHandler: ^(HIVEResultAPI *result, HIVEEngagementEventType engagementEventType, HIVEEngagementEventState engagementState, NSDictionary *param) {    

    switch (engagementEventType) {    
                case HIVEEngagementEventTypeType:    
                    switch (engagementState) {    
                        case HIVEEngagementStateBegin:    
                            // การกระทำทั้งหมดของ Engagement จะถูกดำเนินการ    
                            break;    
                        case HIVEEngagementStateFinish:    
                            // การกระทำทั้งหมดของ Engagement เสร็จสิ้นแล้ว    
                            break;    
                    }    
                    break;    

                case HIVEEngagementEventTypeAuthLoginView:    
                    switch (engagementState) {    
                        case HIVEEngagementStateEventStart:    
                            // เริ่มต้นการขอแสดงหน้าล็อกอินสมาชิก    
                            break;    
                        case HIVEEngagementStateEnd:    
                            // การล็อกอินสมาชิกเสร็จสิ้น (ส่งหลังจากการล็อกอินเสร็จสิ้น/หน้าต่างปิด)    
                            break;    
                    }    
                    break;    

                case HIVEEngagementEventTypeSocialInquiryView:    
                    switch (engagementState) {    
                        case HIVEEngagementStateEventStart:    
                            // เริ่มการขอแสดงหน้าสอบถาม 1:1    
                            break;    
                        case HIVEEngagementStateEnd:    
                            // การแสดงหน้าสอบถาม 1:1 เสร็จสิ้น (ส่งหลังจากปิดหน้าต่างสอบถาม 1:1)    
                            break;    
                    }    
                    break;    

                case HIVEEngagementEventTypePromotionView:    
                    switch (engagementState) {    
                        case HIVEEngagementStateEventStart:    
                            // เริ่มคำขอการแสดงผลการดูโปรโมชั่น    
                            break;    
                        case HIVEEngagementStateEnd:    
                            // การเปิดเผยการดูโปรโมชั่นเสร็จสิ้น (ส่งหลังจากที่หน้าต่างโปรโมชั่นปิด)    
                            break;    
                    }    
                    break;    

                case HIVEEngagementEventTypeCoupon:    
                    switch (engagementState) {    
                        case HIVEEngagementStateEventStart:    
                            // เริ่มต้นคำขอการใช้คูปอง    
                            break;    
                        case HIVEEngagementStateEnd:    
                            // เสร็จสิ้นคำขอการใช้คูปองและส่งการตอบกลับ    
                            break;    
                    }    
                    break;    

                case HIVEEngagementEventTypeOfferwallView:    
                    switch (engagementState) {    
                        case HIVEEngagementStateEventStart:    
                            // เริ่มต้นการขอแสดงหน้าเสนอ    
                            break;    
                        case HIVEEngagementStateEnd:    
                            // เสร็จสิ้นการแสดงหน้าเสนอ (ส่งหลังจากปิดหน้าต่างเสนอ)    
                            break;    
                    }    
                    break;    

                case HIVEEngagementEventTypeEvent:    
                    // ถ้าโฮสต์เป็นเกม ให้ส่งค่าผลลัพธ์ JSONObject    
                    if (param == nil) {    
                        return;    
                    }    
                    NSString * api = [param objectForKey: @ "api"];    
                    NSSString * param = [param objectForKey: @ "param"];    
                    // TODO: ดำเนินการตามคำขอที่ระบุตามค่า api และ param    
                    break;    

                case HIVEEngagementEventTypeIapPromote:    
                    switch (engagementState) {    
                        case HIVEEngagementStateEventStart:    
                            // แจ้งว่ามีข้อมูล IAP Promote หรือไม่    
                            break;    
                        case HIVEEngagementStateEventEnd:    
                            if (![result isSuccess]) {    
                                return;    
                            }    
                            // เนื่องจากมีข้อมูล IAP Promote, marketPid จะถูกส่งผ่าน API ตรวจสอบ Promote.    
                            [HIVEIAPV4 checkPromotePurchase: ^ (HIVEResultAPI * promoteResult, NSString * marketPid) {    
                                if (![promoteResult isSuccess]) {    
                                    return;    
                                }    
                                // TODO: ขอซื้อสินค้าด้วย market Pid ที่ได้รับ    
                                [HIVEIAPV4 purchase: marketPid additionalInfo: nil handler: ^ (HIVEResultAPI * purchaseResult, HIVEIAPV4Receipt * receipt) {    
                                    if (![purchaseResult isSuccess]) {    
                                        return;    
                                    }    
                                    // TODO: ขอการตรวจสอบใบเสร็จด้วยใบเสร็จที่ได้รับ    
                                }];    
                            }];    
                            break;    
                        }    
                    break;    
                case HIVEEngagementEventTypeIapUpdated:    
                    switch (engagementState) {    
                    case HIVEEngagementStateEventStart:    
                        // สัญญาณเพื่อรับข้อมูลเนื่องจากรายละเอียดการซื้อมีการเปลี่ยนแปลง    
                        break;    
                    case HIVEEngagementStateEventEnd:    
                        // สัญญาณเพื่อรับข้อมูลเนื่องจากรายละเอียดการซื้อมีการเปลี่ยนแปลง    
                        NSString * type = [param objectForKey: @ "type"];    
                        if (type != nil && [type isEqualToString: @ "subscription"]) {    
                            // TODO: คืนค่าผลิตภัณฑ์การสมัครสมาชิก    
                            [HIVEIAPV4 restoreSubscription: ^ (HIVEResultAPI * result, NSArray < HIVEIAPV4Receipt * > * receiptList) {    
                                // TODO: ขอการตรวจสอบใบเสร็จด้วย receiptList ที่ได้รับ    
                            }];    
                            return;    
                        }    
                        // TODO: คืนค่าของที่ใช้ได้    
                        [HIVEIAPV4 restore: ^ (HIVEResultAPI * result, NSArray < HIVEIAPV4Receipt * > * receiptList) {    
                            // TODO: ขอการตรวจสอบใบเสร็จด้วย receiptList ที่ได้รับ    
                        }];    
                        break;    
                    }    
                case HIVEEngagementEventTypeIapPurchase:    
                    switch (engagementState) {    
                    case HIVEEngagementStateEventStart:    
                        // แสดงป๊อปอัพสำหรับการซื้อสินค้าที่ได้รับผ่าน schema IAPPurchase.    
                        break;    
                    case HIVEEngagementStateEventEnd:    
                        // แจ้งว่าการซื้อสินค้าที่ร้องขอนั้นสำเร็จหรือไม่ผ่าน schema IAPPurchase.    
                        if(![result isSuccess]) {    
                            return;    
                        }    
                        HIVEIAPV4Receipt * receipt = [param objectForKey: @ "iapV4Receipt"];    
                        break;    
                    }    
                break;    
                case HIVEEngagementEventTypeSocialMyInquiry:    
                    switch (engagementState) {    
                    case HIVEEngagementStateEventStart:    
                        // เริ่มต้นคำขอการแสดงหน้าสอบถามของฉัน    
                        break;    
                    case HIVEEngagementStateEnd:    
                        // หน้าสอบถามของฉันได้ถูกแสดงแล้ว (ส่งหลังจากที่หน้าต่างสอบถามของฉันถูกปิด)    
                        break;    
                    }    
                break;    
                case HIVEEngagementEventTypeSocialProfile:    
                    switch (engagementState) {    
                    case HIVEEngagementStateEventStart:    
                        // เริ่มต้นคำขอการแสดงหน้าโปรไฟล์    
                        break;    

                    case HIVEEngagementStateEnd:    
                        // การเปิดเผยหน้าประวัติผู้ใช้เสร็จสิ้น (ส่งหลังจากปิดหน้าต่างประวัติผู้ใช้)    
                        break;    
                    }    
                break;    
                }    
}];

การตั้งค่าเพื่อจัดการเหตุการณ์การมีส่วนร่วมของผู้ใช้

SDK ของ Hive โดยทั่วไปสามารถประมวลผลคำขอที่เข้ามาได้หากการเข้าสู่ระบบเสร็จสมบูรณ์ อย่างไรก็ตาม ในกรณีของการดำเนินการครั้งแรก ฯลฯ แม้หลังจากการเข้าสู่ระบบ การชำระเงินชดเชย ฯลฯ อาจไม่สามารถทำได้หากอยู่ก่อนการสร้างฐานข้อมูลเซิร์ฟเวอร์เกม ดังนั้นคุณต้องแจ้ง Hive SDK เกี่ยวกับ ว่าการจัดการเหตุการณ์ UE เป็นไปได้หรือไม่ จากเกม..

  • การตั้งค่าเริ่มต้นสำหรับการจัดการเหตุการณ์คือ false
  • หากการจัดการเหตุการณ์ถูกตั้งค่าเป็น true เหตุการณ์ที่รออยู่จะถูกประมวลผลทันที และเหตุการณ์ถัดไปจะถูกประมวลผลทันที。
  • หากการจัดการเหตุการณ์ถูกตั้งค่าเป็น false เหตุการณ์ที่เข้ามาจะถูกจัดเก็บในคิวจนกว่าการตั้งค่าจะแปลงเป็น true
  • การตั้งค่าเป็น true ควรเรียกใช้ หลังจากการ เข้าสู่ระบบ และการตั้งค่าเป็น false ไม่มีข้อจำกัดในเวลาของการเรียกใช้。
  • (ด้วย Hive SDK v4.4.0 และเวอร์ชันที่ใหม่กว่า) เกมทั้งหมดที่ใช้ Hive SDK จะต้องดำเนินการ API นี้เพื่อให้รางวัล CPI。
  • หากผู้ใช้เข้ามาในแอปผ่านลิงก์เชิญหรือรหัส QR ที่สร้างโดย User Acquisition หรือผ่านหน้า offerwall ประวัติการเข้าชมและคำขอการจ่ายรางวัลจะถูกดำเนินการขึ้นอยู่กับสถานะที่เปลี่ยนแปลงโดยการเรียกใช้ API นี้。
  • คุณต้องเรียกใช้ API ณ จุดที่เกมสามารถทำฟังก์ชันของ UE ได้。
Note
  • ใช้ setAdditionalInfo() เมธอดในคลาส Promotion เพื่อส่งข้อมูลเกมของผู้ใช้ปัจจุบันก่อนที่จะเรียกใช้เมธอด setEngagementReady() ข้อมูลเกมที่ส่งโดยการใช้คูปองหรือการได้มาของผู้ใช้จะมีให้สำหรับสตูดิโอเกม
  • ขึ้นอยู่กับเวอร์ชันของ Hive SDK คลาสของเมธอด setEngagementReady() จะแตกต่างกัน

Hive SDK v4.5.0 และเวอร์ชันที่ใหม่กว่า

ใช้วิธี setEngagementReady() ในคลาส Promotion เพื่อตั้งค่า ว่าเหตุการณ์ UE สามารถประมวลผลได้หรือไม่ ตัวอย่างโค้ดต่อไปนี้เป็นการตั้งค่าเป็น true

API Reference: hive.Promotion.setEngagementReady

using hive;    
    Boolean isReady = true;    
    ResultAPI result = Promotion.setEngagementReady(isReady);    
    if (result.isSuccess()) {    
        // call successful    
}
#include "HivePromotion.h"

bool bIsReady = true;
TOptional<FHiveResultAPI> Result = FHivePromotion::SetEngagementReady(bIsReady);

if (Result.IsSet()) {
        FHiveResultAPI& ResultAPI = Result.GetValue();
        if (ResultAPI.IsSuccess()) {
                // API call success
        }
}

API Reference: Promotion::setEngagementReady

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    bool isReady = true;    
    ResultAPI result = Promotion::setEngagementReady(isReady);    
    if (result.isSuccess()) {    
        // call successful    
}

API Reference: Promotion.setEngagementReady

import com.hive.Promotion    
    import com.hive.ResultAPI    
    val isReady = true    
    val result = Promotion.setEngagementReady(isReady)    
    if (result.isSuccess) {    
         // call successful    
}

API Reference: com.hive.Promotion.setEngagementReady

import com.hive.Promotion;    
    import com.hive.ResultAPI;    
    boolean isReady = true;    
    ResultAPI result = Promotion.INSTANCE.setEngagementReady(isReady);    
    if (result.isSuccess()) {    
         // call successful    
}

API Reference: PromotionInterface .setEngagementReady

import HIVEService    
    let isReady = true    
    let result = PromotionInterface.setEngagementReady(isReady)    
    if (result.isSuccess()) {    
    // call successful    
}

API Reference: HIVEPromotion:setEngagementReady

#import <HIVEService/HIVEService-Swift.h>    
    BOOL isReady = YES;    
    HIVEResultAPI *result = [HIVEPromotion setEngagementReady: isReady];    
    if ([result isSuccess]) {    
        // call successful    
}

รหัสผลลัพธ์สำหรับคำขอแลกคูปอง

หากมีข้อผิดพลาดในรหัสโปรโมชั่นหรือปัญหาอื่น ๆ ขณะประมวลผลเหตุการณ์คูปอง โมดูล UE จะแสดงป๊อปอัปตามรหัสข้อผิดพลาดที่ Hive กำหนดเพื่อแจ้งให้ผู้ใช้ทราบถึงสถานการณ์

ค่าของโฮสต์ใน URL ของแผนคูปองจะเป็น hive เสมอ

รหัส คำอธิบาย รหัส คำอธิบาย
200 เข้าถึงพารามิเตอร์ที่ผิด 305 คูปองที่ไม่ซ้ำหมดอายุจำนวนที่มีอยู่
201 ส่งค่าแฮชที่ผิด 306 คูปองหมดอายุ
202 เกินขีดจำกัดการใช้งานสำหรับบัญชี 307 ข้อมูลที่จำเป็นในการแยกแยะผู้ใช้ใหม่/ผู้ใช้ที่มีอยู่หรือข้อผิดพลาดของระบบผู้ใช้ที่ใช้งานอยู่ขาดหายไป
203 จำนวนคูปองที่มีอยู่เกิน 308 ไม่ใช่เป้าหมายของเหตุการณ์นี้ สำหรับผู้ใช้ที่มีอยู่เท่านั้น
204 ไม่ตรงกับ AppID และคูปองที่ออก 309 ไม่ใช่เป้าหมายของเหตุการณ์นี้ สำหรับผู้ใช้ใหม่เท่านั้น
300 คูปองที่มีรหัสหลักที่ผิด 310 เหตุการณ์ใหม่/ที่มีอยู่โดยไม่ต้องลงทะเบียนในเกม
301 ไม่มีข้อมูลคูปองในโปรโมชั่นที่ได้รับ 400 ส่งรายการทั้งหมดล้มเหลว
302 ค้นหารหัสคูปองล้มเหลว 401 ส่งหลายรายการล้มเหลว
303 คูปองที่กำลังใช้งาน 500 ข้อผิดพลาดของฐานข้อมูล
304 คูปองที่ใช้แล้ว 501 ความล้มเหลวในการสื่อสาร