인증에서는 다음과 같은 부가기능을 제공합니다.
Facebook 친구 목록 가져오기
getProviderFriendsList()
는 해당 게임을 하는 Facebook 친구의 PlayerID를 제공합니다.
게임을 하지만 Facebook 연동 이력이 없는 친구는 목록에 나타나지 않으며 게임 연동 이력은 있지만 현재 Facebook이 연동되어 있지 않은 경우 PlayerID -1을 리턴합니다.
API Reference: hive.AuthV4.getProviderFriendsList
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public void onGetProviderFriendsList(ResultAPI result, AuthV4.ProviderType providerType, Dictionary<String, Int64> providerUserIdList) { Logger.log("AuthV4TestView.onGetProviderFriendsList() Callback\nresult = " + result.toString() + "\n"); if (result.isSuccess() == false) return; Logger.log("providerType = " + providerType + "\n"); foreach (KeyValuePair<String, Int64> providerUserId in providerUserIdList ) Logger.log("providerUserId = " + providerUserId.Key.ToString() + ", " + providerUserId.Value.ToString() + "\n"); } AuthV4.ProviderType providerType = AuthV4.ProviderType.FACEBOOK; AuthV4.getProviderFriendsList (providerType, onGetProviderFriendsList); |
API Reference: AuthV4::getProviderFriendsList
1 2 3 4 5 6 7 8 9 10 11 12 13 |
hive::ProviderType targetType = hive::ProviderType::FACEBOOK; AuthV4::getProviderFriendsList(targetType, [=](ResultAPI const & result,ProviderType providerType,std::map<std::string,PlayerID> providerUserIdList){ if(result.isSuccess()) { for(auto i = providerUserIdList.begin() ; i != providerUserIdList.end(); i++) { //Print matching [IdP_ID : PlayerID] //( i->first).c_str() ) // Key //i->second // Value } } }); |
API Reference: com.hive.AuthV4.getProviderFriendsList
1 2 3 4 5 6 7 8 9 |
AuthV4.getProviderFriendsList(AuthV4.ProviderType.FACEBOOK, new AuthV4.AuthV4ProviderFriendsListener() { @Override public void onGetProviderFriendsList(ResultAPI result, AuthV4.ProviderType providerType, Map<String, Long> providerUserIdList) { if(result.isSuccess() || providerUserIdList != null) { //providerUserIdList //요청한 providerType(Facebook)의 id와 연결된 사용자의 player id 페어 } } }); |
API Reference: HIVEAuthV4:getProviderFriendsList
1 2 3 4 5 6 |
[HIVEAuthV4 getProviderFriendsList:kHIVEProviderTypeFACEBOOK handler:^(HIVEResultAPI *result, HIVEProviderType retProviderType, NSDictionary<NSString *,NSNumber *> *providerUserIdList) { if(result.isSuccess()) { //providerUserIdList //요청한 providerType(Facebook)의 id와 연결된 사용자의 player id 페어 } }]; |
COPPA 대응
COPPA(Children’s Online Privacy Protection Act)는 13세 미만 어린이의 개인 정보 보호를 목적으로 발효된 미국 법률입니다. Hive는 COPPA 규정에 대응하기 위해 Hive SDK v4.10.0부터 13세 미만 여부를 조회하는 getAgeGateU13()
메서드를 추가합니다. 사용자가 13세 미만일 경우 API가 반환하는 값은 true
입니다.
예제 코드
1 |
Boolean ageGateU13 = AuthV4.getAgeGateU13(); |
1 |
bool ageGateU13 = AuthV4::getAgeGateU13(); |
1 |
boolean ageGateU13 = AuthV4.getAgeGateU13(); |
1 |
bool ageGateU13 = [HIVEAuthV4 getAgeGateU13]; |
동작 변경 사항
ageGateU13()
값이 true
일 때 달라지는 동작은 아래와 같습니다.
- iOS
AuthV4.setup()
과Auth.initialize()
호출 시 푸시 권한 동의 여부를 묻는 팝업이 노출되지 않습니다.- 푸시 API가 동작하지 않습니다.
- Android
- 종료 팝업 노출 시 더 많은 게임(More Games) 버튼을 표시하지 않습니다.
- 리모트 푸시가 수신되지 않으며, 푸시 API가 동작하지 않습니다.
OS 권한 다시 요청하기
AndroidManifest.xml 파일에는 게임에 필요 권한 목록이 정리되어 있습니다. 이 중 일부 권한을 해당 API의 String 리스트로 전달하여 사용해보세요. 유저가 특정 권한을 수락했거나 거절했는지 확인할 수 있습니다. 유저가 거절한 권한 중 Dangerous permission에 해당하는 권한이 있다면 OS 권한 동의 팝업으로 유저에게 다시 노출합니다. 그 외 항목은 디바이스 설정 상태에 따라 자동으로 수락 또는 거절 처리됩니다. 권한을 잘못 입력하거나 오타가 있을 경우 AndroidManifest.xml 파일에 선언하지 않은 권한으로 간주하여 거절 처리합니다.
이 기능은 Android 6.0 (API level 23) 이상 버전에서 동작합니다. Android API level이 23 미만이거나 iOS일 경우에는 미지원 ResultAPI를 전달합니다.
예제 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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) { //TODO : Android only } if (result.code == ResultAPI.Code.PlatformHelperOSVersionNotSupported) { //TODO : Android OS version not supported. } if (granted != null && granted.Length > 0) { foreach (String name in granted) { //TODO : requests 중 수락한 권한 목록 } } if (denied != null && denied.Length > 0) { foreach (String name in denied) { //TODO : requests 중 거절한 권한 목록 } } }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
std::string requestArray[] = {"android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.BLUETOOTH", "android.permission.READ_CONTACTS"}; std::vector<std::string> requests(std::begin(requestArray), std::end(requestArray)); PlatformHelper::requestUserPermissions(requests, [=](ResultAPI const & result, std::vector<std::string> const & granted, std::vector<std::string> const & denied) { Logger::log("=== PlatformHelper::requestUserPermissions ===\n"); Logger::log("ResultAPI : %s\n", result.toString().c_str()); if (result.code == hive::ResultAPI::PlatformHelperOSNotSupported) { //TODO : Android only } if (result.code == hive::ResultAPI::PlatformHelperOSVersionNotSupported) { //TODO : Android OS version not supported. } if (!granted.empty()) { for (std::string name : granted) { //TODO : requests 중 수락한 권한 목록 } } if (!denied.empty()) { for (std::string name : denied) { //TODO : requests 중 거절한 권한 목록 } } }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
String[] requestArray = {"android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.BLUETOOTH", "android.permission.READ_CONTACTS"}; List<String> requests = Arrays.asList(permissionArray); PlatformHelper.requestUserPermissions( requests, new PlatformHelper.RequestUserPermissionsListener() { @Override public void onRequestUserPermissions(ResultAPI resultApi, List<String> granted, List<String> denied) { if (resultApi.errorCode == ResultAPI.Code.PlatformHelperOSVersionNotSupported) { //TODO : Android OS version not supported. } for (String name : granted) { //TODO : requests 중 수락한 권한 목록 } for (String name : denied) { //TODO : requests 중 거절한 권한 목록 } } }); |
기기 관리 서비스 이용하기
기기 관리 서비스는 Hive 콘솔에서의 설정에 따라 로그인 시 자동으로 동작합니다. 로그인 후 게임에서는 AuthV4 클래스의 showDeviceManagement()
메서드를 호출하여 유저에게 기기 관리 목록을 보여줍니다.
기기 관리 서비스를 사용하는 게임은 기기 인증 실패로 인해 로그인이 해제되면 Result API의 AuthV4NotRegisteredDevice
코드를 처리하여 자동으로 재로그인을 시도하거나 로그아웃해야 합니다. 기기 관리 서비스에 대한 자세한 내용은 운영가이드인 기기 관리 서비스 소개를 참고하세요.
1 2 3 4 5 6 7 8 9 10 |
// 기기관리창 리스너 public void onAuthV4ShowDeviceManagement(ResultAPI result) { Logger.log("AuthV4TestView.onAuthV4ShowDeviceManagement() Callback\nresult = " + result.toString() + "\n"); } // 기기관리창 요청 AuthV4.showDeviceManagement(onAuthV4ShowDeviceManagement); |
1 2 3 4 5 6 7 8 9 |
// Hive SDK AuthV4 기기관리창 요청 AuthV4::showDeviceManagement([=](ResultAPI const & result) { // 결과 콜백 if (result.isSuccess()) { // 기기관리창 닫힘 } else { // TODO : Error Handling } }); |
1 2 3 4 5 6 7 8 |
com.hive.AuthV4.showDeviceManagement(new com.hive.AuthV4.AuthV4ShowDeviceManagementListener() { @Override public void onAuthV4ShowDeviceManagement(ResultAPI result) { } }); |
1 2 3 4 5 6 7 8 9 10 11 12 |
[HIVEAuthV4 showDeviceManagement:^(HIVEResultAPI *result) { Loggerd(@"HIVEAuthV4.showDeviceManagement:\nresult = %@", result); if (result.isSuccess) { } else { } }]; |
Google Play 게임 업적 및 리더보드
Google 피처드 선정을 목적으로 개발한다면 Google Play 게임의 업적과 리더보드 기능을 적용해야 합니다.
만약 유저가 IdP 중 Google 계정으로 게임에 로그인하면 Play Games Services(PGS)에 자동 로그인되어 업적과 리더보드를 사용할 수 있습니다. 이후 유저가 PGS 설정 화면에서 로그아웃할 경우, 게임 내 로그아웃 버튼과 동일하게 동작해 게임에서 로그아웃됩니다. Google Play 게임의 기능에 대한 자세한 설명은 Google Play Games Services 가이드를 참고하세요.
PlayerID 전달
Google Play 게임에 PlayerID를 요청하려면 ProviderGoogle 클래스의 getGooglePlayerId()
메서드를 호출해야 합니다. 이 메서드를 호출하면 Google Play 게임의 PlayerID뿐 아니라 유효성을 검증하는 AuthCode도 함께 전달됩니다.
다음은 예제 코드입니다.
API Reference: hive.ProviderGoogle.getGooglePlayerId
1 2 3 4 5 6 |
// Google Play 게임의 플레이어 ID 요청 ProviderGoogle.getGooglePlyaerId((ResultAPI result, String googlePlayerId, String authCode)=>{ if(result.isSuccess()){ // API 호출 성공 } }); |
API Reference: ProviderGoogle::getGooglePlayerId
1 2 3 4 5 6 7 |
// Google Play 게임의 플레이어 ID 요청 ProviderGoogle::getGooglePlayerId([=](ResultAPI const &result, std::string const &googlePlayerId, std::string const &authCode) { if (result.isSuccess()) { // API 호출 성공 } }); |
API Reference: com.hive.ProviderGoogle.getGooglePlayerId
1 2 3 4 5 6 7 8 9 |
// Google Play 게임의 플레이어 ID 요청 ProviderGoogle.getGooglePlayerId(new ProviderGoogle.GooglePlayerIdListener() { @Override public void onPlayerIdResult(ResultAPI resultAPI, String googlePlayerId, String authCode) { if(resultAPI.isSuccess()){ // API 호출 성공 } } }); |
업적
Hive를 이용해 Google Play 게임의 업적(Achievement) 기능을 사용하기 위해서는 ProviderGoogle 클래스를 사용하면 됩니다.
Google Play 게임의 숨겨진 업적 공개
Google Play 게임의 숨겨진 업적 공개 기능을 사용하기 위해서는 achievementsReveal()
메서드를 호출하세요. achievementsReveal()
사용 시 업적이 0% 로 공개만 될 뿐 달성되지는 않습니다.
다음은 예제 코드입니다.
API Reference: hive.ProviderGoogle.achievementsReveal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Provider Google 숨겨진 업적 공개 요청 // 업적이 0%로 공개만 될 뿐 달성되지는 않는다. // 업적 ID String achievementId = "abcdef123456"; // ProviderGoogle 숨겨진 업적 공개 요청 콜백 핸들러 public void onAchievementsReveal(ResultAPI result) { if (result.isSuccess()){ // API 호출 성공 } } ProviderGoogle.achievementsReveal(achievementId, onAchievementsReveal); |
API Reference: ProviderGoogle::achievementsReveal
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Provider Google 숨겨진 업적 공개 요청 // 업적이 0%로 공개만 될 뿐 달성되지는 않는다. // 업적 ID std::string achievementId = "abcdef123456"; ProviderGoogle::achievementsReveal(achievementId, [=](ResultAPI const & result) { if(result.isSuccess()){ // API 호출 성공 } } |
API Reference: com.hive.ProviderGoogle.achievementsReveal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Provider Google 숨겨진 업적 공개 요청 // 업적이 0%로 공개만 될 뿐 달성되지는 않는다. // 업적 ID String achievementId = "abcdef123456"; ProviderGoogle.achievementsReveal(achievementId, new ProviderGoogle.GoogleAchievementsListener() { @Override public void onAchievementsResult(ResultAPI resultAPI) { if(resultAPI.isSuccess()){ // API 호출 성공 } } }); |
Google Play 게임의 업적 달성 완료 요청
Google Play 게임의 업적 달성 완료 요청 기능을 사용하기 위해서는 achievementsUnlock()
메서드를 호출하세요. achievementsUnlock()
사용 시 업적의 공개 여부와 상관없이 업적이 100%로 달성됩니다.
다음은 예제 코드입니다.
API Reference: hive.ProviderGoogle.achievementsUnlock
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Provider Google 업적 달성 요청 // 숨겨져 있거나 공개된 여부와 상관없이 업적이 100%로 달성된다. // 업적 ID String achievementId = "abcdef123456"; // ProviderGoogle 업적 달성 요청 콜백 핸들러 public void onAchievementsUnlock(ResultAPI result) { if (result.isSuccess()){ // API 호출 성공 } } } ProviderGoogle.achievementsUnlock(achievementId, onAchievementsUnlock); |
API Reference: ProviderGoogle::achievementsUnlock
1 2 3 4 5 6 7 8 9 10 11 12 |
// Provider Google 업적 달성 요청 // 숨겨져 있거나 공개된 여부와 상관없이 업적이 100%로 달성된다. // 업적 ID std::string achievementId = "abcdef123456"; ProviderGoogle::achievementsUnlock(achievementId, [=](ResultAPI const & result) { if(result.isSuccess()){ // API 호출 성공 } } |
API Reference: com.hive.ProviderGoogle.achievementsUnlock
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Provider Google 업적 달성 요청 // 숨겨져 있거나 공개된 여부와 상관없이 업적이 100%로 달성된다. // 업적 ID String achievementId = "abcdef123456"; ProviderGoogle.achievementsUnlock(achievementId, new ProviderGoogle.GoogleAchievementsListener() { @Override public void onAchievementsResult(ResultAPI resultAPI) { if(resultAPI.isSuccess()){ // API 호출 성공 } } }); |
Google Play 게임의 업적 수치 증가 요청
Google Play 게임의 업적 수치 증가 요청 기능을 사용하기 위해서는 업적 수치를 파라미터로 설정하여 achievementsIncrement()
메서드를 호출하세요. 업적 수치는 해당 API가 호출되었을 시 설정된 value 값의 합산이며 총 합산이 Max가 될 경우 자동으로 업적이 달성됩니다.
다음은 예제 코드입니다.
API Reference: hive.ProviderGoogle.achievementsIncrement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// Provider Google 업적 수치 증가 요청 // using hive // value 만큼 설정이 아닌 매 value 만큼 합산된다. // 총 합산이 Max 가 될 경우 자동으로 업적이 달성되며, 계속 호출하여도 무방하다. // 업적 ID String achievementId = "abcdef123456"; // 업적 수치 int value = 1; // ProviderGoogle 업적 수치 증가 요청 콜백 핸들러 public void onAchievementsIncrement(ResultAPI result) { if (result.isSuccess()){ // API 호출 성공 } } } ProviderGoogle.achievementsIncrement(achievementId, value, onAchievementsIncrement); |
API Reference: ProviderGoogle::achievementsIncrement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Provider Google 업적 수치 증가 요청 // value 만큼 설정이 아닌 매 value 만큼 합산 된다. // 총 합산이 Max 가 될 경우 자동으로 업적이 달성되며, 계속 호출하여도 무방하다. // 업적 ID std::string achievementId = "abcdef123456"; // 업적 수치 int value = 1; ProviderGoogle::achievementsIncrement(achievementId, value, [=](ResultAPI const & result) { if(result.isSuccess()){ // API 호출 성공 } } |
API Reference: com.hive.ProviderGoogle.achievementsIncrement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Provider Google 업적 수치 증가 요청 // value 만큼 설정이 아닌 매 value 만큼 합산 된다. // 총 합산이 Max 가 될 경우 자동으로 업적이 달성되며, 계속 호출하여도 무방하다. // 업적 ID String achievementId = "abcdef123456"; // 업적 수치 int value = 1; ProviderGoogle.achievementsIncrement(achievementId, value, new ProviderGoogle.GoogleAchievementsListener() { @Override public void onAchievementsResult(ResultAPI resultAPI) { if(resultAPI.isSuccess()){ // API 호출 성공 } } }); |
Google Play 게임의 업적 목록 요청 (Helper)
Google Play 게임의 업적 목록을 요청하기 위해서는 showAchievements()
메서드를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.AuthV4.Helper.showAchievements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Google 업적 UI 를 띄운다. AuthV4.Helper.showAchievements (delegate (ResultAPI result, AuthV4.PlayerInfo playerInfo) { switch(result.code) { case ResultAPI.Code.Success: // 업적 표시와 함께 Success 전달 break; case ResultAPI.Code.AuthV4ConflictPlayer: // 계정 충돌 break; case ResultAPI.Code.AuthV4GoogleLogout: // Google Play 로그아웃 후 게임 로그아웃 실행 // 게임 재실행은 개발 스튜디오에서 처리해야함 break; default: // 기타 예외 상황 break; } }); |
API Reference: AuthV4::Helper::showAchievements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Google 업적 UI 를 띄운다. AuthV4::Helper::showAchievements([=](ResultAPI const & result, std::shared_ptr playerInfo) { switch (result.code) { case ResultAPI::Success: // 업적 표시와 함께 Success 전달 break; case ResultAPI::AuthV4ConflictPlayer: // 계정 충돌 break; case ResultAPI::AuthV4GoogleLogout: // Google Play 로그아웃 후 게임 로그아웃 실행 // 게임 재실행은 개발 스튜디오에서 처리해야함 break; default: break; } }); |
API Reference: com.hive.AuthV4.Helper.showAchievements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
// Google 업적 UI 를 띄운다. AuthV4.Helper.showAchievements(new AuthV4.Helper.AuthV4HelperListener() { // 현재 로그인 된 Hive 계정이 PGS/GameCenter에 연결되지 않았을 경우 // 자동으로 PGS/GameCenter에 Connect를 시도함 @Override public void onAuthV4Helper(ResultAPI result, AuthV4.PlayerInfo playerInfo) { switch(result.code) { case Success: // 업적 표시와 함께 Success 전달 break; case AuthV4ConflictPlayer: // 계정 충돌 break; case AuthV4GoogleLogout: // Google Play 로그아웃 후 게임 로그아웃 실행 // 게임 재실행은 개발 스튜디오에서 처리해야함 break; default: // 기타 예외 상황 break; } } }); |
Google Play 게임의 업적 목록 요청 (Auth v4)
Google Play 게임의 업적 목록을 요청하기 위해서는 showAchievements()
메서드를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.ProviderGoogle.showAchievements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Provider Google 업적 목록 요청 // using hive // Provider Google 업적 목록 요청 콜백 핸들러 public void onAchievementsResult(ResultAPI result) { Logger.log("ProviderTestView.onAchievementsResult() Callback\nresult = " + result.toString() + "\n"); // Google Play 로그아웃 if (result.code == ResultAPI.Code.AuthV4GoogleLogout) { // 로그아웃 처리 // 게임 로그아웃은 개발 스튜디오에서 직접 처리해야함 return; } if (result.isSuccess() != true) return; } // Provider Google 업적 목록 요청 ProviderGoogle.showAchievements(onAchievementsResult); |
API Reference: ProviderGoogle::showAchievements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Provider Google 업적 목록 요청 ProviderGoogle::showAchievements([=](ResultAPI const & result) { // 결과 콜백 cout<<"ProviderGoogle::showAchievements() Callback"<<endl<<result.toString()<<endl; // Google Play 로그아웃 if (result.code == ResultAPI:AuthV4GoogleLogout) { // 로그 아웃 처리 // 게임 로그아웃은 개발 스튜디오에서 직접 처리해야함 return; } if (result.isSuccess() != true) return; }); |
API Reference: com.hive.ProviderGoogle.showAchievements
1 2 3 4 5 6 7 8 9 10 11 12 |
// Google 업적 UI 를 띄운다. ProviderGoogle.showAchievements(new ProviderGoogle.GoogleAchievementsListener() { @Override public void onAchievementsResult(ResultAPI resultAPI) { // Google Play 로그아웃 if (resultAPI.code == AuthV4GoogleLogout) { // 로그아웃 처리 // 게임 로그아웃은 개발 스튜디오에서 직접 처리해야함 return; } } }); |
리더보드
Hive를 이용해 Google Play 게임의 리더보드 (Leaderboard) 기능을 사용하기 위해서는 ProviderGoogle 클래스를 사용하면 됩니다.
Google Play 게임의 리더보드 점수 갱신 요청
Google Play 게임의 리더보드 점수 갱신 요청을 하기 위해서는 leaderboardsSubmitScore()
메서드를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.ProviderGoogle.leaderboardsSubmitScore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Provider Google 리더보드 점수 갱신 요청 // leaderboardId에 해당하는 기록에 score 수치로 갱신된다. // using hive // 리더보드 ID String leaderboardId = "cdefg45678"; // 리더보드 점수 수치 long score = 100; // Provider Google 리더보드 점수 갱신 요청 콜백 핸들러 public void onLeaderboardsSubmitScore(ResultAPI result){ if (result.isSuccess()){ // API 호출 성공 } } ProviderGoogle.leaderboardsSubmitScore(leaderboardId, score, onLeaderboardsSubmitScore); |
API Reference: ProviderGoogle::leaderboardsSubmitScore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Provider Google 리더보드 점수 갱신 요청 // leaderboardId에 해당하는 기록에 score 수치로 갱신된다. // 리더보드 ID std::string leaderboardId = "cdefg45678"; // 리더보드 점수 수치 long score = 100; // Provider Google 리더보드 점수 갱신 요청 ProviderGoogle::leaderboardsSubmitScore(achievementId, score, [=](ResultAPI const & result) { if(result.isSuccess()){ // API 호출 성공 } } |
API Reference: com.hive.ProviderGoogle.leaderboardsSubmitScore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Provider Google 리더보드 점수 갱신 요청 // leaderboardId에 해당하는 기록에 score 수치로 갱신된다. // 리더보드 ID String leaderboardId = "cdefg45678"; // 리더보드 점수 수치 long score = 100; ProviderGoogle.leaderboardsSubmitScore(leaderboardId, score, new ProviderGoogle.GoogleLeaderboardsListener() { @Override public void onLeaderboardsResult(ResultAPI resultAPI) { if(resultAPI.isSuccess()){ // API 호출 성공 } } }); |
Google Play 게임의 리더보드 목록 요청 (Helper)
Google Play 게임의 리더보드 목록을 요청하기 위해서는 showLeaderboards()
메서드를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.AuthV4.Helper.showLeaderboard
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Provider Google 리더보드 UI 요청 AuthV4.Helper.showLeaderboard (delegate (ResultAPI result, AuthV4.PlayerInfo playerInfo) { switch(result.code) { case ResultAPI.Code.Success: // 리더보드 표시와 함께 Success 전달 break; case ResultAPI.Code.AuthV4ConflictPlayer: // 계정 충돌 break; case ResultAPI.CodeAuthV4GoogleLogout: // Google Play 로그아웃 후 게임 로그아웃 실행 // 게임 재실행은 개발 스튜디오에서 처리해야함 break; default: // 기타 예외 상황 break; } }); |
API Reference: AuthV4::Helper:: showLeaderboard
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Provider Google 리더보드 UI 요청 AuthV4::Helper:: showLeaderboard([=](ResultAPI const & result, std::shared_ptr playerInfo) { switch (result.code) { case ResultAPI::Success: // 리더보드 표시와 함께 Success 전달 break; case ResultAPI::AuthV4ConflictPlayer: // 계정 충돌 break; case ResultAPI::AuthV4GoogleLogout: // Google Play 로그아웃 후 게임 로그아웃 실행 // 게임 재실행은 개발 스튜디오에서 처리해야함 break; default: break; } }); |
API Reference: com.hive.AuthV4.Helper.showLeaderboard
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Provider Google 리더보드 UI 요청 AuthV4.Helper.showLeaderboard(new AuthV4.Helper.AuthV4HelperListener() { @Override public void onAuthV4Helper(ResultAPI result, AuthV4.PlayerInfo playerInfo) { switch(result.code) { case Success: // 리더보드 표시와 함께 Success 전달 break; case AuthV4ConflictPlayer: // 계정 충돌 break; case AuthV4GoogleLogout: // Google Play 로그아웃 후 게임 로그아웃 실행 // 게임 재실행은 개발 스튜디오에서 처리해야함 break; default: // 기타 예외 상황 break; } } }); |
Google Play 게임의 리더보드 목록 요청 (Auth v4)
Google Play 게임의 리더보드 목록을 요청하기 위해서는 showLeaderboards()
메서드를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.ProviderGoogle.showLeaderboards
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Provider Google 리더보드 목록 요청 // using hive // Provider Google 리더보드 목록 요청 콜백 핸들러 public void onLeaderboardsResult(ResultAPI result) { Logger.log("ProviderTestView.onLeaderboardsResult() Callback\nresult = " + result.toString() + "\n"); // Google Play 로그아웃 if (result.code == ResultAPI.Code.AuthV4GoogleLogout) { // 로그아웃 처리 //게임 로그아웃은 개발 스튜디오에서 직접 처리해야함 return; } if (result.isSuccess() != true) return; } // Provider Google 리더보드 목록 요청 ProviderGoogle.showLeaderboards(onLeaderboardsResult); |
API Reference: ProviderGoogle::showLeaderboards
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Provider Google 리더보드 목록 요청 ProviderGoogle::showLeaderboard([=](ResultAPI const & result) { // 결과 콜백 cout<<"ProviderGoogle::showLeaderboard() Callback"<<endl<<result.toString()<<endl; // Google Play 로그아웃 if (result.code == ResultAPI:AuthV4GoogleLogout) { // 로그 아웃 처리 //게임 로그아웃은 개발 스튜디오에서 직접 처리해야함 return; } if (result.isSuccess() != true) return; }); |
API Reference: com.hive.ProviderGoogle.showLeaderboards
1 2 3 4 5 6 7 8 9 10 11 12 |
// Provider Google 리더보드 목록 요청 ProviderGoogle.showLeaderboards(new ProviderGoogle.GoogleLeaderboardsListener() { @Override public void onLeaderboardsResult(ResultAPI resultAPI) { // Google Play 로그아웃 if (resultAPI.code == AuthV4GoogleLogout) { // 로그아웃 처리 //게임 로그아웃은 개발 스튜디오에서 직접 처리해야함 return; } } }); |
Apple Game Center 게임 업적 및 리더보드
Apple 피쳐드 선정을 위해서는 Apple Game Center의 업적과 리더보드 기능 적용이 필요합니다.
Hive가 제공하는 Apple Game Center의 업적과 리더보드 기능은 유저 인증 상태와는 무관합니다. 즉, Apple Game Center의 업적과 리더보드 기능을 이용하는데 사용된 Apple Game Center 계정이 Hive 로그인 된 계정에 연동되어 있지 않거나 실제로 연동된 계정과 다를 수 있습니다.
Apple Game Center의 기능에 대한 자세한 설명은 Apple Game Center 가이드를 참고하세요.
업적 (Achievement)
Hive를 이용해 Apple Game Center의 업적(Achievement) 기능을 사용하기 위해서는 ProviderApple 클래스를 사용하면 됩니다.
Game Center 업적 목록 요청
Apple Game Center의 업적 목록 요청 기능을 사용하기 위해서는 loadAchievements()
함수를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.ProviderApple.loadAchievements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Provider Apple 업적 목록 요청 // using hive // Provider Apple 업적 목록 요청 콜백 핸들러 public void onLoadAchievements(ResultAPI result, List achievementList) { Logger.log("ProviderTestView.onLoadAchievements() Callback\nresult = " + result.toString() + "\n"); if (result.isSuccess() != true) return; } // Provider Apple 업적 목록 요청 ProviderApple.loadAchievements(onLoadAchievements); |
API Reference: ProviderApple::loadAchievements
1 2 3 4 5 6 7 8 9 10 |
// Provider Apple 업적 목록 요청 ProviderApple::loadAchievements([=](ResultAPI const & result,std::vector<ProviderAppleAchievement> const & achievements) { // 결과 콜백 cout<<"ProviderApple::loadAchievements() Callback"<<endl<<result.toString()<<endl; if (result.isSuccess() != true) return; }); |
API Reference: HIVEProviderApple::loadAchievements:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Provider Apple 업적 목록 요청 [HIVEProviderApple loadAchievements:^(HIVEResultAPI *result, NSArray<HIVEProviderAppleAchievement *> *achievements) { Loggerd(@"HIVEProviderApple.loadAchievements:\nresult = %@\nachievements = %@", result, achievements); if (result.isSuccess) { } else { } }]; |
Game Center 업적 전송 요청
Apple Game Center의 업적 전송 요청 기능을 사용하기 위해서는 업적 달성률과 업적 성공 시 상단 배너 노출 여부를 파라미터로 설정하여 reportAchievement()
함수를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.ProviderApple.reportAchievement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Provider Apple 업적 전송 // using hive // Provider Apple 업적 전송 콜백 핸들러 public void onReportAchievement(ResultAPI result) { Logger.log("ProviderTestView.onReportAchievement() Callback\nresult = " + result.toString() + "\n"); if (result.isSuccess() != true) return; } //업적 성취 %, 100일 경우 달성 완료 String achievement_percent= "100"; //업적 성공 시 상단 배너 노출 여부. default is false Boolean isShow=true; // Provider Apple 업적 전송 요청 ProviderApple.reportAchievement(achievement_percent, isShow, "{ACHIEVEMENT_IDENTIFIER}", onReportAchievement); |
API Reference: ProviderApple::reportAchievement
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
//업적 성취 %, 100일 경우 달성 완료 std::string achievement_percent = "100"; //업적 성공 시 상단 배너 노출 여부. default is false bool isShow = true; // Provider Apple 업적 전송 요청 ProviderApple::reportAchievement(achievement_percent, isShow, "{ACHIEVEMENT_IDENTIFIER}", [=](ResultAPI const & result) { // 결과 콜백 cout<<"ProviderApple::reportAchievement() Callback"<<endl<<result.toString()<<endl; if (result.isSuccess() != true) return; }); |
API Reference: HIVEProviderApple::reportAchievement:showsCompletionBanner:achievementIdentifier:handler:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 업적 성취 %, 100 인 경우 달성 완료. NSString *percentStr = {ACHIEVEMENT_PERCENT}; // 업적 성공시 상단 배너 노출 여부. BOOL isShow = YES; NSString *achievementIdentifier = {ACHIEVEMENT_IDENTIFIER}; // Provider Apple 업적 목록 요청 [HIVEProviderApple reportAchievement:percentStr showsCompletionBanner:isShow achievementIdentifier:achievementIdentifier handler:^(HIVEResultAPI *result) { Loggerd(@"HIVEProviderApple.reportAchievement:showsCompletionBanner:achievementIdentifier:handler:\nresult = %@", result); if (result.isSuccess) { } else { } }]; |
Game Center 업적 UI 요청(Helper)
Apple Game Center의 업적 UI를 요청하기 위해서는 showAchievements()
함수를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.AuthV4.Helper.showAchievements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Provider Apple 업적 UI 요청 AuthV4.Helper.showAchievements (delegate (ResultAPI result, AuthV4.PlayerInfo playerInfo) { switch(result.code) { case ResultAPI.Code.Success: // 업적 표시와 함께 Success 전달 break; case ResultAPI.Code.AuthV4ConflictPlayer: // 계정 충돌 break; default: // 기타 예외 상황 break; } }); |
API Reference: AuthV4::Helper::showAchievements
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Provider Apple 업적 UI 요청 AuthV4::Helper::showAchievements([=](ResultAPI const & result, std::shared_ptr<PlayerInfo> playerInfo) { switch (result.code) { case ResultAPI::Success: // 업적 표시와 함께 Success 전달 break; case ResultAPI::AuthV4ConflictPlayer: // 계정 충돌 break; default: break; } }); |
API Reference: HIVEAuthV4Helper::showAchievements:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Provider Apple 업적 UI 요청 [[HIVEAuthV4 helper] showAchievements:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) { // 현재 로그인 된 Hive 계정이 GameCenter에 연결되지 않았을 경우 // 자동으로 GameCenter에 Connect를 시도함 switch(result.code) { case kSuccess: // 업적 표시와 함께 Success 전달 break; case kAuthV4ConflictPlayer: // 계정 충돌 break; default: // 기타 예외 상황 break; } }]; |
Game Center 업적 UI 요청
Apple Game Center의 업적 UI를 요청하기 위해서는 showAchievements()
함수를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.ProviderApple.showAchievements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Provider Apple 업적 UI // using hive // Provider Apple 업적 UI 콜백 핸들러 public void onShowAchievement(ResultAPI result) { Logger.log("ProviderTestView.onShowAchievement() Callback\nresult = " + result.toString() + "\n"); if (result.isSuccess() != true) return; } // Provider Apple 업적 UI 요청 ProviderApple.showAchievements(onShowAchievement); |
API Reference: ProviderApple::showAchievements
1 2 3 4 5 6 7 8 9 10 |
// Provider Apple 업적 UI 요청 ProviderApple::showAchievements([=](ResultAPI const & result) { // 결과 콜백 cout<<"ProviderApple::showAchievements() Callback"<<endl<<result.toString()<<endl; if (result.isSuccess() != true) return; }); |
API Reference: HIVEProviderApple::showAchievements:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Provider Apple 업적 UI 요청 [HIVEProviderApple showAchievements:^(HIVEResultAPI *result) { Loggerd(@"HIVEProviderApple.showAchievements:\nresult = %@", result); if (result.isSuccess) { } else { } }]; |
Game Center 업적 초기화
Apple Game Center의 업적 초기화를 요청하기 위해서는 resetAchievements()
함수를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.ProviderApple.resetAchievements
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Provider Apple 업적 초기화 // using hive // Provider Apple 업적 초기화 콜백 핸들러 public void onResetAchievements(ResultAPI result) { Logger.log("ProviderTestView.onResetAchievements() Callback\nresult = " + result.toString() + "\n"); if (result.isSuccess() != true) return; } ProviderApple.resetAchievements(onResetAchievements); |
API Reference: ProviderApple::resetAchievements
1 2 3 4 5 6 7 8 9 10 |
// Provider Apple 업적 초기화 ProviderApple::resetAchievements([=](ResultAPI const & result) { // 결과 콜백 cout<<"ProviderApple::resetAchievements() Callback"<<endl<<result.toString()<<endl; if (result.isSuccess() != true) return; }); |
API Reference: HIVEProviderApple::resetAchievements:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Provider Apple 업적 초기화 요청 [HIVEProviderApple resetAchievements:^(HIVEResultAPI *result) { Loggerd(@"HIVEProviderApple.resetAchievements:\nresult = %@", result); if (result.isSuccess) { } else { } }]; |
리더보드 (Leaderboard)
Hive를 이용해 Apple Game Center의 리더보드 (Leaderboard) 기능을 사용하기 위해서는 ProviderApple 클래스를 사용하면 됩니다.
Game Center 리더보드 정보 전송
Apple Game Center에 리더보드 정보 전송을 위해서는 reportScore()
함수를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.ProviderApple.reportScore
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// Provider Apple 리더보드 정보 전송 // using hive // Provider Apple 리더보드 정보 전송 콜백 핸들러 public void onReportLeaderboard(ResultAPI result) { Logger.log("ProviderTestView.onReportLeaderboard() Callback\nresult = " + result.toString() + "\n"); if (result.isSuccess() != true) return; } String Player_Score="1234" // Provider Apple 리더보드 정보 전송 요청 ProviderApple.reportScore(Player_Score, "{LEADERBOARD_IDENTIFIER}", onReportLeaderboard) |
API Reference: ProviderApple::reportScore
1 2 3 4 5 6 7 8 9 10 11 |
std::string Player_Score = "1234"; // Provider Apple 리더보드 정보 전송 요청 ProviderApple::reportScore(Player_Score, "{LEADERBOARD_IDENTIFIER}", [=](ResultAPI const & result) { // 결과 콜백 cout<<"ProviderApple::reportScore() Callback"<<endl<<result.toString()<<endl; if (result.isSuccess() != true) return; }); |
API Reference: HIVEProviderApple::reportScore:leaderboardIdentifier:handler:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
NSString *score = @"1234"; // Provider Apple 리더보드 전송 요청 [HIVEProviderApple reportScore:score leaderboardIdentifier:{LEADERBOARD_IDENTIFIER} handler:^(HIVEResultAPI *result) { Loggerd(@"HIVEProviderApple.reportScore:leaderboardIdentifier:handler:\nresult = %@", result); if (result.isSuccess) { } else { } }]; |
Game Center 리더보드 UI 요청(Helper)
Apple Game Cente에 리더보드 UI 요청을 위해서는 showLeaderboard()
함수를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.AuthV4.Helper.showLeaderboard
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Provider Apple 리더보드 정보 UI 요청 AuthV4.Helper.showLeaderboard (delegate (ResultAPI result, AuthV4.PlayerInfo playerInfo) { switch(result.code) { case ResultAPI.Code.Success: // 리더보드 표시와 함께 Success 전달 break; case ResultAPI.Code.AuthV4ConflictPlayer: // 계정 충돌 break; default: // 기타 예외 상황 break; } }); |
API Reference: AuthV4::Helper::showLeaderboard
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// Provider Apple 리더보드 정보 UI 요청 AuthV4::Helper::showLeaderboard([=](ResultAPI const & result, std::shared_ptr<PlayerInfo> playerInfo) { switch (result.code) { case ResultAPI::Success: // 리더보드 표시와 함께 Success 전달 break; case ResultAPI::AuthV4ConflictPlayer: // 계정 충돌 break; default: break; } }); |
API Reference: HIVEProviderApple::showLeaderboard:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Provider Apple 리더보드 UI 요청 [[HIVEAuthV4 helper] showLeaderboard:^(HIVEResultAPI *result, HIVEPlayerInfo *playerInfo) { // 현재 로그인 된 Hive 계정이 GameCenter에 연결되지 않았을 경우 // 자동으로 GameCenter에 Connect를 시도함 switch(result.code) { case kSuccess: // 리더보드 표시와 함께 Success 전달 break; case kAuthV4ConflictPlayer: // 계정 충돌 break; default: // 기타 예외 상황 break; } }]; |
Game Center 리더보드 UI 요청
Apple Game Cente에 리더보드 UI 요청을 위해서는 showLeaderboard()
함수를 호출하세요.
다음은 예제 코드입니다.
API Reference: hive.ProviderApple.showLeaderboard
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Provider Apple 리더보드 정보 UI // using hive // Provider Apple 리더보드 정보 UI 콜백 핸들러 public void onShowLeaderboard(ResultAPI result) { Logger.log("ProviderTestView.onShowLeaderboard() Callback\nresult = " + result.toString() + "\n"); if (result.isSuccess() != true) return; } // Provider Apple 리더보드 정보 UI 요청 ProviderApple.showLeaderboard(onShowLeaderboard); |
API Reference: ProviderApple::showLeaderboard
1 2 3 4 5 6 7 8 9 10 |
// Provider Apple 리더보드 정보 UI 요청 ProviderApple::showLeaderboard([=](ResultAPI const & result) { // 결과 콜백 cout<<"ProviderApple::showLeaderboard() Callback"<<endl<<result.toString()<<endl; if (result.isSuccess() != true) return; }); |
API Reference: HIVEProviderApple::showLeaderboard:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Provider Apple 리더보드 UI 요청 [HIVEProviderApple showLeaderboard:^(HIVEResultAPI *result) { Loggerd(@"HIVEProviderApple.showLeaderboard:\nresult = %@", result); if (result.isSuccess) { } else { } }]; |
사진첩 포스팅
게임에서 기기의 사진첩을 호출하고, 페이스북에 사진을 게시할 수 있습니다. 다음은 예제 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// 사진첩 공유하기 타입 설정 SocialV4.ProviderType providerType = SocialV4.ProviderType.FACEBOOK; // 사진첩 공유하기 결과 콜백 핸들러 public void onSharePhoto(ResultAPI result) { if (result.isSuccess()) { // API 호출 성공 } } // 사진첩 공유하기 호출 SocialV4.sharePhoto(providerType, onSharePhoto); |
1 2 3 4 5 6 7 8 9 |
// 사진첩 공유하기 타입 설정 SocialV4::ProviderType providerType = SocialV4::ProviderType::FACEBOOK; // 사진첩 공유하기 호출 SocialV4::sharePhoto(SocialV4::ProviderType::FACEBOOK, [=](ResultAPI const & result) { if (result.isSuccess()) { // API 호출 성공 } }); |
1 2 3 4 5 6 7 8 9 10 11 12 |
// 사진첩 공유하기 타입 설정 SocialV4.ProviderType providerType = SocialV4.ProviderType.FACEBOOK; // 사진첩 공유하기 호출 SocialV4.sharePhoto(providerType, new SocialV4.SocialV4SharePhotoListener() { @Override public void onShare(ResultAPI result) { if (result.isSuccess()) { // API 호출 성공 } } }); |
1 2 3 4 5 6 7 8 |
// 사진첩 공유하기 타입 설정 let providerType = SocialProviderType.Facebook // 사진첩 공유하기 호출 SocialV4Interface.sharePhoto(providerType) { result in if result.isSuccess() { // API 호출 성공 } } |