콘텐츠로 이동

부가 기능

인증에서는 다음과 같은 부가기능을 제공합니다.

Facebook 친구 목록 가져오기

getProviderFriendsList()는 해당 게임을 하는 Facebook 친구의 PlayerID를 제공합니다. 게임을 하지만 Facebook 연동 이력이 없는 친구는 목록에 나타나지 않으며 게임 연동 이력은 있지만 현재 Facebook이 연동되어 있지 않은 경우 PlayerID -1을 리턴합니다.

Warning

2018년 5월 기준으로 Facebook 정책이 변경됨에 따라 기본 권한 항목이 변경되었습니다. Facebook 친구 목록 가져오기 기능을 계속 사용하려면 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(Children's Online Privacy Protection Act)는 13세 미만 어린이의 개인 정보 보호를 목적으로 발효된 미국 법률입니다. Hive는 COPPA 규정에 대응하기 위해 Hive SDK v4.10.0부터 13세 미만 여부를 조회하는 getAgeGateU13() 메서드를 추가합니다. 사용자가 13세 미만일 경우 API가 반환하는 값은 true입니다.

예제 코드

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() 호출 시 푸시 권한 동의 여부를 묻는 팝업이 노출되지 않습니다.
    • 푸시 API가 동작하지 않습니다.
  • Android
    • 종료 팝업 노출 시 더 많은 게임(More Games) 버튼을 표시하지 않습니다.
    • 리모트 푸시가 수신되지 않으며, 푸시 API가 동작하지 않습니다.

GDPR 적용 국가에서 16세 미만 약관 동의 여부 확인

Hive SDK v4 24.2.0 부터 GDPR(유럽 일반 개인 정보 보호법, General Data Protection Regulation) 영향을 받는 국가에서 16세 미만 사용자가 약관에 동의했는지 여부를 Configuration.getAgeGateU16Agree() 메서드로 반환받을 수 있습니다. 값이 true이면 16세 미만 사용자가 약관을 동의한 상태이며, false이면 그 반대입니다. 서드 파티 라이브러리 사용 시 사용자 나이가 16세 미만인지 아닌지를 판단해 앱 기능을 제한하려는 경우 Configuration.getAgeGateU16Agree() 메서드를 이용할 수 있습니다.

using hive;

Boolean ageGateU13 = AuthV4.getAgeGateU13();
#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부터 앱이 법정대리인 동의 확인 약관을 사용하는 경우, 앱 사용자 법정대리인 동의를 받았는지 여부를 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의 String 리스트로 전달하여 사용해보세요. 유저가 특정 권한을 수락했거나 거절했는지 확인할 수 있습니다. 유저가 거절한 권한 중 Dangerous permission에 해당하는 권한이 있다면 OS 권한 동의 팝업으로 유저에게 다시 노출합니다. 그 외 항목은 디바이스 설정 상태에 따라 자동으로 수락 또는 거절 처리됩니다. 권한을 잘못 입력하거나 오타가 있을 경우 AndroidManifest.xml 파일에 선언하지 않은 권한으로 간주하여 거절 처리합니다.

이 기능은 Android 6.0 (API level 23) 이상 버전에서 동작합니다. Android API level이 23 미만이거나 iOS일 경우에는 미지원 ResultAPI를 전달합니다.

Note

본 내용은 Android 전용 기능입니다.

예제 코드

API Reference: 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) {
                                // requests 중 수락한 권한 목락
                        }
                        if (DeniedRequests.Num() > 0) {
                                // requests 중 거절한 권한 목락
                        }
                }
                        break;
                case FHiveResultAPI::ECode::PlatformHelperOSVersionNotSupported:
                        // Android OS version not supported.
                        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()) {    
                         // List of permissions accepted among requests    
                     }    
                     if (denied.isNotEmpty()) {    
                         // List of permissions denied among requests    
                     }    
                 }    
                 ResultAPI.Code.PlatformHelperOSVersionNotSupported -> {    
                     //Android OS version not supported.    
                 }    
                 else -> {    
                     // other exception situations    
                 }    
             }    
         }    
})

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()) {    
                     // List of permissions accepted among requests    
                 }    
                 if (!denied.isEmpty()) {    
                     // List of permissions denied among requests    
                 }    
                 break;    
             case PlatformHelperOSVersionNotSupported:    
                 //Android OS version not supported.    
                 break;    
             default:    
                 // other exception situations    
                 break;    
         }    
});

기기 관리 서비스 이용하기

기기 관리 서비스 는 콘솔에서의 설정에 따라 로그인 시 자동으로 동작합니다. 로그인 후 게임에서는 AuthV4 클래스의 showDeviceManagement() 메서드를 호출하여 유저에게 기기 관리 목록을 보여줍니다. 기기 관리 서비스를 사용하는 게임은 기기 인증 실패로 인해 로그인이 해제되면 Result API의 AuthV4NotRegisteredDevice 코드를 처리하여 자동으로 재로그인을 시도하거나 로그아웃해야 합니다. 기기 관리 서비스 에 대한 자세한 내용은 운영가이드인 기기 관리 서비스 소개를 참고하세요.

API Reference: AuthV4.showDeviceManagement

using hive;    

    AuthV4.showDeviceManagement((ResultAPI result) => {    
         if (result.isSuccess()) {    
             // Closed after exposing the device management 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()) {    
             // Closed after exposing the device management 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) {    
                 // Closed after exposing the device management UI    
             }    
         }    
})

API Reference: AuthV4.INSTANCE .showDeviceManagement

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

    AuthV4.INSTANCE.showDeviceManagement(result -> {    
         if (result.isSuccess()) {    
             // Closed after exposing the device management UI    
         }    
});

API Reference: AuthV4Interface .showDeviceManagement

import HIVEService    

    AuthV4Interface.showDeviceManagement() { result in    
         if result.isSuccess() {    
             // Closed after exposing the device management UI    
         }    
}

API Reference: HIVEAuthV4 showDeviceManagement

#import <HIVEService/HIVEService-Swift.h>    

    [HIVEAuthV4 showDeviceManagement: ^(HIVEResultAPI *result) {    
         if ([result isSuccess]) {    
             // Closed after exposing the device management UI    
         }    
}];

Google Play 게임 업적 및 리더보드

Google 피처드 선정을 목적으로 개발한다면 Google Play 게임의 업적과 리더보드 기능을 적용해야 합니다.

만약 유저가 IdP 중 Google 계정으로 게임에 로그인하면 Play Games Services(PGS)에 자동 로그인되어 업적과 리더보드를 사용할 수 있습니다. 이후 유저가 PGS 설정 화면에서 로그아웃할 경우, 게임 내 로그아웃 버튼과 동일하게 동작해 게임에서 로그아웃됩니다. Google Play 게임의 기능에 대한 자세한 설명은 Google Play Games Services 가이드를 참고하세요.

Note

AuthV4Helper 클래스를 사용할 때

  • 게임을 실행한 유저가 PGS 묵시적 로그인 시도 중 로그인을 거절한 경우, 이를 기억하고 더이상 묵시적 로그인을 시도하지 않습니다. 플레이어 세션이 유지되는 상태에서 자동 로그인이 가능하더라도 묵시적 로그인이 거절된 상태를 계속 기억합니다.
  • PGS에 로그인하지 않은 유저가 업적을 달성해도 그 결과는 PGS로 전송되지 않습니다.

이 내용은 Google Play Games Services 가이드를 준수합니다.

PlayerID 전달

Google Play 게임에 PlayerID를 요청하려면 ProviderGoogle 클래스의 getGooglePlayerId() 메서드를 호출해야 합니다. 이 메서드를 호출하면 Google Play 게임의 PlayerID뿐 아니라 유효성을 검증하는 AuthCode도 함께 전달됩니다.

API Reference: 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 Reference: ProviderGoogle::getGooglePlayerId

// Request the playerID from Google Play Games.
ProviderGoogle::getGooglePlayerId([=](ResultAPI const &result, std::string const &googlePlayerId, std::string const &authCode) {
    if (result.isSuccess())
    {
        // Success in API call.
    }
});
#include "HiveProviderGoogle.h"

FHiveProviderGoogle::GetGooglePlayerId(FHiveProviderGoogleOnGooglePlayerIdDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FString& GooglePlayerId, const FString& AuthCode) {
        if (Result.IsSuccess()) {
                // API 호출 성공
        }
}));

API Reference: 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.
        }
    }
});

업적

Hive를 이용해 Google Play 게임의 업적(Achievement) 기능을 사용하기 위해서는 ProviderGoogle 클래스를 사용하면 됩니다.

Google Play 게임의 숨겨진 업적 공개

Google Play 게임의 숨겨진 업적 공개 기능을 사용하기 위해서는 achievementsReveal() 메서드를 호출하세요. 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"

// 업적 ID
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;    

    //Achievement ID    
    String achievementId = "abcdef123456";    

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

Google Play 게임의 업적 달성 완료 요청

Google Play 게임의 업적 달성 완료 요청 기능을 사용하기 위해서는 achievementsUnlock() 메서드를 호출하세요. achievementsUnlock() 사용 시 업적의 공개 여부와 상관없이 업적이 100%로 달성됩니다.

다음은 예제 코드입니다.

API Reference: ProviderGoogle.achievementsUnlock

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

// 업적 ID
FString AchievementId = TEXT("abcdef123456");
FHiveProviderGoogle::AchievementsUnlock(AchievementId, FHiveProviderGoogleOnAchievementsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // API 호출 성공
        }
}));

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;    

    //Achievement ID    
    String achievementId = "abcdef123456";    

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

Google Play 게임의 업적 수치 증가 요청

Google Play 게임의 업적 수치 증가 요청 기능을 사용하기 위해서는 업적 수치를 파라미터로 설정하여 achievementsIncrement() 메서드를 호출하세요. 업적 수치는 해당 API가 호출되었을 시 설정된 value 값의 합산이며 총 합산이 Max가 될 경우 자동으로 업적이 달성됩니다.

다음은 예제 코드입니다.

API Reference: 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"

// 업적 ID
FString AchievementId = TEXT("abcdef123456");
// 업적 수치
int32 Value = 1;

FHiveProviderGoogle::AchievementsIncrement(AchievementId, Value, FHiveProviderGoogleOnAchievementsDelegate::CreateLambda([this](const FHiveResultAPI& Result) {
        if (Result.IsSuccess()) {
                // API 호출 성공
        }
}));

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;    

    //Achievement ID    
    String achievementId = "abcdef123456";    

    // Achievement numbers    
    int value = 1;    

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

Google Play 게임의 업적 목록 요청 (Helper)

Note

SDK 4.7.0부터 기기에 로그인 된 계정과 PlayerID에 연동된 계정을 더 쉽게 비교할 수 있도록 Helper가 제공됩니다. 연동된 계정이 다를 경우에 대한 처리는 기기에 로그인된 IdP 계정 확인을 참고하세요.

Google Play 게임의 업적 목록을 요청하기 위해서는 showAchievements() 메서드를 호출하세요.

다음은 예제 코드입니다.

API Reference: AuthV4.Helper.showAchievements

using hive;    
    AuthV4.Helper.showAchievements ((ResultAPI result, AuthV4.PlayerInfo playerInfo) => {    
      switch (result.code) {    
        case ResultAPI.Code.Success:    
          // Deliver Success with achievement indication    
          break;    
        case ResultAPI.Code.AuthV4ConflictPlayer:    
          // account conflict    
          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 "HiveAuthV4.h"

FHiveAuthV4::Helper::ShowAchievements(FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
        switch (Result.Code) {
                case FHiveResultAPI::ECode::Success:
                        // 업적 표시와 함께 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 -> {    
                     // Deliver Success with achievement indication    
                 }    
                 ResultAPI.Code.AuthV4ConflictPlayer -> {    
                     // account conflict    
                 }    
                 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: AuthV4.Helper.INSTANCE.showAchievements

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

    AuthV4.Helper.INSTANCE.showAchievements((result, playerInfo) -> {    
         switch (result.getCode()) {    
             case Success:    
                 // Deliver Success with achievement indication    
                 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 에러코드가 전달됩니다. 로그아웃이 완료된 상태이므로 게임 내에서 이를 알리는 팝업을 노출하고 게임 타이틀로 이동합니다.

 

Google Play 게임의 업적 목록 요청 (Auth v4)

Google Play 게임의 업적 목록을 요청하기 위해서는 showAchievements() 메서드를 호출하세요.

다음은 예제 코드입니다.

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 에러코드가 전달됩니다. 이 에러가 전달되면 게임 내 로그아웃 버튼을 눌렀을 때와 동일하게 처리해야 합니다.

리더보드

Hive를 이용해 Google Play 게임의 리더보드 (Leaderboard) 기능을 사용하기 위해서는 ProviderGoogle 클래스를 사용하면 됩니다.

Google Play 게임의 리더보드 점수 갱신 요청

Google Play 게임의 리더보드 점수 갱신 요청을 하기 위해서는 leaderboardsSubmitScore() 메서드를 호출하세요.

다음은 예제 코드입니다.

API Reference: hive.ProviderGoogle.leaderboardsSubmitScore

using hive    

    // Leaderboard ID    
    String leaderboardId = "12345abcde";    

    // Leaderboard score number    
    long score = 100;    
    ProviderGoogle.leaderboardsSubmitScore(leaderboardId, score, (ResultAPI result) => {    
      if (result.isSuccess()) {    
      // API call successful    
      }    
});
#include "HiveProviderGoogle.h"

// 리더보드 ID
FString LeaderboardId = TEXT("12345abcde");

// 리더보드 점수 수치
int64 Score = 100;

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

API Reference: ProviderGoogle::leaderboardsSubmitScore

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

    // Leaderboard score number    
    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;    

    // Leaderboard ID    
    String leaderboardId = "12345abcde";    

    // Leaderboard score number    
    long score = 100;    

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

Google Play 게임의 리더보드 목록 요청 (Helper)

Google Play 게임의 리더보드 목록을 요청하기 위해서는 showLeaderboards() 메서드를 호출하세요.

다음은 예제 코드입니다.

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:
                        // 업적 표시와 함께 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 -> {    
                     // Deliver Success with leaderboard display    
                 }    
                 ResultAPI.Code.AuthV4ConflictPlayer -> {    
                     // account conflict    
                 }    
                 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: 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 에러코드가 전달됩니다. 로그아웃이 완료된 상태이므로 게임 내에서 이를 알리는 팝업을 노출하고 게임 타이틀로 이동합니다.

 

Google Play 게임의 리더보드 목록 요청 (Auth v4)

Google Play 게임의 리더보드 목록을 요청하기 위해서는 showLeaderboards() 메서드를 호출하세요.

다음은 예제 코드입니다.

API Reference: 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:
                        // 업적 표시와 함께 Success 전달
                        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 에러코드가 전달됩니다. 이 에러가 전달되면 게임 내 로그아웃 버튼을 눌렀을 때와 동일하게 처리해야 합니다.

Apple Game Center 게임 업적 및 리더보드

Apple 피쳐드 선정을 위해서는 Apple Game Center의 업적과 리더보드 기능 적용이 필요합니다.

Hive가 제공하는 Apple Game Center의 업적과 리더보드 기능은 유저 인증 상태와는 무관합니다. 즉, Apple Game Center의 업적과 리더보드 기능을 이용하는데 사용된 Apple Game Center 계정이 Hive 로그인 된 계정에 연동되어 있지 않거나 실제로 연동된 계정과 다를 수 있습니다.

Apple Game Center의 기능에 대한 자세한 설명은 Apple Game Center 가이드를 참고하세요.

Note

업적 (Achievement)

Hive를 이용해 Apple Game Center의 업적(Achievement) 기능을 사용하기 위해서는 ProviderApple 클래스를 사용하면 됩니다.

Game Center 업적 목록 요청

Apple Game Center의 업적 목록 요청 기능을 사용하기 위해서는 loadAchievements() 함수를 호출하세요.

다음은 예제 코드입니다.

API Reference: hive.ProviderApple.loadAchievements

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


// Callback handler managing the request for achievement list to Provider Apple
public void onLoadAchievements(ResultAPI result, List achievementList) {

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

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

// Request achievement list to Provider Apple
ProviderApple.loadAchievements(onLoadAchievements);
#include "HiveProviderApple.h"

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

API Reference: 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 Reference: HIVEProviderApple::showAchievements:

// Request achievement list to Provider Apple
[HIVEProviderApple loadAchievements:^(HIVEResultAPI <i>result, NSArray<HIVEProviderAppleAchievement </i>>; *achievements) {


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

    if (result.isSuccess) {

    }
    else {

    }

    }];

Game Center 업적 전송 요청

Apple Game Center의 업적 전송 요청 기능을 사용하기 위해서는 업적 달성률업적 성공 시 상단 배너 노출 여부를 파라미터로 설정하여 reportAchievement() 함수를 호출하세요.

다음은 예제 코드입니다.

API Reference: hive .ProviderApple.reportAchievement

using hive;    

    //Achievement achieved %. Achievement completed at 100    
    String achievementPercent = "100";    
    // Whether to display the top banner when an achievement is successful. default false    
    Boolean isShow = true;    
    //Achievement Id    
    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");
// 업적 성공 시 상단 배너 노출 여부. default false
bool bIsShow = true;
// 업적 Id
FString AchievementId = TEXT("com.hivesdk.achievement.10hit");

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

API Reference: ProviderApple ::reportAchievement

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

    //Achievement achieved %. Achievement completed at 100    
    string achievementPercent = "100";    
    // Whether to display the top banner when an achievement is successful. default false    
    bool isShow = true;    
    //Achievement Id    
    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    

    //Achievement achieved %. Achievement completed at 100    
    letachievementPercent = "100"    
    // Whether to display the top banner when an achievement is successful. default false    
    let isShow = true    
    //Achievement Id    
    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>    

    //Achievement achieved %. Achievement complete when 100    
    NSString *achievementPercent = @"100";    
    // Whether to display the top banner when an achievement is successful. default NO    
    BOOL isShow = YES;    
    //Achievement Id    
    NSString *achievementId = @"com.hivesdk.achievement.10hit";    

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

Game Center 업적 UI 요청(Helper)

Note

    SDK 4.7.0부터 기기에 로그인 된 계정과 PlayerID에 연동된 계정을 더 쉽게 비교할 수 있도록 Helper가 제공됩니다. 연동된 계정이 다를 경우에 대한 처리는 기기에 로그인된 IdP 계정 확인을 참고하세요.

Apple Game Center의 업적 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:
    // Deliver Success with achievement indication
    break;
    case ResultAPI.Code.AuthV4ConflictPlayer:
    // account conflict
    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 "HiveAuthV4.h"

FHiveAuthV4::Helper::ShowAchievements(FHiveAuthV4HelperDelegate::CreateLambda([this](const FHiveResultAPI& Result, const TOptional<FHivePlayerInfo>& PlayerInfo) {
        switch (Result.Code) {
                case FHiveResultAPI::ECode::Success:
                        // 업적 표시와 함께 Success 전달
                        break;
                case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
                        // 계정 충돌
                        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: AuthV4Interface .helper().showAchievements

// If the currently logged in Hive account is not connected to GameCenter    
    // Automatically attempts to connect to GameCenter    

    import HIVEService    

    AuthV4Interface.helper().showAchievements() { result, playerInfo in    
         switch result.getCode() {    
             case .success:    
                 // Deliver Success with achievement indication    
             case .authV4ConflitPlayer:    
                 // account conflict    
             default:    
                 break    
         }    
}

API Reference: [ HIVEAuthV4 helper] showAchievements

// If the currently logged in Hive account is not connected to GameCenter    
    // Automatically attempts to connect to GameCenter    

    #import <HIVEService/HIVEService-Swift.h>    

    [[HIVEAuthV4 helper] showAchievements: ^(HIVEResultAPI <i>result, HIVEPlayerInfo </i>playerInfo) {    
         switch ([result getCode]) {    
             case HIVEResultAPICodeSuccess:    
                 // Deliver Success with achievement indication    
                 break;    
             case HIVEResultAPICodeAuthV4ConflictPlayer:    
                 // account conflict    
                 break;    
             default:    
                 // other exception situations    
                 break;    
         }    
}];

Game Center 업적 UI 요청

Apple Game Center의 업적 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()) {
                // API 호출 성공
        }
}));

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 Reference: 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    
         }    
}];

Game Center 업적 초기화

Apple Game Center의 업적 초기화를 요청하기 위해서는 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 호출 성공
        }
}));

API Reference: 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 Reference: 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    
         }    
}];

리더보드 (Leaderboard)

Hive를 이용해 Apple Game Center의 리더보드 (Leaderboard) 기능을 사용하기 위해서는 ProviderApple 클래스를 사용하면 됩니다.

Game Center 리더보드 정보 전송

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 호출 성공
        }
}));

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 Reference: 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    
         }    
}];

Game Center 리더보드 UI 요청(Helper)

Apple Game Cente에 리더보드 UI 요청을 위해서는 showLeaderboard() 함수를 호출하세요.

다음은 예제 코드입니다.

API Reference: hive .AuthV4.Helper.showLeaderboard

// If the currently logged in Hive account is not connected to GameCenter    
    // Automatically attempts to connect to GameCenter    

    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;    
             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:
                        // 업적 표시와 함께 Success 전달
                        break;
                case FHiveResultAPI::ECode::AuthV4ConflictPlayer:
                        // 계정 충돌
                        break;
                default:
                        // 기타 예외 상황
                        break;
}));

API Reference: AuthV4 ::Helper::showLeaderboard

// If the currently logged in Hive account is not connected to GameCenter
// Automatically attempts to connect to 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 Reference: showLeaderboard

// If the currently logged in Hive account is not connected to GameCenter    
    // Automatically attempts to connect to GameCenter    

    import HIVEService    

    AuthV4Interface.helper().showLeaderboard() { result, playerInfo in    
         switch result.getCode() {    
             case .success:    
                 // Deliver Success with leaderboard display    
             case .authV4ConflictPlayer:    
                 // account conflict    
             default:    
                 break    
         }    
}

API Reference: HIVEProviderApple ::showLeaderboard:

// If the currently logged in Hive account is not connected to GameCenter    
    // Automatically attempts to connect to GameCenter    

    #import <HIVEService/HIVEService-Swift.h>    

    [[HIVEAuthV4 helper] showLeaderboard: ^(HIVEResultAPI <i>result, HIVEPlayerInfo </i>playerInfo) {    
         switch ([result getCode]) {    
             case HIVEResultAPICodeSuccess:    
                 // Deliver Success with leaderboard display    
                 break;    
             case HIVEResultAPICodeAuthV4ConflictPlayer:    
                 // account conflict    
                 break;    
             default:    
                 // other exception situations    
                 break;    
         }    
}];

Game Center 리더보드 UI 요청

Apple Game Cente에 리더보드 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 호출 성공
        }
}));

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    
         }    
}];

사진첩 포스팅

게임에서 기기의 사진첩을 호출하고, 페이스북에 사진을 게시할 수 있습니다. 다음은 예제 코드입니다.

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 호출 성공
        } 
}));

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    
         }    
}];

Hive 커뮤니티 로그인을 통한 PC 게임 자동 로그인

Hive 커뮤니티 웹사이트에서 PC로 플레이 버튼을 클릭하면 크로스플레이 런처를 통해 PC 게임이 실행됩니다.

이 때, PC 게임은 Hive 커뮤니티의 ‘로그인 토큰값’을 이용하여 자동 로그인됩니다.  

Warning

Hive 커뮤니티 로그인을 통한 PC 게임 자동 로그인 기능은 Hive SDK v4 24.0.0 이상의 Windows 버전에서만 동작합니다.

스팀 묵시적 로그인 (Unity Windows)

Hive SDK v4 Unity Windows 24.2.0부터 스팀 묵시적 로그인을 지원합니다. 만약 묵시적 로그인을 사용할 경우, AuthV4.Helper.signIn을 반드시 사용해야 하며 AuthV4.signIn(AUTO,...)는 사용할 수 없습니다. 앱 사용자는 게임 설치 후 최초로 한 번만 스팀 목시적 로그인을 수행합니다. 스팀 묵시적 로그인을 사용할 경우, 앱 삭제 시 SDK 설정 데이터를 저장한 propFolder 폴더를 제거하도록 구현해야 합니다.