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

คำขอยืนยันวันเกิด

AuthV4.checkAgeGate จะแสดงป๊อปอัพให้ผู้ใช้สามารถป้อนข้อมูลวันเกิดได้ ผู้ใช้สามารถเลือกวันเกิดของตนเองจากรายการปี/เดือน/วันในป๊อปอัพ เมื่อผู้ใช้ป้อนข้อมูลเสร็จสิ้น AuthV4.checkAgeGate จะส่งค่านั้น (รูปแบบ yyyy-MM-dd) กลับมาผ่าน callback

Warning

Hive SDK ไม่ได้ตรวจสอบว่าข้อมูลวันเกิดที่ผู้ใช้ป้อนนั้นถูกต้องหรือไม่

Info

ภาษาที่แสดงในป๊อปอัพจะเปลี่ยนไปตามค่าภาษาที่ตั้งค่าใน Hive SDK นอกจากนี้ ลำดับของปี/เดือน/วันอาจเปลี่ยนแปลงตามค่าภาษาที่ตั้งค่า

ควบคุมการแสดงปุ่มยกเลิก

เมื่อเรียกใช้ AuthV4.checkAgeGate คุณสามารถกำหนดว่าจะแสดงปุ่มยกเลิกหรือไม่ตามการตั้งค่า useCloseButton หากเรียกใช้เมธอดด้วย useCloseButton=false ปุ่มยกเลิกจะไม่แสดง ในกรณีนี้ ผู้ใช้จะไม่สามารถปิดป๊อปอัพหรือไปยังหน้าจออื่นได้ก่อนที่จะเลือกวันเกิด

ตัวอย่างโค้ด

using hive;    

bool useCloseButton = true;     // or 'false'. (กำหนดการใช้ปุ่มยกเลิก)
AuthV4.checkAgeGate (useCloseButton, (ResultAPI result, string dateOfBirth) => {    
    if (!result.isSuccess()) {
        // ล้มเหลวหรือยกเลิก
        return;    
    }
    else {
        // สำเร็จ
        // dateOfBirth ส่งคืนข้อมูลวันเกิด (รูปแบบ yyyy-MM-dd)
    }   
});
#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
using namespace std;    
using namespace hive;    

bool useCloseButton = true;     // or 'false'. (กำหนดการใช้ปุ่มยกเลิก)
AuthV4::checkAgeGate (useCloseButton, [=](ResultAPI const & result, std::string dateOfBirth) {    
    if (!result.isSuccess()) {    
        // ล้มเหลวหรือยกเลิก
        return;   
    }    
    else {
        // สำเร็จ
        // dateOfBirth ส่งคืนข้อมูลวันเกิด (รูปแบบ yyyy-MM-dd)
    }  
});
import com.hive.AuthV4    
import com.hive.ResultAPI    

var useCloseButton = true;     // or 'false'. (กำหนดการใช้ปุ่มยกเลิก)   
AuthV4.checkAgeGate(useCloseButton, object : AuthV4.AuthV4AgeGateListener {    
    override fun onAuthV4AgeGate(result: ResultAPI, dateOfBirth: String?) {    
        if (!result.isSuccess) {    
            // ล้มเหลวหรือยกเลิก
            return    
        }    
        else {
            // สำเร็จ
            // dateOfBirth ส่งคืนข้อมูลวันเกิด (รูปแบบ yyyy-MM-dd)
        }   
    }    
})
import com.hive.AuthV4;    
import com.hive.ResultAPI;    


boolean useCloseButton = true;     // or 'false'. (กำหนดการใช้ปุ่มยกเลิก)           
AuthV4.INSTANCE.checkAgeGate(useCloseButton, (result, dateOfBirth) -> {    
    if (!result.isSuccess()) {    
        // ล้มเหลวหรือยกเลิก
        return;    
    }    
    else {
        // สำเร็จ
        // dateOfBirth ส่งคืนข้อมูลวันเกิด (รูปแบบ yyyy-MM-dd)
    }     
});
import HIVEService

var useCloseButton = true;     // or 'false'. (กำหนดการใช้ปุ่มยกเลิก)
AuthV4Interface.checkAgeGate(useCloseButton) { result, dateOfBirth    
    if !result.isSuccess() {    
        // ล้มเหลวหรือยกเลิก
        return;     
    }    
    else {
        // สำเร็จ
        // dateOfBirth ส่งคืนข้อมูลวันเกิด (รูปแบบ yyyy-MM-dd)
    }     
}
#import <HIVEService/HIVEService-Swift.h>    

BOOL useCloseButton = YES;   // or 'NO'. (กำหนดการใช้ปุ่มยกเลิก)
[HIVEAuthV4 checkAgeGate:useCloseButton handler: ^(HIVEResultAPI *result, NSString *dateOfBirth) {    
    if (!result.isSuccess()) {    
        // ล้มเหลวหรือยกเลิก
        return;  
    }    
    else {
        // สำเร็จ
        // dateOfBirth ส่งคืนข้อมูลวันเกิด (รูปแบบ yyyy-MM-dd)
    }    
}];

นำเข้ารายชื่อเพื่อน Facebook

getProviderFriendsList() วิธีการนี้ให้ PlayerID ของเพื่อน Facebook ของผู้ใช้ในเกมเดียวกัน ผู้ที่เล่นโดยไม่มีการซิงค์ Facebook จะไม่อยู่ในรายชื่อเพื่อน และผู้ที่ซิงค์ก่อนหน้านี้จะคืนค่า -1 เป็น PlayerID

Warning

Facebook ได้ปรับปรุงนโยบายที่อธิบายรายการการอนุญาตการเข้าถึงพื้นฐานสำหรับ Platform API ในเดือนพฤษภาคม 2018 เพื่อใช้ Facebook /user/friends API ตั้งแต่นี้ไป คุณต้องการการอนุญาต user_friends
ตรวจสอบแนวทางสำหรับการตรวจสอบแอป Facebook

API Reference: hive.AuthV4.getProviderFriendsList

using hive;    

    AuthV4.ProviderType providerType = AuthV4.ProviderType.FACEBOOK;    

    AuthV4.getProviderFriendsList (providerType, (ResultAPI result, AuthV4.ProviderType providerType, Dictionary<String, Int64> providerUserIdList) => {    
         if (!result.isSuccess()) {    
             return;    
         }    

         if (providerUserIdList != null) {    
             foreach (KeyValuePair<String, Int64> providerUserId in providerUserIdList ) {    
                 // providerUserId: providerUserId.Key    
                 // playerId: providerUserId.Value    
             }    
         }    
});
#include "HiveAuthV4.h"

EHiveProviderType TargetProviderType = EHiveProviderType::FACEBOOK;
FHiveAuthV4::GetProviderFriendsList(TargetProviderType,
                                                                        FHiveAuthV4OnGetProviderFriendsListDelegate::CreateLambda([this](const FHiveResultAPI& Result, const EHiveProviderType& ProviderType, const ProviderFriendsMap& ProviderUserIdList) {
        // (alias) using ProviderFriendsMap = TMap<FString, int64>;
        if (!Result.IsSuccess()) {
                return;
        }

        for (const auto& ProviderUserIdEntry : ProviderUserIdList) {
                // ProviderUserId: ProviderUserIdEntry.Key;
                // Player Id: ProviderUserIdEntry.Value;
        }

}));

API Reference: AuthV4::getProviderFriendsList

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    ProviderType providerType = ProviderType::FACEBOOK;    

    AuthV4::getProviderFriendsList (providerType, [=](ResultAPI const & result, ProviderType providerType, map<string,PlayerID> providerUserIdList) {    
         if (!result.isSuccess()) {    
             return;    
         }    

         if (providerUserIdList != null) {    
             for(auto i = providerUserIdList.begin() ; i != providerUserIdList.end(); i++)    
             {    
                 // providerUserId: ( i->first).c_str()    
                 // playerId: i->second    
             }    
         }    
});

API Reference: com.hive.AuthV4.getProviderFriendsList

import com.hive.AuthV4    
    import com.hive.ResultAPI    

    val providerType = AuthV4.ProviderType.FACEBOOK    

    AuthV4.getProviderFriendsList(providerType, object : AuthV4.AuthV4ProviderFriendsListener {    
         override fun onGetProviderFriendsList(result: ResultAPI, providerType: AuthV4.ProviderType, providerUserIdList: Map<String, Long>?) {    
             if (!result.isSuccess) {    
                 return    
             }    

             providerUserIdList?.forEach {    
                 // providerUserId: it.key    
                 // playerId: it.value    
             }    
         }    
})

API Reference: com.hive.AuthV4.getProviderFriendsList

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    

    AuthV4.ProviderType type = AuthV4.ProviderType.FACEBOOK;    

    AuthV4.INSTANCE.getProviderFriendsList(type, (result, providerType, providerUserIdList) -> {    
         if (!result.isSuccess()) {    
             return;    
         }    

         if (providerUserIdList != null) {    
             for (Map.Entry<String, Long> entry : providerUserIdList.entrySet()) {    
                 // providerUserId: entry.getKey();    
                 // playerId: entry.getValue();    
             }    
         }    
});

API Reference: AuthV4Interface.getProviderFriendsList

import HIVEService    

    AuthV4Interface.getProviderFriendsList(.Facebook) { result, retProviderType, providerUserIdList in    
         if !result.isSuccess() {    
             return    
         }    

         if let providerUserIdList = providerUserIdList {    
             for (key in providerUserIdList.keys) {    
                 // providerUserId: key    
                 // playerId: providerUserIdList[key]    
             }    
         }    
}

API Reference: HIVEAuthV4:getProviderFriendsList

#import <HIVEService/HIVEService-Swift.h>    

    [HIVEAuthV4 getProviderFriendsList: HIVEProviderTypeFACEBOOK handler: ^(HIVEResultAPI *result, HIVEProviderType retProviderType, NSDictionary<NSString *,NSNumber *> *providerUserIdList) {    
         if (!result.isSuccess()) {    
             return;    
         }    

         if (providerUserIdList != nil) {    
             for (NSString *key in providerUserIdList) {    
                 // providerUserId: key    
                 // playerId: [[providerUserIdList objectForKey:key] longlongValue];    
             }    
         }    
}];

ตอบสนองต่อ COPPA

พระราชบัญญัติคุ้มครองความเป็นส่วนตัวของเด็กทางออนไลน์ (COPPA) เป็นกฎหมายของสหรัฐอเมริกาที่มีจุดมุ่งหมายเพื่อปกป้องความเป็นส่วนตัวของเด็กที่มีอายุต่ำกว่า 13 ปีทางออนไลน์ เพื่อตอบสนองต่อ COPPA แพลตฟอร์ม Hive ได้ปล่อย Hive SDK v4.10.0 ซึ่งรวมถึง API getAgeGateU13() เพื่อสอบถามว่าผู้ใช้มีอายุต่ำกว่า 13 ปีหรือไม่ API จะส่งคืน true หากอายุของผู้เล่นต่ำกว่า 13 ปี

ตัวอย่างโค้ด

API Reference: AuthV4.getAgeGateU13

using hive;    

Boolean ageGateU13 = AuthV4.getAgeGateU13();
#include "HiveAuthV4.h"

bool bAgeGateU13 = FHiveAuthV4::GetAgeGateU13();

API Reference: AuthV4 ::getAgeGateU13

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

bool ageGateU13 = AuthV4::getAgeGateU13();

API Reference: AuthV4.getAgeGateU13

import com.hive.AuthV4    

val ageGateU13 = AuthV4.getAgeGateU13()

API Reference: AuthV4.INSTANCE.getAgeGateU13

import com.hive.AuthV4;    

boolean ageGateU13 = AuthV4.INSTANCE.getAgeGateU13();

API Reference: AuthV4Interface.getAgeGateU13

import HIVEService    

Bool ageGateU13 = AuthV4Interface.getAgeGateU13()

API Reference: HIVEAuthV4 getAgeGateU13

#import <HIVEService/HIVEService-Swift.h>    

BOOL ageGateU13 = [HIVEAuthV4 getAgeGateU13];

การเปลี่ยนแปลง

หาก ageGateU13() คืนค่า true จะมีการดำเนินการดังต่อไปนี้

  • iOS
    • ไม่แสดงป๊อปอัพคำขอข้อตกลงเมื่อเรียกใช้ AuthV4.setup() หรือ Auth.initialize().
    • Push API ยังไม่ได้รับการดำเนินการ.
  • Android
    • เกมเพิ่มเติม ปุ่มไม่แสดงเมื่อแสดงป๊อปอัพออก.
    • ไม่สามารถรับ Remote Push ได้ และ Push API ยังไม่ได้รับการดำเนินการ.

การตรวจสอบข้อตกลงบริการสำหรับผู้ใช้ที่อายุต่ำกว่า 16 ปีในประเทศที่มี GDPR ใช้บังคับ

เริ่มต้นจาก Hive SDK v4 24.2.0 คุณสามารถตรวจสอบได้ว่าผู้ใช้ที่อายุต่ำกว่า 16 ปีได้ตกลงตามข้อกำหนดในประเทศที่ได้รับผลกระทบจาก GDPR (กฎระเบียบการคุ้มครองข้อมูลทั่วไป) โดยใช้วิธีการ Configuration.getAgeGateU16Agree() หากค่าที่ส่งกลับเป็น true หมายความว่าผู้ใช้ที่อายุต่ำกว่า 16 ปีได้ตกลงตามข้อกำหนด; หากเป็น false หมายความว่าพวกเขาไม่ได้ตกลง เมื่อใช้ไลบรารีของบุคคลที่สาม หากคุณต้องการจำกัดฟีเจอร์ของแอปตามว่าผู้ใช้มีอายุต่ำกว่า 16 ปีหรือไม่ คุณสามารถใช้วิธีการ Configuration.getAgeGateU16Agree() ได้

using hive;

Boolean ageGateU16Agree = Configuration.getAgeGateU16Agree();
#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

bool ageGateU16Agree = Configuration::getAgeGateU16Agree();
import com.hive.Configuration

val ageGateU16Agree = Configuration.ageGateU16Agree()
import com.hive.Configuration;

boolean ageGateU16Agree = Configuration.INSTANCE.getAgeGateU16Agree();
import HIVEService

var ageGateU16Agree: Bool = ConfigurationInterface.getAgeGateU16Agree()
#import <HIVEService/HIVEService-Swift.h>

BOOL ageGateU16 = [HIVEConfiguration getAgeGateU16Agree];

เริ่มต้นจาก Hive SDK v4 24.3.0 หากแอปใช้เงื่อนไขการยืนยันความยินยอมจากผู้ปกครองทางกฎหมาย (legal guardian consent confirmation) คุณสามารถเรียกดูว่าผู้ใช้แอปได้รับความยินยอมจากผู้ปกครองทางกฎหมายหรือไม่โดยการเรียกใช้เมธอด Configuration.getLegalGuardianConsentAgree() หากค่าคือ true หมายความว่ามีการให้ความยินยอมแล้ว

using hive;    

Boolean legalGuardianConsentAgree = Configuration.getLegalGuardianConsentAgree();
#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
using namespace std;    
using namespace hive;    

bool ageGateU16Agree = Configuration::getLegalGuardianConsentAgree();
import com.hive.Configuration    

val legalGuardianConsentAgree = Configuration.legalGuardianConsentAgree()
import com.hive.Configuration;    

boolean legalGuardianConsentAgree = Configuration.INSTANCE.getLegalGuardianConsentAgree();
import HIVEService    

var legalGuardianConsentAgree: Bool = ConfigurationInterface.getLegalGuardianConsentAgree()
#import <HIVEService/HIVEService-Swift.h>    

BOOL legalGuardianConsentAgree = [HIVEConfiguration getLegalGuardianConsentAgree];

ขอสิทธิ์ OS ใหม่

รายการสิทธิ์การเข้าถึงที่จำเป็นสำหรับการเล่นเกมจะถูกจัดระเบียบในไฟล์ AndroidManifest.xml ลองส่งสิทธิ์บางอย่างเป็นรายการสตริงของ API ที่เกี่ยวข้องและใช้มัน คุณสามารถตรวจสอบได้ว่าผู้ใช้เลือกเข้าหรือเลือกออกจากสิทธิ์เฉพาะ หากสิทธิ์บางอย่างที่อันตรายถูกปฏิเสธ ให้แน่ใจว่าแสดงป๊อปอัพที่ขอเข้าถึง OS อีกครั้ง สิทธิ์อื่น ๆ จะถูกเลือกเข้าหรือเลือกออกโดยอัตโนมัติตามการตั้งค่าบนอุปกรณ์ของผู้ใช้ หากคุณพิมพ์สิทธิ์หรือคำที่ไม่ถูกต้อง ระบบจะถือว่าสิทธิ์ไม่ได้ประกาศในไฟล์ AndroidManifest.xml และไม่อนุญาตให้เข้าถึงสิทธิ์เหล่านั้น

Android 6.0 (API level 23) รองรับฟีเจอร์นี้ หากระบบปฏิบัติการเป็น iOS หรือ Android API level ต่ำกว่า 23 จะส่ง ResultAPI ว่าไม่รองรับ

Note

ฟีเจอร์นี้ใช้ได้เฉพาะบน Android เท่านั้น.

ตัวอย่างโค้ด

เอกสารอ้างอิง API: PlatformHelper .requestUserPermissions

String[] requestArray = {"android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.BLUETOOTH", "android.permission.READ_CONTACTS"};    
    List<String> requests = new List<String>(requestArray);    

    PlatformHelper.requestUserPermissions( requests, (ResultAPI result, String[] granted, String[] denied) => {    

         if (result.code == ResultAPI.Code.PlatformHelperOSNotSupported) {    
            //Android only    
         }    

         if (result.code == ResultAPI.Code.PlatformHelperOSVersionNotSupported) {    
             //Android OS version not supported.    
         }    

         if (granted != null && granted.Length > 0) {    
             foreach (String name in granted) {    
                 // List of permissions accepted among requests    
             }    
         }    

         if (denied != null && denied.Length > 0) {    
             foreach (String name denied) {    
                 // List of permissions denied among requests    
             }    
         }    
});
#include "HivePlatformHelper.h"

TArray<FString> Requests;
Requests.Add(TEXT("android.permission.WRITE_EXTERNAL_STORAGE"));
Requests.Add(TEXT("android.permission.READ_CONTACTS"));

FHivePlatformHelper::RequestUserPermissions(Requests, FHivePlatformHelperOnUserPermissionsDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TArray<FString>& GrantedRequests, const TArray<FString>& DeniedRequests) {

        switch(Result.Code) {
                case FHiveResultAPI::ECode::Success: {
                        if (GrantedRequests.Num() > 0) {
                                // รายการสิทธิ์ที่ได้รับการอนุมัติจากคำขอ
                        }
                        if (DeniedRequests.Num() > 0) {
                                // รายการสิทธิ์ที่ถูกปฏิเสธจากคำขอ
                        }
                }
                        break;
                case FHiveResultAPI::ECode::PlatformHelperOSVersionNotSupported:
                        // เวอร์ชันระบบปฏิบัติการ Android ไม่รองรับ
                        break;
                default:
                        // ข้อยกเว้นอื่น ๆ
                        break;
        }
}));

API Reference: PlatformHelper ::requestUserPermissions

string requestArray[] = {"android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.BLUETOOTH", "android.permission.READ_CONTACTS"};    
    vector<string> requests(begin(requestArray), end(requestArray));    

    PlatformHelper::requestUserPermissions(requests, [=](ResultAPI const & result, vector<string> const & granted, vector<string> const & denied) {    

         if (result.code == hive::ResultAPI::PlatformHelperOSNotSupported) {    
             //Android only    
         }    

         if (result.code == hive::ResultAPI::PlatformHelperOSVersionNotSupported) {    
             //Android OS version not supported.    
         }    

         if (!granted.empty()) {    
             for (string name : granted) {    
                 // List of permissions accepted among requests    
             }    
         }    

         if (!denied.empty()) {    
             for (string name : denied) {    
                 // List of permissions denied among requests    
             }    
         }    
});

API Reference: PlatformHelper.requestUserPermissions

import com.hive.PlatformHelper    
    import com.hive.ResultAPI    

    val requests = arrayListOf(    
         "android.permission.WRITE_EXTERNAL_STORAGE",    
         "android.permission.BLUETOOTH",    
         "android.permission.READ_CONTACTS"    
    )    

    PlatformHelper.requestUserPermissions(requests, object : PlatformHelper.RequestUserPermissionsListener {    
         override fun onRequestUserPermissions(result: ResultAPI, granted: List<String>, denied: List<String>) {    
             when (result.code) {    
                 ResultAPI.Code.Success -> {    
                     if (granted.isNotEmpty()) {    
                         // รายการของสิทธิ์ที่ได้รับการอนุมัติจากคำขอ    
                     }    
                     if (denied.isNotEmpty()) {    
                         // รายการของสิทธิ์ที่ถูกปฏิเสธจากคำขอ    
                     }    
                 }    
                 ResultAPI.Code.PlatformHelperOSVersionNotSupported -> {    
                     // เวอร์ชัน Android OS ไม่รองรับ    
                 }    
                 else -> {    
                     // สถานการณ์ข้อยกเว้นอื่น ๆ    
                 }    
             }    
         }    
})

API Reference: PlatformHelper .INSTANCE.requestUserPermissions

import com.hive.PlatformHelper;    
    import com.hive.ResultAPI;    

    List<String> requests = Arrays.asList(    
             "android.permission.WRITE_EXTERNAL_STORAGE",    
             "android.permission.BLUETOOTH",    
             "android.permission.READ_CONTACTS");    

    PlatformHelper.INSTANCE.requestUserPermissions(requests, (result, granted, denied) -> {    
         switch (result.getCode()) {    
             case Success:    
                 if (!granted.isEmpty()) {    
                     // รายการของสิทธิ์ที่ได้รับการอนุมัติจากคำขอ    
                 }    
                 if (!denied.isEmpty()) {    
                     // รายการของสิทธิ์ที่ถูกปฏิเสธจากคำขอ    
                 }    
                 break;    
             case PlatformHelperOSVersionNotSupported:    
                 // เวอร์ชันระบบปฏิบัติการ Android ไม่รองรับ    
                 break;    
             default:    
                 // สถานการณ์ข้อยกเว้นอื่น ๆ    
                 break;    
         }    
});

ใช้บริการจัดการอุปกรณ์

บริการจัดการอุปกรณ์ จะถูกดำเนินการโดยอัตโนมัติเมื่อเข้าสู่ระบบตามการตั้งค่าบน Hive Console หลังจากเข้าสู่ระบบ เกมจะเรียกใช้เมธอด showDeviceManagement() ของคลาส AuthV4 และแสดงรายการการจัดการอุปกรณ์ให้กับผู้ใช้
เมื่อการเข้าสู่ระบบถูกยกเลิกเนื่องจากความล้มเหลวในการตรวจสอบอุปกรณ์ เกมที่มีบริการจัดการอุปกรณ์ควรจัดการกับรหัส AuthV4NotRegisteredDevice ของ Result API เพื่อพยายามเข้าสู่ระบบแบบเงียบอีกครั้งหรือลงชื่อออก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ บริการจัดการอุปกรณ์ โปรดดูที่คู่มือการใช้งาน: บทนำสู่บริการจัดการอุปกรณ์.

API Reference: AuthV4.showDeviceManagement

using hive;    

    AuthV4.showDeviceManagement((ResultAPI result) => {    
         if (result.isSuccess()) {    
             // ปิดหลังจากแสดง UI การจัดการอุปกรณ์    
         }    
}
#include "HiveAuthV4.h"

FHiveAuthV4::ShowDeviceManagement(FHiveAuthV4OnShowDeviceManagementDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // ปิดหลังจากเปิดเผย UI การจัดการอุปกรณ์ 
        }
}));

API Reference: AuthV4 ::showDeviceManagement

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    AuthV4::showDeviceManagement([=](ResultAPI const & result) {    
         if (result.isSuccess()) {    
             // ปิดหลังจากแสดง UI การจัดการอุปกรณ์    
         }    
});

API Reference: AuthV4.showDeviceManagement

import com.hive.AuthV4    
    import com.hive.ResultAPI    

    AuthV4.showDeviceManagement(object : AuthV4.AuthV4ShowDeviceManagementListener {    
         override fun onAuthV4ShowDeviceManagement(result: ResultAPI) {    
             if (result.isSuccess) {    
                 // ปิดหลังจากแสดง UI การจัดการอุปกรณ์    
             }    
         }    
})

API Reference: AuthV4.INSTANCE .showDeviceManagement

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    

    AuthV4.INSTANCE.showDeviceManagement(result -> {    
         if (result.isSuccess()) {    
             // ปิดหลังจากแสดง UI การจัดการอุปกรณ์    
         }    
});

API Reference: AuthV4Interface .showDeviceManagement

import HIVEService    

    AuthV4Interface.showDeviceManagement() { result in    
         if result.isSuccess() {    
             // ปิดหลังจากแสดง UI การจัดการอุปกรณ์    
         }    
}

API Reference: HIVEAuthV4 showDeviceManagement

#import <HIVEService/HIVEService-Swift.h>    

    [HIVEAuthV4 showDeviceManagement: ^(HIVEResultAPI *result) {    
         if ([result isSuccess]) {    
             // ปิดหลังจากแสดง UI การจัดการอุปกรณ์    
         }    
}];

ความสำเร็จและกระดานผู้นำเกม Google Play

ในการทำให้เกมของคุณมีชื่อเสียงใน Google Play Games คุณต้องดำเนินการฟังก์ชันความสำเร็จและกระดานผู้นำของ Google Play Games

เมื่อผู้ใช้เข้าสู่ระบบด้วย Google Play จะเข้าสู่ระบบ Play Games Services (PGS) โดยอัตโนมัติและสามารถใช้งานความสำเร็จและกระดานผู้นำได้ สำหรับข้อมูลโดยละเอียดเกี่ยวกับฟีเจอร์ที่เกี่ยวข้อง โปรดดูที่ คู่มือ Google Play Games Services

Note

เมื่อใช้คลาส AuthV4Helper

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

เนื้อหานี้เป็นไปตามคู่มือ Google Play Games Services

ส่ง playerID

หากคุณต้องการขอ PlayerID จาก Google Play Games ให้ทำการ implement เมธอด getGooglePlayerId() ในคลาส ProviderGoogle โดยการ implement เมธอดนี้จะส่ง PlayerID พร้อมกับ AuthCode ซึ่งใช้ในการตรวจสอบคีย์เซสชัน

ต่อไปนี้คือตัวอย่างโค้ด

เอกสารอ้างอิง API: hive.ProviderGoogle.getGooglePlayerId

// Request the playerID from Google Play Games.
ProviderGoogle.getGooglePlyaerId((ResultAPI result, String googlePlayerId, String authCode)=>{
    if(result.isSuccess()){
        // Success in API call.
    }
});

เอกสารอ้างอิง API: ProviderGoogle::getGooglePlayerId

// ขอ playerID จาก Google Play Games
ProviderGoogle::getGooglePlayerId([=](ResultAPI const &result, std::string const &googlePlayerId, std::string const &authCode) {
    if (result.isSuccess())
    {
        // สำเร็จในการเรียก API
    }
});
#include "HiveProviderGoogle.h"

FHiveProviderGoogle::GetGooglePlayerId(FHiveProviderGoogleOnGooglePlayerIdDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FString& GooglePlayerId, const FString& AuthCode) {
        if (Result.IsSuccess()) {
                // Success in API call.
        }
}));

เอกสารอ้างอิง API: com.hive.ProviderGoogle.getGooglePlayerId

// Request the playerID from Google Play Games.
ProviderGoogle.getGooglePlayerId(new ProviderGoogle.GooglePlayerIdListener() {
    @Override
    public void onPlayerIdResult(ResultAPI resultAPI, String googlePlayerId, String authCode) {
        if(resultAPI.isSuccess()){
            // Success in API call.
        }
    }
});

ความสำเร็จ

Implement ProviderGoogle class to use Achievement function of Google Play Games through Hive SDK.

คำขอในการเปิดเผยความสำเร็จที่ซ่อนอยู่

เพื่อเปิดเผยความสำเร็จที่ซ่อนอยู่ให้กับผู้เล่นที่ลงชื่อเข้าใช้ในขณะนี้ ให้เรียกใช้เมธอด achievementsReveal() ซึ่งจะไม่มีผลใด ๆ แต่จะเปิดเผย 0% ของความสำเร็จ ต่อไปนี้คือตัวอย่างโค้ด

API Reference: hive.ProviderGoogle.achievementsReveal

using hive;    
    //Achievement ID    
    String achievementId = "abcdef123456";    
    ProviderGoogle.achievementsReveal(achievementId, (ResultAPI result) => {    
      if (result.isSuccess()) {    
      // call successful    
      }    
});
#include "HiveProviderGoogle.h"

// รหัสความสำเร็จ 
FString AchievementId = TEXT("abcdef123456");
FHiveProviderGoogle::AchievementsReveal(AchievementId, FHiveProviderGoogleOnAchievementsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // การเรียก API สำเร็จ 
        }
}));

API Reference: ProviderGoogle::achievementsReveal

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    //Achievement ID    
    string achievementId = "abcdef123456";    
    ProviderGoogle::achievementsReveal(achievementId, [=](ResultAPI const & result) {    
       if(result.isSuccess()){    
          // call successful    
        }    
});

API Reference: ProviderGoogle.achievementsReveal

import com.hive.ProviderGoogle    
    import com.hive.ResultAPI    
    //Achievement ID    
    val achievementId = "abcdef123456"    
    ProviderGoogle.achievementsReveal(achievementId, object : ProviderGoogle.GoogleAchievementsListener {    
         override fun onAchievementsResult(resultAPI: ResultAPI) {    
             if (resultAPI.isSuccess) {    
                 // call successful    
             }    
         }    
})

API Reference: ProviderGoogle .INSTANCE.achievementsReveal

import com.hive.ProviderGoogle;    
    import com.hive.ResultAPI;    

    //รหัสความสำเร็จ    
    String achievementId = "abcdef123456";    

    ProviderGoogle.INSTANCE.achievementsReveal(achievementId, resultAPI -> {    
         if (resultAPI.isSuccess()) {    
             // call successful    
         }    
});

ขอปลดล็อกความสำเร็จ

ในการปลดล็อกความสำเร็จให้กับผู้เล่นที่ลงชื่อเข้าใช้ในปัจจุบัน ให้เรียกใช้วิธี achievementsUnlock() วิธีนี้จะทำเครื่องหมาย 100% ของความสำเร็จไม่ว่าจะอยู่ในสถานะใดก็ตาม; ซ่อนอยู่หรือไม่ก็ตาม ต่อไปนี้คือตัวอย่างโค้ด

API Reference: ProviderGoogle.achievementsUnlock

using hive;    
    //Achievement ID    
    String achievementId = "abcdef123456";    
    ProviderGoogle.achievementsUnlock(achievementId, (ResultAPI result) => {    
    if (result.isSuccess()) {    
    // call successful    
    }    
});

API Reference: ProviderGoogle::achievementsUnlock

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    //Achievement ID    
    string achievementId = "abcdef123456";    
    ProviderGoogle::achievementsUnlock(achievementId, [=](ResultAPI const & result) {    
    if(result.isSuccess()){    
           // call successful    
        }    
});

API Reference: ProviderGoogle.achievementsUnlock

import com.hive.ProviderGoogle    
    import com.hive.ResultAPI    
    //Achievement ID    
    val achievementId = "abcdef123456"    
    ProviderGoogle.achievementsUnlock(achievementId, object : ProviderGoogle.GoogleAchievementsListener {    
         override fun onAchievementsResult(resultAPI: ResultAPI) {    
             if (resultAPI.isSuccess) {    
                 // call successful    
             }    
         }    
})

API Reference: ProviderGoogle .INSTANCE.achievementsUnlock

import com.hive.ProviderGoogle;    
    import com.hive.ResultAPI;    

    //รหัสความสำเร็จ    
    String achievementId = "abcdef123456";    

    ProviderGoogle.INSTANCE.achievementsUnlock(achievementId, resultAPI -> {    
         if (resultAPI.isSuccess()) {    
             // call successful    
         }    
});

คำขอเพิ่มความสำเร็จ

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

ต่อไปนี้คือตัวอย่างโค้ด

เอกสาร API: hive.ProviderGoogle.achievementsIncrement

using hive;    
    //Achievement ID    
    String achievementId = "abcdef123456";    
    // Achievement numbers    
    int value = 1;    
    ProviderGoogle.achievementsIncrement(achievementId, value, (ResultAPI result) => {    
      if (result.isSuccess()){    
      // call successful    
      }    
});
#include "HiveProviderGoogle.h"

//รหัสความสำเร็จ 
FString AchievementId = TEXT("abcdef123456");
// จำนวนความสำเร็จ
int32 Value = 1;

FHiveProviderGoogle::AchievementsIncrement(AchievementId, Value, FHiveProviderGoogleOnAchievementsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // call successful
        }
}));

API Reference: ProviderGoogle::achievementsIncrement

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    //Achievement ID    
    string achievementId = "abcdef123456";    
    // Achievement numbers    
    int value = 1;    
    ProviderGoogle::achievementsIncrement(achievementId, value, [=](ResultAPI const & result) {    
      if(result.isSuccess()){    
      // call successful    
      }    
});

API Reference: ProviderGoogle.achievementsIncrement

import com.hive.ProviderGoogle    
    import com.hive.ResultAPI    
    //Achievement ID    
    val achievementId = "abcdef123456"    
    // Achievement numbers    
    val value = 1    
    ProviderGoogle.achievementsIncrement(achievementId, value, object : ProviderGoogle.GoogleAchievementsListener {    
         override fun onAchievementsResult(resultAPI: ResultAPI) {    
             if (resultAPI.isSuccess) {    
                 // call successful    
             }    
         }    
})

API Reference: ProviderGoogle .INSTANCE.achievementsIncrement

import com.hive.ProviderGoogle;    
    import com.hive.ResultAPI;    

    //รหัสความสำเร็จ    
    String achievementId = "abcdef123456";    

    // Achievement numbers    
    int value = 1;    

    ProviderGoogle.INSTANCE.achievementsIncrement(achievementId, value, resultAPI -> {    
         if (resultAPI.isSuccess()) {    
             // call successful    
         }    
});

ขอให้แสดงรายการความสำเร็จ (Helper)

Note

SDK 4.7.0 ให้ Helper ซึ่งช่วยเปรียบเทียบบัญชีที่ลงชื่อเข้าใช้ในอุปกรณ์ของผู้ใช้และบัญชีที่ซิงค์ PlayerID ได้อย่างง่ายดาย หากสองบัญชีไม่เหมือนกัน โปรดดูที่หน้า IdP Sync เพื่อจัดการกับสถานการณ์นี้.

เรียกใช้เมธอด showAchievements() เพื่อขอรายการความสำเร็จจาก Google Play Games.

ต่อไปนี้คือตัวอย่างโค้ด

API Reference: AuthV4.Helper.showAchievements

using hive;    
    AuthV4.Helper.showAchievements ((ResultAPI result, AuthV4.PlayerInfo playerInfo) => {    
      switch (result.code) {    
        case ResultAPI.Code.Success:    
          // ส่งความสำเร็จพร้อมการระบุความสำเร็จ    
          break;    
        case ResultAPI.Code.AuthV4ConflictPlayer:    
          // ความขัดแย้งของบัญชี    
          break;    
        case ResultAPI.Code.AuthV4GoogleLogout:    
          //TODO:    
          // หลังจากออกจาก Google Play ให้ออกจากเกม    
          // การเปิดเกมใหม่ต้องได้รับการจัดการโดยสตูดิโอพัฒนา    
          break;    
        default:    
          // สถานการณ์ข้อยกเว้นอื่นๆ    
          break;    
      }    
});
#include "HiveAuthV4.h"

FHiveAuthV4::Helper::ShowAchievements(FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
        switch (Result.Code) {
                case FHiveResultAPI::ECode::Success:
                        // ส่งมอบความสำเร็จพร้อมกับการระบุความสำเร็จ
                        break;
                case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
                        // ขัดแย้งบัญชี
                        break;
                case FHiveResultAPI::ECode::AuthV4GoogleLogout:
                        // TODO:
                        // หลังจากออกจากระบบ Google Play ให้ออกจากเกม
                        // การเปิดเกมใหม่ต้องจัดการโดยสตูดิโอพัฒนา
                        break;
                default:
                        // สถานการณ์ข้อยกเว้นอื่น ๆ
                        break;
        }
}));

API Reference: AuthV4 ::Helper::showAchievements

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    AuthV4::Helper::showAchievements([=](ResultAPI const & result, shared_ptr playerInfo) {    
      switch (result.code) {    
        case ResultAPI::Success:    
          // Deliver Success with achievement indication    
          break;    
        case ResultAPI::AuthV4ConflictPlayer:    
          // account conflict    
          break;    
        case ResultAPI::AuthV4GoogleLogout:    
          //TODO:    
          // After logging out of Google Play, log out of the game    
          // Relaunching the game must be handled by the development studio    
          break;    
        default:    
          // other exception situations    
          break;    
      }    
});

API Reference: AuthV4.Helper.showAchievements

import com.hive.AuthV4    
    import com.hive.ResultAPI    
    AuthV4.Helper.showAchievements(object : AuthV4.Helper.AuthV4HelperListener {    
         override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {    
             when (result.code) {    
                 ResultAPI.Code.Success -> {    
                     // ส่งมอบความสำเร็จพร้อมการระบุความสำเร็จ    
                 }    
                 ResultAPI.Code.AuthV4ConflictPlayer -> {    
                     // ความขัดแย้งของบัญชี    
                 }    
                 ResultAPI.Code.AuthV4GoogleLogout -> {    
                     //TODO:    
                     // หลังจากออกจาก Google Play ให้ออกจากเกม    
                     // การเปิดเกมใหม่ต้องได้รับการจัดการโดยสตูดิโอพัฒนา    
                 }    
                 else -> {    
                     // สถานการณ์ข้อยกเว้นอื่น ๆ    
                 }    
             }    
         }    
})

API Reference: AuthV4.Helper.INSTANCE.showAchievements

import com.hive.AuthV4;    
    import com.hive.ResultAPI;    

    AuthV4.Helper.INSTANCE.showAchievements((result, playerInfo) -> {    
         switch (result.getCode()) {    
             case Success:    
                 // ส่งมอบความสำเร็จพร้อมการระบุ    
                 break;    
             case AuthV4ConflictPlayer:    
                 // ข้อขัดแย้งของบัญชี    
                 break;    
             case AuthV4GoogleLogout:    
                 //TODO:    
                 // หลังจากออกจาก Google Play ให้ออกจากเกม    
                 // การเริ่มเกมใหม่ต้องได้รับการจัดการโดยสตูดิโอพัฒนา    
                 break;    
             default:    
                 // สถานการณ์ข้อยกเว้นอื่น ๆ    
                 break;    
         }    
});
Warning

หากผู้ใช้ลงชื่อออกจากหน้าจอการตั้งค่าของ Play Games Services บัญชีผู้เล่นจะถูกลงชื่อออกและรหัสข้อผิดพลาดที่ชื่อว่า ResultAPI.Code.AuthV4GoogleLogout จะถูกส่งเป็น callback เมื่อการลงชื่อออกเสร็จสิ้น จะมีป๊อปอัพการออกจากระบบแสดงขึ้นและการแสดงผลจะเปลี่ยนเป็นชื่อเกม。


คำขอเพื่อแสดงรายการความสำเร็จ (Auth v4)

เรียกใช้เมธอด showAchievements() เพื่อขอรายการความสำเร็จจาก Google Play Games.

ต่อไปนี้คือตัวอย่างโค้ด

API Reference: ProviderGoogle .showAchievements

using hive;    
    ProviderGoogle.showAchievements((ResultAPI result) => {    
      switch (result.code) {    
        case ResultAPI.Code.Success:    
          // Deliver Success with achievement indication    
          break;    
        case ResultAPI.Code.AuthV4GoogleLogout:    
          //TODO:    
          // After logging out of Google Play, log out of the game    
          // Relaunching the game must be handled by the development studio    
          break;    
        default:    
          // other exception situations    
          break;    
      }    
});
#include "HiveProviderGoogle.h"

FHiveProviderGoogle::ShowAchievements(FHiveProviderGoogleOnLeaderboardsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
                case FHiveResultAPI::ECode::Success:
                        // แสดงความสำเร็จพร้อมกับการส่ง Success
                        break;
                case FHiveResultAPI::ECode::AuthV4GoogleLogout:
                        // TODO:
                        // ทำการออกจากเกมหลังจากออกจาก Google Play
                        // การเริ่มเกมใหม่จะต้องจัดการโดยสตูดิโอพัฒนา
                        break;
                default:
                        // สถานการณ์ข้อยกเว้นอื่นๆ
                        break;
}));

API Reference: ProviderGoogle ::showAchievements

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    ProviderGoogle::showAchievements([=](ResultAPI const & result) {    
      switch (result.code) {    
        case ResultAPI::Success:    
          // Deliver Success with achievement indication    
          break;    
        case ResultAPI::AuthV4GoogleLogout:    
          //TODO:    
          // After logging out of Google Play, log out of the game    
          // Relaunching the game must be handled by the development studio    
          break;    
        default:    
          // other exception situations    
          break;    
      }    
});

API Reference: ProviderGoogle.showAchievements

import com.hive.ProviderGoogle    
    import com.hive.ResultAPI    
    ProviderGoogle.showAchievements(object : ProviderGoogle.GoogleAchievementsListener {    
         override fun onAchievementsResult(resultAPI: ResultAPI) {    
             when(resultAPI.code) {    
                 ResultAPI.Code.Success -> {    
                     // Deliver Success with achievement indication    
                 }    
                 ResultAPI.Code.AuthV4GoogleLogout -> {    
                     //TODO:    
                     // After logging out of Google Play, log out of the game    
                     // Relaunching the game must be handled by the development studio    
                 }    
                 else -> {    
                     // other exception situations    
                 }    
             }    
         }    
})

API Reference: ProviderGoogle.INSTANCE.showAchievements

import com.hive.ProviderGoogle;    
    import com.hive.ResultAPI;    

    ProviderGoogle.INSTANCE.showAchievements(resultAPI -> {    
         switch (resultAPI.getCode()) {    
             case Success:    
                 // Deliver Success with achievement indication    
                 break;    
             case AuthV4GoogleLogout:    
                 //TODO:    
                 // After logging out of Google Play, log out of the game    
                 // Relaunching the game must be handled by the development studio    
                 break;    
             default:    
                 // other exception situations    
                 break;    
         }    
});
Warning

หากผู้ใช้ลงชื่อออกจากหน้าการตั้งค่าของ Play Games Services จะมีรหัสข้อผิดพลาดชื่อ ResultAPI.Code.AuthV4GoogleLogout ถูกส่งเป็นการเรียกกลับ เมื่อส่งข้อผิดพลาดนี้แล้ว ให้แน่ใจว่าได้เขียนโค้ดเหมือนกับกระบวนการเมื่อปุ่มลงชื่อออกในเกมถูกแตะ

กระดานผู้นำ

Implement ProviderGoogle class to use Leaderboard function of Google Play Games through Hive SDK.

การอัปเดตคะแนนกระดานผู้นำ

เรียกใช้วิธี leaderboardsSubmitScore() เพื่อขอการอัปเดตคะแนนกระดานผู้นำของ Google Play Games.

ต่อไปนี้คือตัวอย่างโค้ด

API Reference: hive.ProviderGoogle.leaderboardsSubmitScore

using hive    

    // รหัสกระดานผู้นำ    
    String leaderboardId = "12345abcde";    

    // หมายเลขคะแนนในกระดานผู้นำ    
    long score = 100;    
    ProviderGoogle.leaderboardsSubmitScore(leaderboardId, score, (ResultAPI result) => {    
      if (result.isSuccess()) {    
      // การเรียก API สำเร็จ    
      }    
});
#include "HiveProviderGoogle.h"

// รหัสกระดานผู้นำ
FString LeaderboardId = TEXT("12345abcde");

// Leaderboard score number
int64 Score = 100;

FHiveProviderGoogle::LeaderboardsSubmitScore(LeaderboardId, Score, FHiveProviderGoogleOnLeaderboardsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // API call successful 
        }
}));

API Reference: ProviderGoogle::leaderboardsSubmitScore

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    // Leaderboard ID    
    string leaderboardId = "12345abcde";    

    // หมายเลขคะแนนในตารางคะแนน    
    long score = 100;    

    ProviderGoogle::leaderboardsSubmitScore(leaderboardId, score, [=](ResultAPI const & result) {    
       if (result.isSuccess()) {    
          // API call successful    
        }    
});

API Reference: ProviderGoogle.leaderboardsSubmitScore

import com.hive.ProviderGoogle    
    import com.hive.ResultAPI    
    // Leaderboard ID    
    val leaderboardId = "12345abcde"    
    // Leaderboard score number    
    val score = 100L    
    ProviderGoogle.leaderboardsSubmitScore(leaderboardId, score, object : ProviderGoogle.GoogleLeaderboardsListener {    
         override fun onLeaderboardsResult(resultAPI: ResultAPI) {    
             if (resultAPI.isSuccess) {    
                 // API call successful    
             }    
         }    
})

API Reference: com.hive.ProviderGoogle.leaderboardsSubmitScore

import com.hive.ProviderGoogle;    
    import com.hive.ResultAPI;    

    // รหัสกระดานผู้นำ    
    String leaderboardId = "12345abcde";    

    // หมายเลขคะแนนในกระดานผู้นำ    
    long score = 100;    

    ProviderGoogle.INSTANCE.leaderboardsSubmitScore(leaderboardId, score, resultAPI -> {    
         if (resultAPI.isSuccess()) {    
             // API call successful    
         }    
});

ขอให้แสดงรายการอันดับ (Helper)

เรียกใช้เมธอด showLeaderboards() เพื่อขอรายการลีดเดอร์บอร์ดของ Google Play Games.
ต่อไปนี้คือตัวอย่างโค้ด.

API Reference: hive.AuthV4.Helper.showLeaderboard

using hive;    
    AuthV4.Helper.showLeaderboard ((ResultAPI result, AuthV4.PlayerInfo playerInfo) => {    
       switch (result.code) {    
         case ResultAPI.Code.Success:    
           // Deliver Success with leaderboard display    
           break;    
         case ResultAPI.Code.AuthV4ConflictPlayer:    
           // account conflict    
           break;    
         case ResultAPI.CodeAuthV4GoogleLogout:    
    //TODO:    
           // After logging out of Google Play, log out of the game    
           // Relaunching the game must be handled by the development studio    
           break;    
         default:    
           // other exception situations    
           break;    
       }    
});
#include "HiveAuthV4.h"

FHiveAuthV4::Helper::ShowLeaderboard(FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
                case FHiveResultAPI::ECode::Success:
                        // ส่งมอบความสำเร็จพร้อมการแสดงกระดานคะแนน
                        break;
                case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
                        // ข้อขัดแย้งของบัญชี
                        break;
                case FHiveResultAPI::ECode::AuthV4GoogleLogout:
                        // TODO:
                        // หลังจากออกจาก Google Play ให้ลงชื่อออกจากเกม    
          // การเปิดเกมใหม่ต้องได้รับการจัดการโดยสตูดิโอพัฒนา
                        break;
                default:
                        // สถานการณ์ข้อยกเว้นอื่น ๆ
                        break;
}));

API Reference: com.hive.AuthV4.Helper.showLeaderboard

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    AuthV4::Helper::showLeaderboard([=](ResultAPI const & result, shared_ptr playerInfo) {    
    switch (result.code) {    
           case ResultAPI::Success:    
             // Deliver Success with leaderboard display    
             break;    
           case ResultAPI::AuthV4ConflictPlayer:    
             // account conflict    
             break;    
           case ResultAPI::AuthV4GoogleLogout:    
    //TODO:    
             // After logging out of Google Play, log out of the game    
             // Relaunching the game must be handled by the development studio    
             break;    
           default:    
             break;    
         }    
});

API Reference: Helper.showLeaderboard

import com.hive.AuthV4    
    import com.hive.ResultAPI    
    AuthV4.Helper.showLeaderboard(object : AuthV4.Helper.AuthV4HelperListener {    
         override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {    
             when (result.code) {    
                 ResultAPI.Code.Success -> {    
                     // ส่งมอบความสำเร็จพร้อมการแสดงกระดานคะแนน    
                 }    
                 ResultAPI.Code.AuthV4ConflictPlayer -> {    
                     // ความขัดแย้งของบัญชี    
                 }    
                 ResultAPI.Code.AuthV4GoogleLogout -> {    
                     //TODO:    
                     // หลังจากออกจาก Google Play ให้ลงชื่อออกจากเกม    
                     // การเปิดเกมใหม่ต้องได้รับการจัดการโดยสตูดิโอพัฒนา    
                 }    
                 else -> {    
    // สถานการณ์ข้อยกเว้นอื่น ๆ    
    }    
             }    
         }    
})

API Reference: AuthV4.Helper.INSTANCE.showLeaderboard

import com.hive.AuthV4;
import com.hive.ResultAPI;

AuthV4.Helper.INSTANCE.showLeaderboard((result, playerInfo) -> {
    switch (result.getCode()) {
        case Success:
            // Deliver Success with leaderboard display
            break;
        case AuthV4ConflictPlayer:
            // account conflict
            break;
        case AuthV4GoogleLogout:
            //TODO:
            // After logging out of Google Play, log out of the game
            // Relaunching the game must be handled by the development studio
            break;
        default:
            // other exception situations
            break;
    }
});
Warning

หากผู้ใช้ลงชื่อออกจากหน้าจอการตั้งค่าของ Play Games Services บัญชีผู้เล่นจะถูกลงชื่อออกและรหัสข้อผิดพลาดที่ชื่อว่า ResultAPI.Code.AuthV4GoogleLogout จะถูกส่งเป็นการเรียกกลับ เมื่อการลงชื่อออกเสร็จสิ้น ป๊อปอัปการออกจากระบบจะแสดงขึ้นและการแสดงผลจะเปลี่ยนเป็นชื่อเกม


คำขอเพื่อแสดงรายการอันดับ (Auth v4)

เรียกใช้วิธีการ showLeaderboards() เพื่อขอรายการอันดับของ Google Play Games.

ต่อไปนี้คือตัวอย่างโค้ด

เอกสารอ้างอิง API: hive.ProviderGoogle.showLeaderboards

using hive;    

    ProviderGoogle.showLeaderboards(onLeaderboardsResult, (ResultAPI result) => {    
    switch (result.code) {    
         case ResultAPI.Code.Success:    
           // Deliver Success with leaderboard display    
           break;    
         case ResultAPI.CodeAuthV4GoogleLogout:    
           //TODO:    
           // After logging out of Google Play, log out of the game    
           // Relaunching the game must be handled by the development studio    
           break;    
         default:    
           // other exception situations    
           break;    
       }    
});
#include "HiveProviderGoogle.h"

FHiveProviderGoogle::ShowLeaderboard(FHiveProviderGoogleOnLeaderboardsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
                    case FHiveResultAPI::ECode::Success:
                        // Deliver Success with leaderboard display 
                        break;
                case FHiveResultAPI::ECode::AuthV4GoogleLogout:
                        // TODO:
                        // หลังจากออกจาก Google Play ให้ทำการออกจากเกม    
          // การเปิดเกมใหม่ต้องได้รับการจัดการโดยสตูดิโอพัฒนา 
                        break;
                default:
                        // สถานการณ์ข้อยกเว้นอื่น ๆ 
                        break; 
}));

API Reference: ProviderGoogle::showLeaderboards

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    ProviderGoogle::showLeaderboard([=](ResultAPI const & result) {    
    switch (result.code) {    
           case ResultAPI::Success:    
             // Deliver Success with leaderboard display    
             break;    
           case ResultAPI::AuthV4GoogleLogout:    
             //TODO:    
             // After logging out of Google Play, log out of the game    
             // Relaunching the game must be handled by the development studio    
             break;    
           default:    
    // other exception situations    
             break;    
         }    
});

API Reference: ProviderGoogle.showLeaderboards

import com.hive.ProviderGoogle    
    import com.hive.ResultAPI    
    ProviderGoogle.showLeaderboards(object : ProviderGoogle.GoogleLeaderboardsListener {    
         override fun onLeaderboardsResult(resultAPI: ResultAPI) {    
             when(resultAPI.code) {    
                 ResultAPI.Code.Success -> {    
                     // Deliver Success with leaderboard display    
                 }    
                 ResultAPI.Code.AuthV4GoogleLogout -> {    
                     //TODO:    
                     // After logging out of Google Play, log out of the game    
                     // Relaunching the game must be handled by the development studio    
                 }    
                 else -> {    
    // other exception situations    
    }    
             }    
         }    
})

API Reference: com.hive.ProviderGoogle.showLeaderboards

import com.hive.ProviderGoogle;    
    import com.hive.ResultAPI;    

    ProviderGoogle.INSTANCE.showLeaderboards(resultAPI -> {    
         switch (resultAPI.getCode()) {    
             case Success:    
                 // Deliver Success with leaderboard display    
                 break;    
             case AuthV4GoogleLogout:    
                 //TODO:    
                 // After logging out of Google Play, log out of the game    
                 // Relaunching the game must be handled by the development studio    
                 break;    
             default:    
                  // other exception situations    
                 break;    
         }    
});
Warning

หากผู้ใช้ลงชื่อออกจากหน้าจอการตั้งค่าของ Play Games Services จะมีรหัสข้อผิดพลาดชื่อ ResultAPI.Code.AuthV4GoogleLogout ถูกส่งเป็นการเรียกกลับ เมื่อส่งข้อผิดพลาดนี้แล้ว ให้แน่ใจว่าได้เขียนโค้ดเหมือนกับกระบวนการเมื่อปุ่มลงชื่อออกในเกมถูกแตะ

สถิติเกม Google Play Games{ #google-play-game-stats }

หากคุณกำลังพัฒนาเพื่อวัตถุประสงค์ในการเข้าร่วมโปรแกรม Google Level Up คุณต้องใช้ฟังก์ชันสถิติเกมของ Google Play Games

สถิติเกมของ Google Play Games เป็นคุณลักษณะที่รวบรวมประวัติการเล่นของผู้ใช้เป็นกิจกรรม และแสดงเป็นสถิติในโปรไฟล์ของเกมเมอร์ แอปของคุณจะกำหนดสถิติของตัวเอง และกำหนดวิธีการนับ เช่น ผลรวมหรือคะแนนสูงสุดใน Google Play Console

หากต้องการใช้คุณสมบัติสถิติเกมโดยใช้แพลตฟอร์ม Hive คุณสามารถใช้คลาสAuthV4.Helperสำหรับคำอธิบายโดยละเอียดเกี่ยวกับคุณสมบัติที่เกี่ยวข้อง โปรดดู สถิติเกมของ Google Play Games

รองรับสถิติเกมตั้งแต่ Hive SDK 26.7.0 Android เท่านั้น ไม่รองรับ iOS หากต้องการใช้สถิติของเกม ต้องใช้ Android minSdk 24 ขึ้นไป

Caution

สถิติของเกมขึ้นอยู่กับการตรวจสอบสิทธิ์ของ [บริการเกมของ Play] (#google-play-games) และไม่ขึ้นอยู่กับว่าบัญชี Hive ของคุณเชื่อมโยงอยู่หรือไม่ หากผู้ใช้ไม่ได้ลงชื่อเข้าใช้ด้วย Google Play หรือปฏิเสธ การลงชื่อเข้าใช้โดยนัย จะไม่มีการรวบรวมสถิติแม้ว่า API จะส่งคืนความสำเร็จก็ตาม

การเตรียมการ{ #game-stats-prepare }

หากต้องการใช้สถิติของเกม คุณต้องสร้างกิจกรรมและตั้งค่าสถิติใน Google Play Console การสร้างกิจกรรมจะประกาศว่าบันทึกการเล่นใดที่แอปจะส่ง และการตั้งค่าสถิติจะกำหนดว่าสถิติใดที่บันทึกที่รวบรวมจะแสดงในโปรไฟล์เกมเมอร์

สร้างกิจกรรม

หากต้องการสร้างกิจกรรมสำหรับเกมใหม่ที่ยังไม่ได้เผยแพร่ คุณต้องสร้างไฟล์ CSV สำหรับกิจกรรมPlayerGameEvent.csv

หากต้องการคำอธิบายโดยละเอียดเพิ่มเติม โปรดดู หลักเกณฑ์เกี่ยวกับไฟล์ CSV สำหรับกิจกรรม

PlayerGameEvent.csvประกาศชื่อเหตุการณ์และคุณสมบัติที่แอปจะส่ง ประเภทคุณสมบัติมี 4 ประเภท ได้แก่ STRING, INT64, DOUBLE และ BOOL

progressUpdateคือเหตุการณ์ที่สงวนไว้ซึ่ง Google Play Games กำหนดไว้ล่วงหน้าสำหรับความคืบหน้าโดยเฉพาะ และใช้เฉพาะ currentProgress เป็นคุณสมบัติ

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

การตั้งค่าสถิติ

หากต้องการตั้งค่าสถิติ คุณต้องอัปโหลดไฟล์ ZIP สำหรับสถิติที่มี RepetitiveStatsConfig.csv และ ProgressionStatConfig.csv ไฟล์ StatLocalizations.csv เป็นไฟล์ทางเลือกสำหรับแปลชื่อและคำอธิบายสถิติที่จะแสดงบนหน้าจอผู้ใช้เป็นหลายภาษา

ไฟล์ RepetitiveStatsConfig.csv กำหนดรายการสถิติแบบทำซ้ำสำหรับรวมการกระทำที่ผู้ใช้ทำซ้ำๆ สถิติแบบทำซ้ำรองรับวิธีรวมข้อมูล SUM, MAX, MIN และ COUNT และสามารถใช้ตัวกรองตามค่าคุณสมบัติเฉพาะได้
ดูตัวอย่างการจัดไฟล์ได้ที่ การกำหนดสถิติแบบทำซ้ำ ด้านล่าง

ProgressionStatConfig.csvกำหนดสถิติความคืบหน้าที่แสดงว่าผู้ใช้มีความคืบหน้าในแอปมากเพียงใด คุณสามารถบันทึกสถิติความคืบหน้าได้โดยใช้ คำขอบันทึกความคืบหน้าของเกมใน Google Play Games
ดูตัวอย่างการจัดไฟล์ได้ที่ การกำหนดสถิติความคืบหน้า ด้านล่าง

รวมไฟล์ CSV และไอคอนสถิติที่สร้างไว้เป็นไฟล์ ZIP แล้วอัปโหลดไปยัง Google Play Console สำหรับข้อกำหนดของไอคอนที่จำเป็นสำหรับแต่ละสถิติและกฎการจัดไฟล์ ZIP โปรดดู หลักเกณฑ์เกี่ยวกับไฟล์ ZIP สำหรับสถิติ

ตัวอย่างการตั้งค่า

ตรวจสอบจากตัวอย่างด้านล่างว่าเหตุการณ์และสถิติที่สร้างในสองขั้นตอนก่อนหน้าจะแสดงในโปรไฟล์เกมเมอร์อย่างไร

ลำดับที่คุณสมบัติเหตุการณ์แสดงในโปรไฟล์เกมเมอร์ผ่านสถิติ

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

อธิบายโดยใช้เกมแนววิ่งแบบไม่มีที่สิ้นสุดเป็นตัวอย่าง เมื่อรอบที่ผู้เล่นเลือกตัวละครและเล่นสิ้นสุดลง ระบบจะรวมข้อมูลเซสชัน 4 รายการกับข้อมูลความคืบหน้าสะสม 1 รายการ เป็นสถิติรวม 5 รายการ แล้วส่งในเหตุการณ์ run_finished เดียว

  • สถิติผลลัพธ์รอบ (4 ประเภท): ตัวละครที่เลือก, ระยะทางที่เคลื่อนที่, จำนวนเหรียญที่ได้รับ, สถานะการทำสถิติใหม่
  • สถิติความคืบหน้าของบัญชี (1 ประเภท): Run Level ซึ่งแสดงสถานะความคืบหน้าสะสมทั้งหมดของแอป
การประกาศเหตุการณ์และคุณสมบัติ

ประกาศชื่อเหตุการณ์และคุณสมบัติที่จะส่งใน PlayerGameEvent.csv สามารถประกาศเหตุการณ์ได้สูงสุด 20 รายการ และแต่ละเหตุการณ์ประกาศคุณสมบัติได้สูงสุด 20 รายการ

PlayerGameEvent.csv
Event Name,Property Name,Property Type
progressUpdate,currentProgress,INT64
run_finished,runner_id,STRING
run_finished,is_new_record,BOOL
run_finished,coins_collected,INT64
run_finished,distance_meters,DOUBLE
การกำหนดสถิติแบบทำซ้ำ

กำหนดสถิติที่รวมการกระทำที่ผู้ใช้ทำซ้ำๆ ใน RepetitiveStatsConfig.csv ค่าในคอลัมน์ Stat Display Name จะเป็นชื่อสถิติที่แสดงในโปรไฟล์เกมเมอร์

RepetitiveStatsConfig.csv
Stat Id,Event Name,Event Property Name,Aggregation Type,Stat Display Name,Stat Description,Filter Property,Filter Operator,Filter Value,Is Competitive,Min limit,Max limit,Icon File Name,Good value direction,Unit
best_distance,run_finished,distance_meters,MAX,Best Run Distance,The farthest distance the player has run in a single run.,,,,true,0,100000,stat_best_distance.png,INCREASING,METER
total_coins,run_finished,coins_collected,SUM,Total Run Coins,Total number of coins the player has collected across all runs.,,,,false,,,stat_total_coins.png,INCREASING,
record_runs,run_finished,is_new_record,COUNT,New Record Runs,Number of runs in which the player set a new personal record.,is_new_record,=,TRUE,false,,,stat_record_runs.png,INCREASING,
runner_count,run_finished,runner_id,COUNT,Ninja Runs,Number of runs completed with the ninja character.,runner_id,=,runner_ninja,false,,,stat_runner_count.png,INCREASING,

Aggregation Type คือวิธีคำนวณข้อมูลให้เป็นค่าตัวแทนเดียวเมื่อเหตุการณ์เดียวกันเกิดสะสมซ้ำๆ และรองรับ SUM, MAX, MIN และ COUNT

  • ตัวอย่างการใช้งาน: ใช้ MAX กับระยะทางสูงสุด, SUM กับผลรวมเหรียญ และ COUNT กับจำนวนครั้งที่เกิด

ตัวกรองประกอบด้วย 3 คอลัมน์ ได้แก่ Filter Property, Filter Operator และ Filter Value และรวมเฉพาะเหตุการณ์ที่ตรงตามเงื่อนไขนั้นเป็นเป้าหมายการรวมข้อมูล เมื่อไม่ใช้ตัวกรอง ให้เว้นทั้ง 3 คอลัมน์ว่างไว้

  • ตัวอย่างการแยกสาขาจากเหตุการณ์เดียวกัน: แม้ record_runs และ runner_count จะถูกรวบรวมจากเหตุการณ์ run_finished เดียวกัน แต่หากเงื่อนไขตัวกรองที่ตั้งไว้ต่างกัน ระบบจะรวมเป็นรายการสถิติแยกกัน

Note

สถิติที่ Is Competitive เป็น true ต้องมี Min limit และ Max limit ในตัวอย่างข้างต้นกำหนดช่วง 0 ถึง 100000 สำหรับ best_distance

การกำหนดสถิติความคืบหน้า

ไฟล์ ProgressionStatConfig.csv กำหนดสถิติที่แสดงว่าผู้ใช้มีความคืบหน้าในแอปมากเพียงใด สถิติความคืบหน้าจะแสดงเป็นสถิติแรกในโปรไฟล์เกมเมอร์

Stat Id,Event Property Name,Stat Display Name,Stat Description,Icon File Name,Good value direction,Unit
player_level,currentProgress,Run Level,Players accumulate experience by finishing runs and level up.,stat_player_level.png,INCREASING,

สถิติความคืบหน้าไม่มีคอลัมน์ชื่อเหตุการณ์และคอลัมน์การรวมข้อมูล ซึ่งต่างจากสถิติแบบทำซ้ำ เนื่องจากสถิติความคืบหน้าใช้เหตุการณ์ที่สงวนไว้ progressUpdate แบบตายตัว และแสดงค่าล่าสุดที่ส่งมาโดยตรง

เหตุผลที่ใช้เหตุการณ์สงวน progressUpdate แยกต่างหาก

ตัวชี้วัดที่แสดงระดับความคืบหน้าของแอป เช่น Run Level หมายถึงสถานะปัจจุบัน (Current State) ของผู้ใช้ ไม่ใช่ผลลัพธ์ของรอบเดียว ข้อมูลความคืบหน้าเหล่านี้จะถูกส่งผ่าน progressUpdate ซึ่งเป็นเหตุการณ์สงวนเฉพาะที่ Google Play Games กำหนดไว้ล่วงหน้า และใน Hive SDK จะบันทึกโดยเรียกเมธอด gameStatsRecordProgress()

ความคืบหน้าไม่ใช่เป้าหมายของการรวมข้อมูลสะสม จึงไม่ผ่านกระบวนการคำนวณแยกต่างหาก เช่น SUM หรือ MAX แม้จะส่งตัวชี้วัดเดียวกันหลายครั้ง ก็จะไม่ถูกบวกสะสม แต่จะอัปเดตและแสดงเป็นค่าล่าสุดที่ส่งไปล่าสุด

การจัดไฟล์ ZIP

รวมไฟล์ CSV ของสถิติแบบทำซ้ำ ไฟล์ CSV ของสถิติความคืบหน้า และไอคอนที่จำเป็นสำหรับแต่ละสถิติเป็นไฟล์ ZIP แล้วอัปโหลด การจัดไฟล์ ZIP ที่จำเป็นสำหรับตัวอย่างข้างต้นมีดังนี้

GameStatsConfig.zip
RepetitiveStatsConfig.csv
ProgressionStatConfig.csv
StatLocalizations.csv          # ไม่บังคับ
stat_best_distance.png
stat_total_coins.png
stat_record_runs.png
stat_runner_count.png
stat_player_level.png

ไอคอนต้องเป็นรูปภาพ PNG หรือ JPEG ขนาด 512 x 512 px และต้องตรงกับชื่อไฟล์ที่ป้อนในคอลัมน์ Icon File Name ไฟล์การตั้งค่าทั้งหมดต้องอยู่ในเส้นทางบนสุดของไฟล์ ZIP และไม่รองรับไดเรกทอรีย่อย สามารถกำหนดตัวชี้วัดสถิติได้สูงสุด 50 รายการโดยรวมจากไฟล์ CSV 2 ไฟล์

Warning

อย่ารวม PlayerGameEvent.csv ไว้ใน ZIP ให้ลงทะเบียนเหตุการณ์ก่อนเป็นไฟล์ CSV ใน การตั้งค่าเหตุการณ์ ของ Google Play Console แล้วลงทะเบียนสถิติเป็นไฟล์ ZIP ใน การตั้งค่าสถิติ

สถิติเกมที่เผยแพร่แล้วไม่สามารถลบได้ ดังนั้นให้ยืนยันการจัดสถิติก่อนเผยแพร่

บันทึกสถิติเกม{ #game-stats-record }

กิจกรรมที่จะส่งถูกสร้างขึ้นด้วยคลาสกิจกรรมสถิติเกม ชื่อคลาสจะแตกต่างกันไปขึ้นอยู่กับเครื่องยนต์ Unity, C++ และ Android ใช้AuthV4.GameStatsEventและ Unreal Engine ใช้FHiveGameStatsEventป้อนชื่อเหตุการณ์ที่ประกาศใน Google Play Console ลงใน Constructor และกรอกพร็อพเพอร์ตี้ด้วยวิธีaddProperty()ที่เหมาะกับประเภทพร็อพเพอร์ตี้ สำหรับคำอธิบายโดยละเอียดเกี่ยวกับวิธีการประกาศชื่อและประเภทของคุณสมบัติ โปรดดู [หลักเกณฑ์เกี่ยวกับไฟล์ CSV สำหรับกิจกรรม] (https://developer.android.com/games/pgs/integrate-gamestats#csv-guidelines-events)

สามวิธีที่อธิบายไว้ในส่วนนี้เพียงแค่เขียนเหตุการณ์ลงในบัฟเฟอร์ของอุปกรณ์ การโอนจริงจะเกิดขึ้นเมื่อคุณเรียกgameStatsRequestEventsUpload()ตามที่อธิบายไว้ใน คำขออัปโหลดเหตุการณ์สถิติเกมจาก Google Play Games

Caution

ชื่อและประเภทของพร็อพเพอร์ตี้ต้องตรงกับค่าที่ประกาศใน Google Play Console หากมีข้อมูลที่ไม่ตรงกัน เหตุการณ์จะไม่ปรากฏในสถิติ

 

คำขอบันทึกเหตุการณ์สถิติเกมจาก Google Play Games

หากต้องการบันทึกเหตุการณ์สถิติเกมเดียว ให้เรียกใช้เมธอดgameStatsRecordEvent()

ด้านล่างเป็นโค้ดตัวอย่าง เหตุการณ์run_finishedที่ประกาศในการจัดเตรียมล่วงหน้าจะถูกใช้ตามที่เป็นอยู่ ชื่อเหตุการณ์และชื่อคุณสมบัติใช้ค่าที่ประกาศไว้ใน CSV และค่าคุณสมบัติคือค่าที่แอปเติมลงในผลการเล่น

API Reference: hive.AuthV4.Helper.gameStatsRecordEvent

```cs using hive;

// ชื่อเหตุการณ์ที่ประกาศใน Google Play Console AuthV4.GameStatsEvent gameStatsEvent = new AuthV4.GameStatsEvent("run_finished") .addProperty("runner_id", "runner_ninja") // STRING .addProperty("is_new_record", true) // BOOL .addProperty("coins_collected", 10L) // INT64 .addProperty("distance_meters", 1350.2); // DOUBLE

AuthV4.Helper.gameStatsRecordEvent(gameStatsEvent, (ResultAPI result, AuthV4.PlayerInfo playerInfo) => {
    if (result.isSuccess()) {
        // call successful
    }
});
```

```c++

include "HiveAuthV4.h"

// ชื่อเหตุการณ์ที่ประกาศใน Google Play Console FHiveGameStatsEvent GameStatsEvent(TEXT("run_finished")); GameStatsEvent.AddProperty(TEXT("runner_id"), FString(TEXT("runner_ninja"))) // STRING .AddProperty(TEXT("is_new_record"), true) // BOOL .AddProperty(TEXT("coins_collected"), 10) // INT64 .AddProperty(TEXT("distance_meters"), 1350.2); // DOUBLE

FHiveAuthV4::Helper::GameStatsRecordEvent(GameStatsEvent, FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
        if (Result.IsSuccess()) {

// การเรียก API สำเร็จ } })); ```

API Reference: AuthV4::Helper::gameStatsRecordEvent

```cpp

include

using namespace std; using namespace hive;

// ชื่อเหตุการณ์ที่ประกาศใน Google Play Console GameStatsEvent gameStatsEvent("run_finished"); gameStatsEvent.addProperty("runner_id", "runner_ninja") // STRING .addProperty("is_new_record", true) // BOOL .addProperty("coins_collected", (long long)10) // INT64 .addProperty("distance_meters", 1350.2); // DOUBLE

AuthV4::Helper::gameStatsRecordEvent(gameStatsEvent, [=](ResultAPI const & result, shared_ptr<PlayerInfo> playerInfo) {
    if (result.isSuccess()) {
        // call successful
    }
});
```

API Reference: AuthV4.Helper.gameStatsRecordEvent

```kt import com.hive.AuthV4 import com.hive.ResultAPI

// ชื่อเหตุการณ์ที่ประกาศใน Google Play Console val gameStatsEvent = AuthV4.GameStatsEvent("run_finished") .addProperty("runner_id", "runner_ninja") // STRING .addProperty("is_new_record", true) // BOOL .addProperty("coins_collected", 10L) // INT64 .addProperty("distance_meters", 1350.2) // DOUBLE

AuthV4.Helper.gameStatsRecordEvent(gameStatsEvent, object : AuthV4.Helper.AuthV4HelperListener {
    override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
        if (result.isSuccess) {
            // call successful
        }
    }
})
```

API Reference: AuthV4.Helper.INSTANCE.gameStatsRecordEvent

```java import com.hive.AuthV4; import com.hive.ResultAPI;

// ชื่อเหตุการณ์ที่ประกาศใน Google Play Console AuthV4.GameStatsEvent gameStatsEvent = new AuthV4.GameStatsEvent("run_finished") .addProperty("runner_id", "runner_ninja") // STRING .addProperty("is_new_record", true) // BOOL .addProperty("coins_collected", 10L) // INT64 .addProperty("distance_meters", 1350.2); // DOUBLE

AuthV4.Helper.INSTANCE.gameStatsRecordEvent(gameStatsEvent, (result, playerInfo) -> {
    if (result.isSuccess()) {
        // call successful
    }
});
```

ขอบันทึกเหตุการณ์สถิติเกมหลายรายการจาก Google Play Games

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

ด้านล่างเป็นโค้ดตัวอย่าง นี่จะแสดงกรณีที่รวมเหตุการณ์run_finishedที่เหมือนกันสองเหตุการณ์ไว้ด้วย แต่มีเพียงrunner_idและcoins_collectedเท่านั้นที่ถูกกรอกสำหรับคุณสมบัติ

API Reference: hive.AuthV4.Helper.gameStatsRecordEvents

using hive;

List<AuthV4.GameStatsEvent> gameStatsEvents = new List<AuthV4.GameStatsEvent>();

gameStatsEvents.Add(new AuthV4.GameStatsEvent("run_finished")
        .addProperty("runner_id", "runner_ninja")
        .addProperty("coins_collected", 2L));

gameStatsEvents.Add(new AuthV4.GameStatsEvent("run_finished")
        .addProperty("runner_id", "runner_default")
        .addProperty("coins_collected", 5L));

AuthV4.Helper.gameStatsRecordEvents(gameStatsEvents, (ResultAPI result, AuthV4.PlayerInfo playerInfo) => {
    if (result.isSuccess()) {
        // call successful
    }
});

```c++

include "HiveAuthV4.h"

FHiveGameStatsEvent First(TEXT("run_finished")); First.AddProperty(TEXT("runner_id"), FString(TEXT("runner_ninja"))) .AddProperty(TEXT("coins_collected"), 2);

FHiveGameStatsEvent Second(TEXT("run_finished")); Second.AddProperty(TEXT("runner_id"), FString(TEXT("runner_default"))) .AddProperty(TEXT("coins_collected"), 5);

TArray GameStatsEvents; GameStatsEvents.Add(First); GameStatsEvents.Add(Second);

FHiveAuthV4::Helper::GameStatsRecordEvents(GameStatsEvents, FHiveAuthV4HelperDelegate::CreateLambda(this { if (Result.IsSuccess()) {

// การเรียก API สำเร็จ } })); ```

API Reference: AuthV4::Helper::gameStatsRecordEvents

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

GameStatsEvent first("run_finished");
first.addProperty("runner_id", "runner_ninja")
     .addProperty("coins_collected", (long long)2);

GameStatsEvent second("run_finished");
second.addProperty("runner_id", "runner_default")
      .addProperty("coins_collected", (long long)5);

vector<GameStatsEvent> gameStatsEvents;
gameStatsEvents.push_back(first);
gameStatsEvents.push_back(second);

AuthV4::Helper::gameStatsRecordEvents(gameStatsEvents, [=](ResultAPI const & result, shared_ptr<PlayerInfo> playerInfo) {
    if (result.isSuccess()) {
        // call successful
    }
});

API Reference: AuthV4.Helper.gameStatsRecordEvents

import com.hive.AuthV4
import com.hive.ResultAPI

val gameStatsEvents = listOf(
    AuthV4.GameStatsEvent("run_finished")
            .addProperty("runner_id", "runner_ninja")
            .addProperty("coins_collected", 2L),
    AuthV4.GameStatsEvent("run_finished")
            .addProperty("runner_id", "runner_default")
            .addProperty("coins_collected", 5L)
)

AuthV4.Helper.gameStatsRecordEvents(gameStatsEvents, object : AuthV4.Helper.AuthV4HelperListener {
    override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
        if (result.isSuccess) {
            // call successful
        }
    }
})

API Reference: AuthV4.Helper.INSTANCE.gameStatsRecordEvents

import com.hive.AuthV4;
import com.hive.ResultAPI;

List<AuthV4.GameStatsEvent> gameStatsEvents = new ArrayList<>();

gameStatsEvents.add(new AuthV4.GameStatsEvent("run_finished")
        .addProperty("runner_id", "runner_ninja")
        .addProperty("coins_collected", 2L));

gameStatsEvents.add(new AuthV4.GameStatsEvent("run_finished")
        .addProperty("runner_id", "runner_default")
        .addProperty("coins_collected", 5L));

AuthV4.Helper.INSTANCE.gameStatsRecordEvents(gameStatsEvents, (result, playerInfo) -> {
    if (result.isSuccess()) {
        // call successful
    }
});

ขอบันทึกความคืบหน้าของเกมจาก Google Play Games{ #game-stats-progress }

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

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

Caution

คุณประกาศcurrentProgressเป็นINT64หรือSTRINGได้ใน Google Play Console หากส่งแตกต่างจากประเภทที่ประกาศ เหตุการณ์จะถูกยกเลิกและไม่สะท้อนให้เห็นในสถิติ ดังนั้นให้ใช้gameStatsRecordProgress()ซึ่งรับค่าสตริงเฉพาะเมื่อประกาศเป็นสตริงเท่านั้น ค่าสตริงใช้ในการบันทึกระดับความคืบหน้าที่ยากต่อการแสดงด้วยตัวเลข เช่น ระดับอันดับ มาตรฐานในการกำหนดลำดับของสตริงไม่ได้เปิดเผยต่อสาธารณะ ดังนั้นให้ใช้ตัวเลขทุกครั้งที่เป็นไปได้

ด้านล่างเป็นโค้ดตัวอย่าง

API Reference: hive.AuthV4.Helper.gameStatsRecordProgress

```cs using hive;

// ระดับความคืบหน้าปัจจุบันของผู้เล่น long currentProgress = 5L;

AuthV4.Helper.gameStatsRecordProgress(currentProgress, (ResultAPI result, AuthV4.PlayerInfo playerInfo) => {
    if (result.isSuccess()) {
        // call successful
    }
});
```

```c++

include "HiveAuthV4.h"

// ระดับความคืบหน้าปัจจุบันของผู้เล่น int64 CurrentProgress = 5;

FHiveAuthV4::Helper::GameStatsRecordProgress(CurrentProgress, FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
        if (Result.IsSuccess()) {

// การเรียก API สำเร็จ } })); ```

API Reference: AuthV4::Helper::gameStatsRecordProgress

```cpp

include

using namespace std; using namespace hive;

// ระดับความคืบหน้าปัจจุบันของผู้เล่น long long currentProgress = 5;

AuthV4::Helper::gameStatsRecordProgress(currentProgress, [=](ResultAPI const & result, shared_ptr<PlayerInfo> playerInfo) {
    if (result.isSuccess()) {
        // call successful
    }
});
```

API Reference: AuthV4.Helper.gameStatsRecordProgress

```kt import com.hive.AuthV4 import com.hive.ResultAPI

// ระดับความคืบหน้าปัจจุบันของผู้เล่น val currentProgress = 5L

AuthV4.Helper.gameStatsRecordProgress(currentProgress, object : AuthV4.Helper.AuthV4HelperListener {
    override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
        if (result.isSuccess) {
            // call successful
        }
    }
})
```

API Reference: AuthV4.Helper.INSTANCE.gameStatsRecordProgress

```java import com.hive.AuthV4; import com.hive.ResultAPI;

// ระดับความคืบหน้าปัจจุบันของผู้เล่น long currentProgress = 5L;

AuthV4.Helper.INSTANCE.gameStatsRecordProgress(currentProgress, (result, playerInfo) -> {
    if (result.isSuccess()) {
        // call successful
    }
});
```

ขออัปโหลดกิจกรรมสถิติเกมจาก Google Play Games{ #game-stats-upload }

หากต้องการขออัปโหลดเหตุการณ์สถิติเกมที่จัดเก็บไว้ในบัฟเฟอร์ของอุปกรณ์ ให้เรียกใช้เมธอดgameStatsRequestEventsUpload()

Caution

gameStatsRecordEvent(),gameStatsRecordEvents()และgameStatsRecordProgress()เขียนเฉพาะเหตุการณ์ลงในบัฟเฟอร์ของอุปกรณ์เท่านั้น และจะไม่ส่งข้อมูลเหล่านั้น คุณต้องโทรgameStatsRequestEventsUpload()เพื่อส่งไปยังเซิร์ฟเวอร์ของ Google นี่เป็นสิ่งแรกที่ต้องตรวจสอบเมื่อไม่ได้รวบรวมสถิติ

ด้านล่างเป็นโค้ดตัวอย่าง

API Reference: hive.AuthV4.Helper.gameStatsRequestEventsUpload

using hive;

AuthV4.Helper.gameStatsRequestEventsUpload((ResultAPI result, AuthV4.PlayerInfo playerInfo) => {
    if (result.isSuccess()) {
        // call successful
    }
});

```c++

include "HiveAuthV4.h"

FHiveAuthV4::Helper::GameStatsRequestEventsUpload(FHiveAuthV4HelperDelegate::CreateLambda(this { if (Result.IsSuccess()) {

// การเรียก API สำเร็จ } })); ```

API Reference: AuthV4::Helper::gameStatsRequestEventsUpload

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

AuthV4::Helper::gameStatsRequestEventsUpload([=](ResultAPI const & result, shared_ptr<PlayerInfo> playerInfo) {
    if (result.isSuccess()) {
        // call successful
    }
});

API Reference: AuthV4.Helper.gameStatsRequestEventsUpload

import com.hive.AuthV4
import com.hive.ResultAPI

AuthV4.Helper.gameStatsRequestEventsUpload(object : AuthV4.Helper.AuthV4HelperListener {
    override fun onAuthV4Helper(result: ResultAPI, playerInfo: AuthV4.PlayerInfo?) {
        if (result.isSuccess) {
            // call successful
        }
    }
})

API Reference: AuthV4.Helper.INSTANCE.gameStatsRequestEventsUpload

import com.hive.AuthV4;
import com.hive.ResultAPI;

AuthV4.Helper.INSTANCE.gameStatsRequestEventsUpload((result, playerInfo) -> {
    if (result.isSuccess()) {
        // call successful
    }
});

เมื่ออัปโหลดกิจกรรมของคุณสำเร็จแล้ว ให้ตรวจสอบสถิติเกมของคุณโดยเปิดโปรไฟล์เกมเมอร์ของคุณในแท็บของMy Page ในแอป Google Play Store

หน้าจอสถิติเกมแสดงในโปรไฟล์เกมเมอร์ของแอป Google Play Store

ต้องใช้เวลาในการแสดงหลังจากการอัปโหลด ดังนั้นจึงเป็นเรื่องปกติที่จะไม่ได้รับการยืนยันในทันที หากสถิติไม่แสดง ให้ตรวจสอบตามลำดับด้านล่าง

  1. ตรวจสอบให้แน่ใจว่าคุณได้โทรไปที่gameStatsRequestEventsUpload()แล้ว

  2. ตรวจสอบสถานะการเข้าสู่ระบบ Google Play ของคุณ

  3. ตรวจสอบว่าชื่อเหตุการณ์ ชื่อคุณสมบัติ และประเภทที่ประกาศใน CSV ตรงกับค่าที่เขียนในโค้ดหรือไม่

  4. ตรวจสอบข้อความบันทึกบนอุปกรณ์ผ่านการตั้งค่าเทอร์มินัล หากข้อความเช่น 'ส่งเหตุการณ์ GameStats สำเร็จ' ปรากฏขึ้น แสดงว่าการส่งข้อมูลสำเร็จ

    adb shell setprop log.tag.Games VERBOSE
    adb logcat -v time | grep -iE "EventService|GameStats|RecordEvent"
    

 

เกมเซ็นเตอร์ของแอปเปิล ความสำเร็จและกระดานผู้นำ

ในการทำให้เกมของคุณได้รับการนำเสนอใน Apple Game Center คุณต้องใช้ฟังก์ชันความสำเร็จและกระดานผู้นำของ Apple Game Center

ไม่ว่าผู้ใช้จะมีสถานะการตรวจสอบสิทธิ์อย่างไร ฟังก์ชันทั้งสองของ Apple Game Center จะถูกจัดเตรียมโดย Hive SDK นั่นคือ ความสำเร็จและกระดานผู้นำใช้บัญชี Apple Game Center แต่ความสำเร็จและกระดานผู้นำใช้บัญชี Apple Game Center แต่บัญชีนี้อาจไม่ได้เชื่อมโยงกับบัญชี Hive หรือแตกต่างจากบัญชี Hive ที่ผู้เล่นลงชื่อเข้าใช้ในขณะนี้

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชันของ Apple Game Center โปรดดูที่ คู่มือ Apple Game Center.

Note

iOS Enterprise ไม่รองรับ Apple Game Center.

ความสำเร็จ

Implement ProviderApple class to use Achievement function of Apple Game Center through Hive SDK.

รายการความสำเร็จ

ในการโหลดรายชื่อความสำเร็จ ให้เรียกใช้วิธีการ loadAchievements()

ต่อไปนี้คือตัวอย่างโค้ด

API Reference: hive.ProviderApple.loadAchievements

// Request achievement list to Provider Apple
// using hive


// ตัวจัดการ Callback ที่จัดการคำขอสำหรับรายการความสำเร็จไปยัง Provider Apple
public void onLoadAchievements(ResultAPI result, List achievementList) {

Logger.log("ProviderTestView.onLoadAchievements() Callback\nresult = " + result.toString() + "\n");

if (result.isSuccess() != true) 
    return;
}

// ขอรายการความสำเร็จจากผู้ให้บริการ Apple
ProviderApple.loadAchievements(onLoadAchievements);
#include "HiveProviderApple.h"

FHiveProviderApple::LoadAchievements(FHiveProviderAppleOnLoadAchievements::CreateLambda([this](const FHiveResultAPI& Result, const TArray<FHiveProviderAppleAchievement>& Achievements) {
        if (Result.IsSuccess())
        {
                // API call success
        }
}));

เอกสารอ้างอิง API: ProviderApple::loadAchievements

// Request achievement list to Provider Apple
ProviderApple::loadAchievements([=](ResultAPI const & result,std::vector<ProviderAppleAchievement>; const & achievements) {
    // Result callback
    cout<<"ProviderApple::loadAchievements() Callback"<<endl<<result.toString()<<endl;


    if (result.isSuccess() != true)
        return;

});

เอกสารอ้างอิง API: HIVEProviderApple::showAchievements:

import HIVEService
ProviderApple.loadAchievements { result, achievements in
    if result.isSuccess() { ... }
}

เอกสารอ้างอิง API: HIVEProviderApple::showAchievements:

// ขอรายการความสำเร็จจากผู้ให้บริการ Apple
[HIVEProviderApple loadAchievements:^(HIVEResultAPI *result, NSArray<HIVEProviderAppleAchievement *>; *achievements) {


    Loggerd(@"HIVEProviderApple.loadAchievements:\nresult = %@\nachievements = %@", result, achievements);

    if (result.isSuccess) {

    }
    else {

    }

    }];

ขอรายงานความสำเร็จ

ในการรายงานความสำเร็จ ให้เรียกใช้วิธี reportAchievement() โดยตั้งค่าพารามิเตอร์เป็น อัตราความสำเร็จ และ การแสดงแบนเนอร์การแจ้งเตือนสำหรับความสำเร็จที่สำเร็จ.

ต่อไปนี้คือตัวอย่างโค้ด

เอกสารอ้างอิง API: hive .ProviderApple.reportAchievement

using hive;    

    //ความสำเร็จที่ทำได้ %. ความสำเร็จเสร็จสิ้นที่ 100    
    String achievementPercent = "100";    
    // ว่าจะแสดงแบนเนอร์ด้านบนเมื่อความสำเร็จสำเร็จหรือไม่ ค่าเริ่มต้นคือ false    
    Boolean isShow = true;    
    //รหัสความสำเร็จ    
    String achievementId = "com.hivesdk.achievement.10hit";    

    ProviderApple.reportAchievement(achievementPercent, isShow, achievementId, (ResultAPI result) => {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});
#include "HiveProviderApple.h"

//ความสำเร็จที่ได้รับ %. ความสำเร็จเสร็จสมบูรณ์ที่ 100 
FString Percent = TEXT("100");
// แสดงแบนเนอร์ด้านบนเมื่อความสำเร็จสำเร็จหรือไม่ ค่าเริ่มต้นคือ false  
bool bIsShow = true;
// รหัสความสำเร็จ
FString AchievementId = TEXT("com.hivesdk.achievement.10hit");

FHiveProviderApple::ReportAchievement(Percent, bIsShow, AchievementId, FHiveProviderAppleOnReportAchievement::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // API call successful
        }
}));

API Reference: ProviderApple ::reportAchievement

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    //ความสำเร็จที่บรรลุ %. ความสำเร็จเสร็จสิ้นที่ 100    
    string achievementPercent = "100";    
    // ไม่ว่าจะต้องแสดงแบนเนอร์ด้านบนเมื่อความสำเร็จสำเร็จหรือไม่ ค่าเริ่มต้นคือ false    
    bool isShow = true;    
    //รหัสความสำเร็จ    
    string achievementId = "com.hivesdk.achievement.10hit";    

    ProviderApple::reportAchievement(achievementPercent, isShow, achievementId, [=](ResultAPI const & result) {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API Reference: ProviderApple.reportAchievement

import HIVEService    

    //ความสำเร็จที่บรรลุ %. ความสำเร็จเสร็จสิ้นที่ 100    
    letachievementPercent = "100"    
    // ไม่ว่าจะต้องแสดงแบนเนอร์ด้านบนเมื่อความสำเร็จสำเร็จหรือไม่ ค่าเริ่มต้นคือ false    
    let isShow = true    
    //รหัสความสำเร็จ    
    let achievementId = "com.hivesdk.achievement.10hit"    

    ProviderApple.reportAchievement(achievementPercent, showsCompletionBanner: isShow, achievementIdentifier: achievementId) { result in    
         if result.isSuccess() {    
             // call successful    
         }    
}

API Reference: HIVEProviderApple reportAchievement

#import <HIVEService/HIVEService-Swift.h>    

    //ความสำเร็จที่ได้รับ %. ความสำเร็จจะสมบูรณ์เมื่อ 100    
    NSString *achievementPercent = @"100";    
    // ว่าจะแสดงแบนเนอร์ด้านบนเมื่อความสำเร็จสำเร็จหรือไม่ ค่าเริ่มต้น NO    
    BOOL isShow = YES;    
    //รหัสความสำเร็จ    
    NSString *achievementId = @"com.hivesdk.achievement.10hit";    

    [HIVEProviderApple reportAchievement: achievementPercent showsCompletionBanner: isShow achievementIdentifier: achievementId handler: ^(HIVEResultAPI *result) {    
         if ([result isSuccess]) {    
             // call successful    
         }    
}];

ขอให้แสดง UI ความสำเร็จ (ผู้ช่วย)

Note

SDK 4.7.0 มี Helper ซึ่งช่วยเปรียบเทียบบัญชีที่ลงชื่อเข้าใช้บนอุปกรณ์ของผู้ใช้และบัญชีที่ซิงค์กับ PlayerID ได้อย่างง่ายดาย หากสองบัญชีไม่เหมือนกัน โปรดดูที่หน้า IdP Sync เพื่อจัดการกับสถานการณ์นี้.

เพื่อแสดง UI ความสำเร็จ ให้เรียกใช้วิธีการ showAchievements()

ต่อไปนี้คือตัวอย่างโค้ด

API Reference: hive.AuthV4.Helper.showAchievements

using hive;

AuthV4.Helper.showAchievements ((ResultAPI result, AuthV4.PlayerInfo playerInfo) => {
switch (result.code) {
    case ResultAPI.Code.Success:
    // ส่งมอบความสำเร็จพร้อมการระบุความสำเร็จ
    break;
    case ResultAPI.Code.AuthV4ConflictPlayer:
    // ข้อขัดแย้งของบัญชี
    break;
    case ResultAPI.Code.AuthV4GoogleLogout:
    //TODO:
    // หลังจากออกจาก Google Play ให้ออกจากเกม
    // การเริ่มเกมใหม่ต้องได้รับการจัดการโดยสตูดิโอพัฒนา
    break;
    default:
    // สถานการณ์ข้อยกเว้นอื่นๆ
    break;
}
});
#include "HiveAuthV4.h"

FHiveAuthV4::Helper::ShowAchievements(FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
        switch (Result.Code) {
                case FHiveResultAPI::ECode::Success:
                        // Deliver Success with achievement indication 
                        break;
                case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
                        // account conflict 
                        break;
                default:
                        // other exception situations
                        break;
        }
}));

เอกสารอ้างอิง API: AuthV4 ::Helper::showAchievements

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    AuthV4::Helper::showAchievements([=](ResultAPI const & result, shared_ptr playerInfo) {    
      switch (result.code) {    
        case ResultAPI::Success:    
          // Deliver Success with achievement indication    
          break;    
        case ResultAPI::AuthV4ConflictPlayer:    
          // account conflict    
          break;    
        case ResultAPI::AuthV4GoogleLogout:    
          //TODO:    
          // After logging out of Google Play, log out of the game    
          // Relaunching the game must be handled by the development studio    
          break;    
        default:    
          // other exception situations    
          break;    
      }    
});

API Reference: AuthV4Interface .helper().showAchievements

// หากบัญชี Hive ที่เข้าสู่ระบบอยู่ในขณะนี้ไม่ได้เชื่อมต่อกับ GameCenter    
    // จะพยายามเชื่อมต่อกับ GameCenter โดยอัตโนมัติ    

    import HIVEService    

    AuthV4Interface.helper().showAchievements() { result, playerInfo in    
         switch result.getCode() {    
             case .success:    
                 // ส่งมอบความสำเร็จพร้อมการระบุความสำเร็จ    
             case .authV4ConflitPlayer:    
                 // ความขัดแย้งของบัญชี    
             default:    
                 break    
         }    
}

API Reference: [ HIVEAuthV4 helper] showAchievements

// หากบัญชี Hive ที่เข้าสู่ระบบอยู่ในขณะนี้ไม่ได้เชื่อมต่อกับ GameCenter    
    // จะพยายามเชื่อมต่อกับ GameCenter โดยอัตโนมัติ    

    #import <HIVEService/HIVEService-Swift.h>    

    [[HIVEAuthV4 helper] showAchievements: ^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {    
         switch ([result getCode]) {    
             case HIVEResultAPICodeSuccess:    
                 // ส่งความสำเร็จพร้อมกับการระบุความสำเร็จ    
                 break;    
             case HIVEResultAPICodeAuthV4ConflictPlayer:    
                 // ความขัดแย้งของบัญชี    
                 break;    
             default:    
                 // สถานการณ์ข้อยกเว้นอื่นๆ    
                 break;    
         }    
}];

คำขอเพื่อแสดง UI ความสำเร็จ

ในการแสดง UI ความสำเร็จ ให้เรียกใช้วิธีการ showAchievements()

ต่อไปนี้คือตัวอย่างโค้ด

API Reference: ProviderApple.showAchievements

using hive;    

    ProviderApple.showAchievements((ResultAPI result) {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});
#include "HiveProviderApple.h"

FHiveProviderApple::ShowAchievements(FHiveProviderAppleOnShowAchievement::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // call successful
        }
}));

API Reference: ProviderApple::showAchievements

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

ProviderApple::showAchievements([=](ResultAPI const & result) {
    if (result.isSuccess()) {
        // call successful
    }
});

เอกสาร API: ProviderApple.showAchievements

import HIVEService    

    ProviderApple.showAchievements() { result in    
         if result.isSuccess() {    
             // call successful    
         }    
}

API Reference: HIVEProviderApple showAchievements

#import <HIVEService/HIVEService-Swift.h>    

    [HIVEProviderApple showAchievements: ^(HIVEResultAPI *result) {    
         if ([result isSuccess]) {    
             // call successful    
         }    
}];

คำขอรีเซ็ตความสำเร็จ

ในการรีเซ็ตความสำเร็จ ให้ใช้วิธีการ resetAchievements()

ต่อไปนี้คือตัวอย่างโค้ด

API Reference: hive.ProviderApple.resetAchievements

using hive;

ProviderApple.resetAchievements((ResultAPI result) => {
    if (result.isSuccess()) {
        // call successful
    }
});
#include "HiveProviderApple.h"

FHiveProviderApple::ResetAchievements(FHiveProviderAppleOnResetAchievement::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // API call successful
        }
}));

เอกสารอ้างอิง API: ProviderApple ::resetAchievements

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

ProviderApple::resetAchievements([=](ResultAPI const & result) {
    if (result.isSuccess()) {
        // call successful
    }
});

เอกสาร API: resetAchievements(_:)

import HIVEService

ProviderApple.resetAchievements() { result in
    if result.isSuccess() {
        // call successful
    }
}

API Reference: HIVEProviderApple showAchievements

#import <HIVEService/HIVEService-Swift.h>    

    [HIVEProviderApple resetAchievements: ^(HIVEResultAPI *result) {    
         if ([result isSuccess]) {    
             // call successful    
         }    
}];

กระดานคะแนน

Implement ProviderApple class to use Leaderboard function of Apple Game Center through Hive SDK.

ขอรายงานคะแนนอันดับ

ในการรายงานคะแนนกระดานผู้นำไปยัง Apple Game Center ให้เรียกใช้วิธี reportScore()
ต่อไปนี้คือตัวอย่างโค้ด

API Reference: hive .ProviderApple.reportScore

using hive;    

    String playerScore = "1234";    
    String leaderBoardId = "com.hivesdk.leaderboard.10hit";    

    ProviderApple.reportScore(playerScore, leaderBoardId, (ResultAPI result) => {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});
#include "HiveProviderApple.h"

FString PlayerScore = TEXT("1234");
FString LeaderBoardId = TEXT("com.hivesdk.leaderboard.10hit");

FHiveProviderApple::ReportScore(PlayerScore, LeaderBoardId, FHiveProviderAppleOnReportLeaderboard::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // API call successful
        }
}));

API Reference: ProviderApple ::reportScore

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

string playerScore = "1234";
string leaderBoardId = "com.hivesdk.leaderboard.10hit";

ProviderApple::reportScore(playerScore, leaderBoardId, [=](ResultAPI const & result) {
    if (result.isSuccess()) {
        // call successful
    }
});

เอกสารอ้างอิง API: HIVEProviderApple::reportScore:leaderboardIdentifier:handler:

import HIVEService    

    let playerScore = "1234"    
    let leaderBoardId = "com.hivesdk.leaderboard.10hit"    

    ProviderApple.reportScore(playScore, leaderboardIdentifier: leaderboardId) { result in    
         if result.isSuccess() {    
             // call successful    
         }    
}

API Reference: HIVEProviderApple ::reportScore:leaderboardIdentifier:handler:

#import <HIVEService/HIVEService-Swift.h>    

    NSString *playerScore = @"1234";    
    NSString *leaderBoardId = "com.hivesdk.leaderboard.10hit";    

    [HIVEProviderApple reportScore: playerScore leaderboardIdentifier: leaderBoardId handler: ^(HIVEResultAPI *result) {    
         if ([result isSuccess]) {    
             // call successful    
         }    
}];

คำขอเพื่อแสดง UI ของกระดานผู้นำ (ผู้ช่วย)

ในการแสดง UI ของกระดานคะแนน ให้เรียกใช้วิธีการ showLeaderboard()

ต่อไปนี้คือตัวอย่างโค้ด

API Reference: hive .AuthV4.Helper.showLeaderboard

// หากบัญชี Hive ที่เข้าสู่ระบบอยู่ในขณะนี้ไม่ได้เชื่อมต่อกับ GameCenter    
    // จะพยายามเชื่อมต่อกับ GameCenter โดยอัตโนมัติ    

    ใช้ hive;    

    AuthV4.Helper.showLeaderboard((ResultAPI result, AuthV4.PlayerInfo playerInfo) => {    
         switch (result.code) {    
             case ResultAPI.Code.Success:    
                 // ส่งมอบความสำเร็จพร้อมการแสดงกระดานผู้นำ    
                 break;    
             case ResultAPI.Code.AuthV4ConflictPlayer:    
                 // ความขัดแย้งของบัญชี    
                 break;    
             default:    
                 // สถานการณ์ข้อยกเว้นอื่น ๆ    
                 break;    
         }    
});

API Reference: AuthV4 ::Helper::showLeaderboard

// หากบัญชี Hive ที่เข้าสู่ระบบอยู่ในขณะนี้ไม่ได้เชื่อมต่อกับ GameCenter
// จะพยายามเชื่อมต่อกับ GameCenter โดยอัตโนมัติ

#include <HIVE_SDK_Plugin/HIVE_CPP.h>
using namespace std;
using namespace hive;

AuthV4::Helper::showLeaderboard([=](ResultAPI const & result, shared_ptr<PlayerInfo> playerInfo) {
    switch (result.code) {
        case ResultAPI::Success:
            // Deliver Success with leaderboard display
            break;
        case ResultAPI::AuthV4ConflictPlayer:
            // account conflict
            break;
        default:
            break;
    }
});

เอกสารอ้างอิง API: showLeaderboard

// หากบัญชี Hive ที่เข้าสู่ระบบอยู่ในขณะนี้ไม่ได้เชื่อมต่อกับ GameCenter    
    // จะพยายามเชื่อมต่อกับ GameCenter โดยอัตโนมัติ    

    import HIVEService    

    AuthV4Interface.helper().showLeaderboard() { result, playerInfo in    
         switch result.getCode() {    
             case .success:    
                 // ส่งมอบความสำเร็จพร้อมการแสดงกระดานผู้นำ    
             case .authV4ConflictPlayer:    
                 // ข้อขัดแย้งบัญชี    
             default:    
                 break    
         }    
}

API Reference: HIVEProviderApple ::showLeaderboard:

// หากบัญชี Hive ที่เข้าสู่ระบบอยู่ในขณะนี้ไม่ได้เชื่อมต่อกับ GameCenter    
    // จะพยายามเชื่อมต่อกับ GameCenter โดยอัตโนมัติ    

    #import <HIVEService/HIVEService-Swift.h>    

    [[HIVEAuthV4 helper] showLeaderboard: ^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) {    
         switch ([result getCode]) {    
             case HIVEResultAPICodeSuccess:    
                 // ส่งมอบความสำเร็จพร้อมกับการแสดงกระดานคะแนน    
                 break;    
             case HIVEResultAPICodeAuthV4ConflictPlayer:    
                 // ข้อขัดแย้งของบัญชี    
                 break;    
             default:    
                 // สถานการณ์ข้อยกเว้นอื่น ๆ    
                 break;    
         }    
}];

ขอให้แสดง UI ของกระดานผู้นำ

เพื่อแสดง UI ของกระดานคะแนน ให้เรียกใช้เมธอด showLeaderboard()

ต่อไปนี้คือตัวอย่างโค้ด

API Reference: hive .ProviderApple.showLeaderboard

using hive;    

    ProviderApple.showLeaderboard((ResultAPI result) => {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});
#include "HiveProviderApple.h"

FHiveProviderApple::ShowLeaderboard(FHiveProviderAppleOnShowLeaderboard::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // API call successful
        }
}));

API Reference: ProviderApple ::showLeaderboard

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    ProviderApple::showLeaderboard([=](ResultAPI const & result) {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API Reference: showLeaderboard(_:)

import HIVEService    

    ProviderApple.showLeaderboard() { result in    
         if result.isSuccess() {    
             // call successful    
         }    
}

API Reference: HIVEProviderApple ::showLeaderboard:

#import <HIVEService/HIVEService-Swift.h>    

    [HIVEProviderApple showLeaderboard: ^(HIVEResultAPI *result) {    
         if ([result isSuccess]) {    
             // call successful    
         }    
}];

โพสต์ภาพถ่ายบนโซเชียลมีเดีย

ผู้ใช้สามารถแชร์และโพสต์รูปภาพบน Facebook โดยการนำเข้ารูปภาพจากแกลเลอรีของอุปกรณ์ของตนผ่านเกม ตัวอย่างโค้ดมีดังนี้:

API Reference: SocialV4. sharePhoto

using hive;    

    SocialV4.ProviderType providerType = SocialV4.ProviderType.FACEBOOK;    

    SocialV4.sharePhoto(providerType, (ResultAPI result) => {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});
#include "HiveSocialV4.h"

ESocialV4ProviderType ProviderType = ESocialV4ProviderType::FACEBOOK;
FHiveSocialV4::SharePhoto(ProviderType, FHiveSocialV4OnSharePhotoDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
            if (Result.IsSuccess()) {
                // API call successful
        } 
}));

API Reference: SocialV4::sharePhoto

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    

    SocialV4::ProviderType providerType = SocialV4::ProviderType::FACEBOOK;    

    SocialV4::sharePhoto(providerType, [=](ResultAPI const & result) {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API Reference: SocialV4.sharePhoto

import com.hive.SocialV4    
    import com.hive.ResultAPI    

    val providerType = SocialV4.ProviderType.FACEBOOK    

    SocialV4.sharePhoto(providerType, object : SocialV4.SocialV4SharePhotoListener {    
         override fun onShare(result: ResultAPI) {    
             if (result.isSuccess) {    
                 // call successful    
             }    
         }    
})

API Reference: SocialV4.INSTANCE. sharePhoto

import com.hive.SocialV4;    
    import com.hive.ResultAPI;    

    SocialV4.ProviderType providerType = SocialV4.ProviderType.FACEBOOK;    

    SocialV4.INSTANCE.sharePhoto(providerType, result -> {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API Reference: SocialV4Interface.sharePhoto

import HIVEService    

    let providerType: SocialProviderType = .Facebook    

    SocialV4Interface.sharePhoto(providerType) { result in    
         if result.isSuccess() {    
             // call successful    
         }    
}

API Reference: HIVESocialV4 sharePhoto

#import <HIVEService/HIVEService-Swift.h>    

    HIVESocialProviderType providerType = HIVESocialProviderTypeFacebook;    

    [HIVESocialV4 sharePhoto: providerType handler: ^(HIVEResultAPI *result) {    
         if ([result isSuccess]) {    
             // call successful    
         }    
}];

การเข้าสู่ระบบอัตโนมัติสำหรับเกม PC ด้วยการเข้าสู่ระบบของชุมชน

เมื่อคุณคลิกปุ่มเล่นบน PC บนเว็บไซต์ชุมชน เกม PC จะถูกเปิดผ่าน Crossplay Launcher.

ในขณะนี้ เกม PC จะเข้าสู่ระบบโดยอัตโนมัติด้วย ‘ค่าโทเค็นการเข้าสู่ระบบ’ ของชุมชน

Warning

ฟีเจอร์การเข้าสู่ระบบอัตโนมัติสำหรับเกม PC ด้วยการเข้าสู่ระบบของชุมชน ใช้งานได้เฉพาะใน Windows เวอร์ชันของ Hive SDK v4 24.0.0 ขึ้นไป

การเข้าสู่ระบบโดยอัตโนมัติของ Steam (Unity Windows)

Hive SDK v4 Unity Windows 24.2.0 รองรับ Steam implicit login.

เมื่อใช้การเข้าสู่ระบบโดยอัตโนมัติของ Steam กับ SDK v4 Unity Windows 24.2.0 หรือสูงกว่า โปรดทราบข้อจำกัดต่อไปนี้:

  • คุณต้องใช้วิธี AuthV4.Helper.signIn; ไม่สามารถใช้วิธี AuthV4.signIn(AUTO,...) ได้
  • หลังจากติดตั้งแอปเกม ผู้ใช้ต้องทำการเข้าสู่ระบบ Steam โดยอัตโนมัติอย่างน้อยหนึ่งครั้ง
  • เมื่อผู้ใช้ถอนการติดตั้งแอป คุณต้องดำเนินการลบโฟลเดอร์ propFolder ซึ่งเป็นที่เก็บข้อมูลการกำหนดค่า SDK