목차 |
---|
...
...
|
...
초기화 및 상태변화 이벤트 처리
...
SDK 초기화
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
std::map<std::wstring, std::wstring> kakaoSetting, facebookSetting, googleSetting; kakaoSetting.insert(std::pair<std::wstring, std::wstring>(TEXT("jsKey"), TEXT("acd84e5c92067a159573483d8877de67b8fbf489943235c3ca873cd8804ca9c6"))); facebookSetting.insert( std::map<KakaoGame::Data::KGTIdpCode, std::pair<stdmap<std::wstring, std::wstring>(TEXT("clientId"), TEXT("1421382574931990"))); googleSettingwstring>> idpSettings; idpSettings.insert(std:::pair<stdpair<KakaoGame::Data::KGTIdpCode, std::map<std::wstring, std::wstring>(TEXT("clientId"), TEXT("1002041625464-s2ruvcn1auv3rksr799gb4matvtvppb5.apps.googleusercontent.com")wstring>>(KakaoGame::Data::KGTIdpCode::Kakao, kakaoSetting)); googleSetting.insert(std KakaoGame::pair<stdData::wstring, std::wstring>(KGTConfig config; config.setAppInfo( TEXT("clientSecret1113970"), // appID TEXT("5MtQUUZ1sHl7RYgrhee-7-225b23360a86e87ba790b39475a98579bd")));, std::map<KakaoGame::Data::KGTIdpCode, std::map<std::wstring, std::wstring>> idpSettings; idpSettings.insert(std::pair<KakaoGame::Data::KGTIdpCode, std::map<std::wstring, std::wstring>>(// appSecret TEXT("1.0.0"), // appVersion TEXT("gameWeb"), // market TEXT(""), // ageRating KakaoGame::Data::KGTIdpCodeKGTServerType::KakaoQA, kakaoSetting)); idpSettings.insert(std::pair<KakaoGame::Data::KGTIdpCode, std::map<std::wstring, std::wstring>>(// server type KakaoGame::Data::KGTIdpCodeKGTLogLevel::FacebookNone, facebookSetting)); idpSettings.insert(std::pair<KakaoGame::Data::KGTIdpCode, std::map<std::wstring, std::wstring>>(KakaoGame::Data::KGTIdpCode::Google, googleSetting)); /** * 단일 앱으로 사용하는 경우 */ KakaoGame::Data::KGTConfig config; config.setAppInfo( TEXT("909428"), // appID TEXT("c3c38bbfa3828b342d946e9770c974d0"), // appSecret TEXT("1.0.0"), // appVersion TEXT("gameWeb"), // market TEXT("14"), // ageRating KakaoGame::Data::KGTServerType::QA, // server type KakaoGame::Data::KGTLogLevel::Error, // log level idpSettings // idpSettings ); /** * 앱 그룹을 사용하는 경우 */ std::map<std::wstring, std::wstring> apps; apps.insert(std::pair<std::wstring, std::wstring>(TEXT("909428"), TEXT("c3c38bbfa3828b342d946e9770c974d0"))); apps.insert(std::pair<std::wstring, std::wstring>(TEXT("921478"), TEXT("5891c32124ca35821890a0bc1cec77a5"))); apps.insert(std::pair<std::wstring, std::wstring>(TEXT("921482"), TEXT("43d0abf4ba4025994068607c545f04dc"))); apps.insert(std::pair<std::wstring, std::wstring>(TEXT("947947"), TEXT("3c7fde7309a1fad65961110e8e290e28"))); apps.insert(std::pair<std::wstring, std::wstring>(TEXT("947950"), TEXT("7cc67cba7e3406585543d493f1548473"))); config.setAppGroupInfos( TEXT("tubeAppGroup"), // appGroupId apps, // app info map TEXT("1.0.0"), // appVersion TEXT("gameWeb"), // market TEXT("14"), // ageRating KakaoGame::Data::KGTServerType::QA, // server type KakaoGame::Data::KGTLogLevel::Error, // log level idpSettings // idpSettings ); KakaoGame::API::KGTApplication applicationApi; applicationApi.initSDK(config); |
스타트 (Start) 하기
...
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::Data::KGTResult result;
KakaoGame::API::KGTApplication applicationApi;
applicationApi.start(GetSafeHwnd(), result);
if (result.isSuccess())
{
// 스타트가 성공 한 경우
// 자동로그인 여부
KakaoGame::API::KGTPlayer playerApi;
boolean isLoggedIn = playerApi.isLoggedIn();
if (isLoggedIn)
{
// 플랫폼에서 발급한 현재 Player의 ID
KakaoGame::Data::KGTPlayer player;
playerApi.getCurrentPlayer(player);
std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID
std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken)
// [TODO] 게임 화면으로 이동 합니다.
}
else
{
// [TODO] 자동로그인이 안 된 경우 로그인 화면으로 이동 합니다.
}
}
else
{
// 스타트가 실패 한 경우 - 초기화가 실패한 경우 이므로 스타트를 재시도 하거나 앱을 종료 하여야 합니다.
if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
{
// [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도
} else
{
// [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 스타트 재시도 요청 하여야 합니다. - 문제가 반복해서 발생하는 경우 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
}
} |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::API::KGTApplication applicationApi; applicationApi.start(GetSafeHwnd(), [this](KakaoGame::Data::KGTResult result) { if (result.isSuccess()) { // 스타트가 성공 한 경우 // 자동로그인 여부 KakaoGame::API::KGTPlayer playerApi; boolean isLoggedIn = playerApi.isLoggedIn(); if (isLoggedIn) // log level idpSettings // idpSettings ); KakaoGame::API::KGTApplication applicationApi; applicationApi.initSDK(config); |
스타트 (Start) 하기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::Data::KGTResult result;
KakaoGame::API::KGTApplication applicationApi;
applicationApi.start(GetSafeHwnd(), result);
if (result.isSuccess())
{
// 스타트가 성공 한 경우
// 자동로그인 여부
KakaoGame::API::KGTPlayer playerApi;
boolean isLoggedIn = playerApi.isLoggedIn();
if (isLoggedIn)
{
// 플랫폼에서 발급한 현재 Player의 ID
KakaoGame::Data::KGTPlayer player;
playerApi.getCurrentPlayer(player);
std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID
std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken)
// [TODO] 게임 화면으로 이동 합니다.
}
else
{
// [TODO] 자동로그인이 안 된 경우 로그인 화면으로 이동 합니다.
}
}
else
{
// 스타트가 실패 한 경우 - 초기화가 실패한 경우 이므로 스타트를 재시도 하거나 앱을 종료 하여야 합니다.
if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
{
// [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도
} else
{
// [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 스타트 재시도 요청 하여야 합니다. - 문제가 반복해서 발생하는 경우 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
}
} |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::API::KGTApplication applicationApi; applicationApi.start(GetSafeHwnd(), [this](KakaoGame::Data::KGTResult result) { if (result.isSuccess()) { // 스타트가 성공 한 경우 // 자동로그인 여부 KakaoGame::API::KGTPlayer playerApi; boolean isLoggedIn = playerApi.isLoggedIn(); if (isLoggedIn) { // 플랫폼에서 발급한 현재 Player의 ID KakaoGame::Data::KGTPlayer player; playerApi.getCurrentPlayer(player); std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken) // [TODO] 게임 화면으로 이동 합니다. } else { // [TODO] 자동로그인이 안 된 경우 로그인 화면으로 이동 합니다. } } else { // 스타트가 실패 한 경우 - 초기화가 실패한 경우 이므로 스타트를 재시도 하거나 앱을 종료 하여야 합니다. if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code || KakaoGame::Data::KGTResultCode::ServerTimeout == result.code || KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code) { // [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도 } else { // 플랫폼에서[TODO] 발급한나머지 현재에러가 Player의발생한 ID KakaoGame::Data::KGTPlayer player; playerApi.getCurrentPlayer(player); std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken) // [TODO] 게임 화면으로 이동 합니다. } else { // [TODO] 자동로그인이 안 된 경우 로그인 화면으로 이동 합니다. } } else { // 스타트가 실패 한 경우 - 초기화가 실패한 경우 이므로 스타트를 재시도 하거나 앱을 종료 하여야 합니다. if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code || KakaoGame::Data::KGTResultCode::ServerTimeout == result.code || KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code) { // [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도 } else { // [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 스타트 재시도 요청 하여야 합니다. - 문제가 반복해서 발생하는 경우 에러코드 및 로그 확인 후 원인 파악이 필요합니다. } } }); |
특정 appId로 스타트 (Start) 하기
...
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
// 사용자가 선택한 appId 또는 기존에 사용자가 선택한 appId를 저장 후 얻어오는 부분은 게임이 구현
std::wstring selectedAppId = TEXT("");
KakaoGame::Data::KGTResult result;
KakaoGame::API::KGTApplication applicationApi;
applicationApi.start(GetSafeHwnd(), selectedAppId, result);
if (result.isSuccess())
{
// 스타트가 성공 한 경우
// 자동로그인 여부
KakaoGame::API::KGTPlayer playerApi;
boolean isLoggedIn = playerApi.isLoggedIn();
if (isLoggedIn)
{
// 플랫폼에서 발급한 현재 Player의 ID
KakaoGame::Data::KGTPlayer player;
playerApi.getCurrentPlayer(player);
std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID
std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken)
// [TODO] 게임 화면으로 이동 합니다.
}
else
{
// [TODO] 자동로그인이 안 된 경우 로그인 화면으로 이동 합니다.
}
}
else
{
// 스타트가 실패 한 경우 - 초기화가 실패한 경우 이므로 스타트를 재시도 하거나 앱을 종료 하여야 합니다.
if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
{
// [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도
} else
{
// [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 스타트 재시도 요청 하여야 합니다. - 문제가 반복해서 발생하는 경우 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
}
} |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
// 사용자가 선택한 appId 또는 기존에 사용자가 선택한 appId를 저장 후 얻어오는 부분은 게임이 구현
std::wstring selectedAppId = TEXT("");
KakaoGame::API::KGTApplication applicationApi;
applicationApi.start(GetSafeHwnd(), selectedAppId, [this](KakaoGame::Data::KGTResult result) {
if (result.isSuccess())
{
// 스타트가 성공 한 경우
// 자동로그인 여부
KakaoGame::API::KGTPlayer playerApi;
boolean isLoggedIn = playerApi.isLoggedIn();
if (isLoggedIn)
{
// 플랫폼에서 발급한 현재 Player의 ID
KakaoGame::Data::KGTPlayer player;
playerApi.getCurrentPlayer(player);
std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID
std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken)
// [TODO] 게임 화면으로 이동 합니다.
}
else
{
// [TODO] 자동로그인이 안 된 경우 로그인 화면으로 이동 합니다.
}
}
else
{
// 스타트가 실패 한 경우 - 초기화가 실패한 경우 이므로 스타트를 재시도 하거나 앱을 종료 하여야 합니다.
if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
{
// [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도
}
else
{
// [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 스타트 재시도 요청 하여야 합니다. - 문제가 반복해서 발생하는 경우 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
}
}
}); |
로그인
...
기본 로그인 UI를 사용하는 로그인하기
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::Data::KGTResult result;
KakaoGame::API::KGTPlayer playerApi;
playerApi.login(GetSafeHwnd(), result);
if (result.isSuccess())
{
// IDP 로그인과 플랫폼 로그인 성공
KakaoGame::Data::KGTPlayer player;
KakaoGame::API::KGTPlayer playerApi;
playerApi.getCurrentPlayer(player);
std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID
std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken)
// [TODO] 로그인이 성공하였으므로 게임 화면으로 이동합니다.
}
else
{
// IDP 로그인 혹은 플랫폼 로그인 실패
// [TODO] 로그인 실패 시 사용자 안내 후 재 시도 하도록 하여야 합니다.
if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
{
// [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도
}
else if (KakaoGame::Data::KGTResultCode::Forbidden== result.code)
{
// [TODO] CBT기간동안 허용된 유저외에는 인증이 불가능 할 수 있습니다. 유저에게 안내메시지 처리가 필요합니다.
}
else if (KakaoGame::Data::KGTResultCode::UserCanceled== result.code)
{
// [TODO] 사용자가 로그인 진행 중 취소한 상황이므로 로그인 화면을 유지 하여야 합니다.
}
else
{
// [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
}
} |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTPlayer playerApi;
playerApi.login(GetSafeHwnd(), [this](KakaoGame::Data::KGTResult result) {
if (result.isSuccess())
{
// IDP 로그인과 플랫폼 로그인 성공
KakaoGame::Data::KGTPlayer player;
KakaoGame::API::KGTPlayer playerApi;
playerApi.getCurrentPlayer(player);
std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID
std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken)
// [TODO] 로그인이 성공하였으므로 게임 화면으로 이동합니다.
}
else
{
// IDP 로그인 혹은 플랫폼 로그인 실패
// [TODO] 로그인 실패 시 사용자 안내 후 재 시도 하도록 하여야 합니다.
if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
{
// [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도
}
else if (KakaoGame::Data::KGTResultCode::Forbidden== result.code)
{
// [TODO] CBT기간동안 허용된 유저외에는 인증이 불가능 할 수 있습니다. 유저에게 안내메시지 처리가 필요합니다.
}
else if (KakaoGame::Data::KGTResultCode::UserCanceled== result.code)
{
// [TODO] 사용자가 로그인 진행 중 취소한 상황이므로 로그인 화면을 유지 하여야 합니다.
}
else
{
// [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
}
}
}); |
기본 로그인 UI를 사용하지 않는 로그인하기
...
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
// 로그인 하고자 하는 idpCode 셋팅
KakaoGame::Data::KGTIdpCode idpCode = KakaoGame::Data::KGTIdpCode::Kakao;
KakaoGame::Data::KGTResult result;
KakaoGame::API::KGTPlayer playerApi;
playerApi.login(GetSafeHwnd(), idpCode, result);
if (result.isSuccess())
{
// IDP 로그인과 플랫폼 로그인 성공
KakaoGame::Data::KGTPlayer player;
KakaoGame::API::KGTPlayer playerApi;
playerApi.getCurrentPlayer(player);
std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID
std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken)
// [TODO] 로그인이 성공하였으므로 게임 화면으로 이동합니다.
}
else
{
// IDP 로그인 혹은 플랫폼 로그인 실패
// [TODO] 로그인 실패 시 사용자 안내 후 재 시도 하도록 하여야 합니다.
if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
{
// [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도
}
else if (KakaoGame::Data::KGTResultCode::Forbidden== result.code)
{
// [TODO] CBT기간동안 허용된 유저외에는 인증이 불가능 할 수 있습니다. 유저에게 안내메시지 처리가 필요합니다.
}
else if (KakaoGame::Data::KGTResultCode::UserCanceled== result.code)
{
// [TODO] 사용자가 로그인 진행 중 취소한 상황이므로 로그인 화면을 유지 하여야 합니다.
}
else
{
// [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
}
} |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
// 로그인 하고자 하는 idpCode 셋팅
KakaoGame::Data::KGTIdpCode idpCode = KakaoGame::Data::KGTIdpCode::Kakao;
KakaoGame::API::KGTPlayer playerApi;
playerApi.login(GetSafeHwnd(), idpCode, [this](KakaoGame::Data::KGTResult result) {
if (result.isSuccess())
{
// IDP 로그인과 플랫폼 로그인 성공
KakaoGame::Data::KGTPlayer player;
KakaoGame::API::KGTPlayer playerApi;
playerApi.getCurrentPlayer(player);
std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID
std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken)
// [TODO] 로그인이 성공하였으므로 게임 화면으로 이동합니다.
}
else
{
// IDP 로그인 혹은 플랫폼 로그인 실패
// [TODO] 로그인 실패 시 사용자 안내 후 재 시도 하도록 하여야 합니다.
if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
{
// [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도
}
else if (KakaoGame::Data::KGTResultCode::Forbidden== result.code)
{
// [TODO] CBT기간동안 허용된 유저외에는 인증이 불가능 할 수 있습니다. 유저에게 안내메시지 처리가 필요합니다.
}
else if (KakaoGame::Data::KGTResultCode::UserCanceled== result.code)
{
// [TODO] 사용자가 로그인 진행 중 취소한 상황이므로 로그인 화면을 유지 하여야 합니다.
}
else
{
// [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
}
}
}); |
스퀘어 토큰을 사용하여 로그인하기
경우에는 에러 안내 후 스타트 재시도 요청 하여야 합니다. - 문제가 반복해서 발생하는 경우 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
}
}
}); |
윈도우즈 환경에서 자동로그인 설정하기
윈도우즈 환경에서 지원하는 기능입니다.
SDK에서 제공하는 기본 로그인 UI를 사용하지 않고, 로그인 UI를 직접 구현하는 경우 자동로그인 방식을 설정하는 기능을 제공합니다.
자동로그인 유무를 설정하지 않으면 기본으로 자동로그인을 위한 파일을 생성하지 않습니다.
자동로그인을 위한 파일이 생성되는 위치는 ".kakaogames" 폴더에 ".access"이름의 파일에 암호화되어 저장하고 있습니다.
게임을 삭제하고 재 설치 시 자동로그인 파일이 남아 있는 경우 자동로그인이 진행되는 것을 막기 위해 윈도우SDK파일(KakaoGame.dll)위치에 암호화된 ".access"파일이 존재하는지 여부를 체크하고 정상적인 파일일 때 자동로그인 정보가 들어있는 파일을 불러와 자동로그인을 수행합니다.
자동로그인을 위한 파일들이 손상되면 해당 파일들을 삭제합니다.
자동로그인을 위한 파일이 존재한 상태에서 로그아웃이나 탈퇴를 진행하면 자동로그인을 위한 파일이 삭제됩니다.
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
// 자동로그인사용 유무를 세팅, 세팅하지 않으면 사용하지 않음 상태로 세팅
// 자동로그인사용설정으로 로그인이 성공하면 자동로그인정보가 생성됨
// 자동로그인정보가 존재하면 다음 KGTApplication의 start시에 자동로그인이 진행됨으로 자동로그인정보를 제거하려면 로그아웃을 진행해야함
bool useAutoLogin = true;
KakaoGame::API::KGTApplication applicationApi;
applicationApi.setUseAutoLogin(useAutoLogin); |
로그인
...
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
기본 로그인 UI를 사용하지 않는 로그인하기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // 로그인을로그인 하고자 요청하는하는 사용자idpCode 아이디 std::wstring playerId; // 스퀘어에서 전달받은 토큰 std::wstring squareToken셋팅 KakaoGame::Data::KGTIdpCode idpCode = KakaoGame::Data::KGTIdpCode::Kakao; KakaoGame::Data::KGTResult result; KakaoGame::API::KGTPlayer playerApi; playerApi.loginIdpWithSquareTokenlogin(GetSafeHwnd(), playerId, squareTokenidpCode, result); if (result.isSuccess()) { // IDP 로그인과 플랫폼 로그인 성공 KakaoGame::Data::KGTPlayer player; KakaoGame::API::KGTPlayer playerApi; playerApi.getCurrentPlayer(player); std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken) // [TODO] 로그인이 성공하였으므로 게임 화면으로 이동합니다. } else { // IDP 로그인 혹은 플랫폼 로그인 실패 // [TODO] 로그인 실패 시 사용자 안내 후 재 시도 하도록 하여야 합니다. if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code || KakaoGame::Data::KGTResultCode::ServerTimeout == result.code || KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code) { // [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도 } else { // [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다. } } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // 로그인을 요청하는 사용자 아이디 std::wstring playerId; // 스퀘어에서 전달받은 토큰 std::wstring squareToken; KakaoGame::API::KGTPlayer playerApi; playerApi.login(GetSafeHwnd(), playerId, squareToken, [this](KakaoGame::Data::KGTResult result) { if (result.isSuccess()) { // [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도 } else if (KakaoGame::Data::KGTResultCode::Forbidden== result.code) { // [TODO] CBT기간동안 허용된 유저외에는 인증이 불가능 할 수 있습니다. 유저에게 안내메시지 처리가 필요합니다. } else if (KakaoGame::Data::KGTResultCode::UserCanceled== result.code) { // IDP 로그인과 플랫폼 로그인 성공 KakaoGame::Data::KGTPlayer player; KakaoGame::API::KGTPlayer playerApi; playerApi.getCurrentPlayer(player); std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken) // [TODO] 로그인이 성공하였으므로 게임 화면으로 이동합니다. } else { // IDP 로그인 혹은 플랫폼 로그인 실패 // [TODO] 로그인 실패 시 사용자 안내 후 재 시도 하도록 하여야 합니다. if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code || KakaoGame::Data::KGTResultCode::ServerTimeout == result.code || KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code) { [TODO] 사용자가 로그인 진행 중 취소한 상황이므로 로그인 화면을 유지 하여야 합니다. } else { // [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다. } } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // 로그인 하고자 하는 idpCode 셋팅 KakaoGame::Data::KGTIdpCode idpCode = KakaoGame::Data::KGTIdpCode::Kakao; KakaoGame::API::KGTPlayer playerApi; playerApi.login(GetSafeHwnd(), idpCode, [this](KakaoGame::Data::KGTResult result) { if (result.isSuccess()) { // IDP 로그인과 플랫폼 로그인 성공 KakaoGame::Data::KGTPlayer player; KakaoGame::API::KGTPlayer playerApi; playerApi.getCurrentPlayer(player); std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken) // [TODO] 네트워크로그인이 에러가성공하였으므로 발생한게임 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도 화면으로 이동합니다. } else { // IDP 로그인 혹은 플랫폼 로그인 실패 // [TODO] 나머지로그인 에러가실패 발생한시 경우에는 에러사용자 안내 후 로그인재 재시도시도 요청하도록 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다. } } }); |
로그아웃
...
기본 로그아웃 UI를 사용하는 로그아웃하기
...
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::Data::KGTResult result;
KakaoGame::API::KGTPlayer playerApi;
playerApi.logout(GetSafeHwnd(), true, result);
if (result.isSuccess())
{
// 로그아웃 성공
// [TODO] 시작 화면으로 돌아가기
}
else
{
// 로그아웃 실패
} |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::API::KGTPlayer playerApi; playerApi.logout(GetSafeHwnd(), true, [this](KakaoGame::Data::KGTResult result) { if (result.isSuccess()) { // 로그아웃 성공 // [TODO] 시작 화면으로 돌아가기 } else { // 로그아웃 실패 } }); if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code || KakaoGame::Data::KGTResultCode::ServerTimeout == result.code || KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code) { // [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도 } else if (KakaoGame::Data::KGTResultCode::Forbidden== result.code) { // [TODO] CBT기간동안 허용된 유저외에는 인증이 불가능 할 수 있습니다. 유저에게 안내메시지 처리가 필요합니다. } else if (KakaoGame::Data::KGTResultCode::UserCanceled== result.code) { // [TODO] 사용자가 로그인 진행 중 취소한 상황이므로 로그인 화면을 유지 하여야 합니다. } else { // [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다. } } }); |
로그아웃
...
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
기본 로그아웃 UI를 사용하지 않는 로그아웃하기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
...
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::Data::KGTResult result; KakaoGame::API::KGTPlayer playerApi; playerApi.logout(GetSafeHwnd(), false, result); if (result.isSuccess()) { // 로그아웃채널링에서는 성공 // [TODO] 시작 화면으로 돌아가기 } else { // 로그아웃 실패 } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::API::KGTPlayer playerApi; 강제로 로그아웃 UI를 표시하지 않는다. playerApi.logout(GetSafeHwnd(), false, [this](KakaoGame::Data::KGTResult result); { if (result.isSuccess()) { // 로그아웃 성공 // [TODO] 시작 화면으로 돌아가기 } else { // 로그아웃 실패 } }); |
탈퇴
계정 연결
...
기본 계정 연결 UI를 사용하는 계정 연결하기
...
동기식 예제
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::Data::KGTResult result;" KakaoGame::API::KGTPlayer playerApi; // 채널링에서는 강제로 로그아웃 UI를 표시하지 않는다. playerApi.connectlogout(GetSafeHwnd(), false, [this](KakaoGame::Data::KGTResult result); { if (result.isSuccess()) { // IDP로그아웃 연결 성공 // Player ID 는 변경되지 않습니다. } else { // IDP 연결 실패 if (KakaoGame::Data::KGTResultCode::InvalidParameter== result.code) { // 잘못된 인자가 전달 된 경우[TODO] 시작 화면으로 돌아가기 } else if (KakaoGame::Data::KGTResultCode::NotAuthorized== result.code) { // 현재로그아웃 로그인이실패 안되어 있는 경우 } else if ( } }); |
탈퇴
...
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
기본 탈퇴 UI를 사용하지 않는 탈퇴하기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::Data::KGTResultCode::InvalidState==KGTResult result.code) { // 현재 인증 된 IDP 가 계정 연결 가능한 idp가 아닌 경우 } else if (KakaoGame::Data::KGTResultCode::AlreadyUsedIDPAccount== result.code) { // 이미 연결되어 있는 계정이 있는 경우 } else { // 기타 에러 발생 } ; KakaoGame::API::KGTPlayer playerApi; playerApi.unregister(GetSafeHwnd(), false, result); if (result.isSuccess()) { // 탈퇴 성공 // [TODO] 시작 화면으로 돌아가기 } else { // 탈퇴 실패 } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::API::KGTPlayer playerApi; playerApi.connectunregister(GetSafeHwnd(), false, [this](KakaoGame::Data::KGTResult result) { if (result.isSuccess()) { // 탈퇴 성공 // IDP 연결 성공[TODO] 시작 화면으로 돌아가기 } else { // 탈퇴 Player실패 ID 는 변경되지 않습니다. } else { // IDP 연결 실패 if (KakaoGame::Data::KGTResultCode::InvalidParameter== result.code) { // 잘못된 인자가 전달 된 경우 } else if (KakaoGame::Data::KGTResultCode::NotAuthorized== result.code) { // 현재 로그인이 안되어 있는 경우 } else if (KakaoGame::Data::KGTResultCode::InvalidState== result.code) { // 현재 인증 된 IDP 가 계정 연결 가능한 idp가 아닌 경우 } else if (KakaoGame::Data::KGTResultCode::AlreadyUsedIDPAccount== result.code) { // 이미 연결되어 있는 계정이 있는 경우 } else { // 기타 에러 발생 } } }); |
기본 계정 연결 UI를 사용하지 않는 계정 연결하기
...
}
}); |
프로필
내 정보 조회하기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::Data::KGTPlayer player;
KakaoGame::API::KGTPlayer playerApi;
playerApi.getCurrentPlayer(player); |
내 IDP 정보 조회하기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::Data::KGTPlayer player;
KakaoGame::API::KGTPlayer playerApi;
playerApi.getCurrentPlayer(player);
player.kakaoProfile; |
시스템 정보
...
언어 코드 가져오기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring languageCode = systemApi.getLanguageCode(); |
언어 태그 가져오기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring languageCode = systemApi.getLanguageTag(); |
국가 코드 가져오기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // 연결하고자 하는 idpCode 셋팅 KakaoGame::Data::KGTIdpCode idpCode = KakaoGame::Data::KGTIdpCode::Kakao;KakaoGame::API::KGTSystem systemApi; std::wstring countryCode = systemApi.getCountryCode(); |
IP 기반 국가 코드 가져오기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::DataAPI::KGTResultKGTSystem resultsystemApi; KakaoGamestd::API::KGTPlayer playerApi; playerApi.connect(GetSafeHwnd(), idpCode, result); if (result.isSuccess()) { // IDP 연결 성공 // Player ID 는 변경되지 않습니다. } else { // IDP 연결 실패 if (KakaoGame::Data::KGTResultCode::InvalidParameter== result.code) { // 잘못된 인자가 전달 된 경우 } else if (KakaoGame::Data::KGTResultCode::NotAuthorized== result.code) { // 현재 로그인이 안되어 있는 경우 } else if (KakaoGame::Data::KGTResultCode::InvalidState== result.code) { // 현재 인증 된 IDP 가 계정 연결 가능한 idp가 아닌 경우 } else if (KakaoGame::Data::KGTResultCode::AlreadyUsedIDPAccount== result.code) { // 이미 연결되어 있는 계정이 있는 경우 } else { // 기타 에러 발생 } } |
...
wstring countryCode = systemApi.getGeoCountryCode(); |
기기 아이디 가져오기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring deviceId = systemApi.getDeviceId(); |
기기 모델 가져오기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring deviceModel = systemApi.getDeviceModel(); |
OS 이름 가져오기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring osName = systemApi.getOSName(); |
네트워크 연결 여부 가져오기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
boolean networkConnected = systemApi.isNetworkConnected(); |
연결된 네트워크 타입 가져오기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // 연결하고자 하는 idpCode 셋팅 KakaoGame::Data::KGTIdpCode idpCode =KakaoGame::API::KGTSystem systemApi; std::wstring networkType = systemApi.getNetworkType(); |
카카오 연동 기능
...
카카오톡 게임 메시지 수신 여부 설정하기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::Data::KGTIdpCode::Kakao; KGTResult result; bool isAlloweMe; KakaoGame::API::KGTPlayerKGTKakaoTalk playerApi; playerApi.connectkakaotalkApi; // 카카오톡 게임 메시지 수신 여부 설정 뷰 띄우기 kakaotalkApi.showSetting(GetSafeHwnd(), idpCoderesult, [this](KakaoGame::Data::KGTResult result) { isAlloweMe); if (result.isSuccess()) { // IDP카카오톡 연결게임 성공 // Player ID 는 변경되지 않습니다. } else { // IDP 연결 실패 메시지 수신 여부 설정 성공 isAlloweMe; // 설정된 메시지 수신 허용 여부 } else if (KakaoGame::Data::KGTResultCodeKGTResult::InvalidParameterNotKakaoTalkUser == result.code) { // 잘못된 인자가 전달 된 경우 } else if (KakaoGame::Data::KGTResultCode::NotAuthorized== result.code) { // 현재 로그인이 안되어 있는 경우 } else if 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우. } else { // 카카오톡 게임 메시지 수신 여부 설정 실패 } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::API::KGTKakaoTalk kakaotalkApi; // 카카오톡 게임 메시지 수신 여부 설정 뷰 띄우기 kakaotalkApi.showSetting(GetSafeHwnd(), [this](KakaoGame::Data::KGTResultCode::InvalidState== result.codeKGTResult result, bool isAlloweMe) { if (result.isSuccess()) { // 현재 인증 된 IDP 가 계정 연결 가능한 idp가 아닌 경우 } 카카오톡 게임 메시지 수신 여부 설정 성공 isAlloweMe; // 설정된 메시지 수신 허용 여부 } else if (KakaoGame::Data::KGTResultCodeKGTResult::AlreadyUsedIDPAccountNotKakaoTalkUser == result.code) { // 이미 연결되어 있는 계정이 있는 경우 } else { // 기타 에러 발생 } } }); |
프로필
내 정보 조회하기
...
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::Data::KGTPlayer player;
KakaoGame::API::KGTPlayer playerApi;
playerApi.getCurrentPlayer(player); |
내 IDP 정보 조회하기
...
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::Data::KGTPlayer player;
KakaoGame::API::KGTPlayer playerApi;
playerApi.getCurrentPlayer(player);
player.kakaoProfile; |
시스템 정보
언어 코드 가져오기
...
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring languageCode = systemApi.getLanguageCode(); |
언어 태그 가져오기
...
// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
}
else
{
// 카카오톡 게임 메시지 수신 여부 설정 실패
}
}); |
카카오톡 프로필 조회하기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::APIData::KGTSystemKGTResult systemApiresult; std::wstring languageCode = systemApi.getLanguageTag(); |
국가 코드 가져오기
...
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring countryCode = systemApi.getCountryCode(); |
IP 기반 국가 코드 가져오기
...
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring countryCode = systemApi.getGeoCountryCode(); |
기기 아이디 가져오기
...
KakaoGame::Data::KGTKakaoTalkProfile profile;
KakaoGame::API::KGTKakaoTalk kakaotalkApi;
// 카카오톡 프로필 조회하기
kakaotalkApi.talkProfile(result, profile);
if (result.isSuccess())
{
// 카카오톡 프로필 조회 성공
profile; // 로그인한 유저의 카카오톡 프로필 정보
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
{
// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
}
else
{
// 카카오톡 프로필 조회 실패
} |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::API::KGTSystemKGTKakaoTalk systemApi; std::wstring deviceId = systemApi.getDeviceId(); |
기기 모델 가져오기
...
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring deviceModel = systemApi.getDeviceModel(); |
OS 이름 가져오기
...
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring osName = systemApi.getOSName(); |
네트워크 연결 여부 가져오기
...
kakaotalkApi;
// 카카오톡 프로필 조회하기
kakaotalkApi.talkProfile([this](KakaoGame::Data::KGTResult result, KakaoGame::Data::KGTKakaoTalkProfile profile) {
if (result.isSuccess())
{
// 카카오톡 프로필 조회 성공
profile; // 로그인한 유저의 카카오톡 프로필 정보
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
{
// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
}
else
{
// 카카오톡 프로필 조회 실패
}
}); |
카카오톡 게임 친구 목록 조회하기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::Data::KGTResult result; std::vector<KakaoGame::Data::KGTPlayer> players; KakaoGame::API::KGTSystemKGTKakaoTalk systemApikakaotalkApi; boolean networkConnected = systemApi.isNetworkConnected(); |
연결된 네트워크 타입 가져오기
...
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring networkType = systemApi.getNetworkType(); |
설정된 게임 언어 코드 가져오기
설정된 게임 언어 코드를 반환한다.
설정된 언어 코드가 없는 경우 기기에 설정되어 있는 언어 설정 정보를 가져오며, 언어 코드는 ISO 639-1 표준에 따른 값을 반환한다.
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h"
KakaoGame::API::KGTSystem systemApi;
std::wstring gameLanguageCode = systemApi.getGameLanguageCode(); |
게임 언어 코드 설정하기
게임에서 사용하는 언어를 플랫폼에서 동기화 해서 사용하도록 설정한다.
아래와 같은 언어 코드를 지원한다.
(Start API 호출 이전에 설정 가능)
device: 디바이스 설정 값. 디바이스 설정 값으로 되돌릴 때 사용할 수 있음. (default)
en: 영어
ko: 한국어
ja: 일어
zh_hant: 중국어 (번체)
zh_hans: 중국어 (간체)
// 게임 친구 목록 조회하기
kakaotalkApi.friends(result, players);
if (result.isSuccess())
{
// 카카오톡 게임 친구 목록 조회 성공.
// 게임 친구 목록
for each (auto player in players)
{
}
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
{
// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
}
else
{
// 카카오톡 프로필 조회 실패
} |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::API::KGTKakaoTalk kakaotalkApi; // 게임 친구 목록 조회하기 kakaotalkApi.friends([this](KakaoGame::Data::KGTLanguageCodeKGTResult languageCode = KakaoGameresult, std::Datavector<KakaoGame::KGTLanguageCode::en; // 영어 // KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::ko; // 한국어 // KakaoGame::Data::KGTLanguageCode languageCode = Data::KGTPlayer> players) { if (result.isSuccess()) { // 카카오톡 게임 친구 목록 조회 성공. // 게임 친구 목록 for each (auto player in players) { } } else if (KakaoGame::Data::KGTLanguageCodeKGTResult::ja; // 일어 // KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::zh_hant; // 중국어 (번체) // KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::zh_hans; // 중국어 (간체) KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::device; // 디바이스 설정 값 KakaoGame::API::KGTSystem systemApi; systemApi.setGameLanguageCode(languageCode); |
카카오 연동 기능
...
NotKakaoTalkUser == result.code)
{
// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
}
else
{
// 카카오톡 게임 친구 목록 조회 실패
}
}); |
카카오톡 게임 메시지 보내기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // friends API를 통해 가져온 친구 객체 KakaoGame::Data::KGTResult result; bool isAlloweMe; KakaoGame::API::KGTKakaoTalk kakaotalkApiKGTKakaoProfile kakaoProfile; // [TODO] 템플릿 Id 설정 std::wstring templateId = TEXT(""); // 카카오톡[TODO] 게임메시지 메시지템플릿에 수신설정한 여부인자 설정 뷰 띄우기 kakaotalkApi.showSetting(GetSafeHwnd(), result, isAlloweMe); if (result.isSuccess()) { // 카카오톡 게임 메시지 수신 여부 설정 성공 isAlloweMe; // 설정된 메시지 수신 허용 여부 } else if (std::map<std::wstring, std::wstring> arguments; arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("${nickname}"), kakaoProfile.nickname)); arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("rog_link"), TEXT("test=100&hello=20111"))); arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("bruce2"), kTEXT("test=100&hello=20111"))); KakaoGame::Data::KGTResult result; KakaoGame::NotKakaoTalkUser == result.code) { API::KGTKakaoTalk kakaotalkApi; // 로그인카카오톡 한게임 유저가메시지 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우. } else 보내기 kakaotalkApi.sendGameMessage(kakaoProfile, templateId, arguments, result); if (result.isSuccess()) { // 카카오톡 게임채팅 메시지 수신 여부 설정 실패 } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::API::KGTKakaoTalk kakaotalkApi; // 카카오톡 게임 메시지 수신 여부 설정 뷰 띄우기 kakaotalkApi.showSetting(GetSafeHwnd(), [this]보내기 성공 } else if (KakaoGame::Data::KGTResult::MessageSettingDisabled == result.code) { // 받은이가 메시지 수신 거부를 설정한 경우 } else if (KakaoGame::Data::KGTResult result, bool isAlloweMe) { if (result.isSuccess()) ::ExceedDailyUsage == result.code) { // 카카오톡한명이 게임특정 메시지앱에 수신대해 여부보낼 설정 성공 isAlloweMe; // 설정된 메시지 수신 허용 여부 } 수 있는 하루 쿼터(받는 사람 관계없이) 초과시 발생 } else if (KakaoGame::Data::KGTResult::NotKakaoTalkUserExceedMonthlyUsage == result.code) { { // 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우. } else { // 카카오톡 게임 메시지 수신 여부 설정 실패 } }); |
카카오톡 프로필 조회하기
...
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::Data::KGTResult result; KakaoGame::Data::KGTKakaoTalkProfile profile; // 한명이 특정 앱에 대해 특정인에게 보낼 수 있는 한달 쿼터 초과시 발생 } else { // 카카오톡 채팅 메시지 보내기 실패 } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // friends API를 통해 가져온 친구 객체 KakaoGame::Data::KGTKakaoProfile kakaoProfile; // [TODO] 템플릿 Id 설정 std::wstring templateId = TEXT(""); // [TODO] 메시지 템플릿에 설정한 인자 설정 std::map<std::wstring, std::wstring> arguments; arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("${nickname}"), kakaoProfile.nickname)); arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("rog_link"), TEXT("test=100&hello=20111"))); arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("bruce2"), kTEXT("test=100&hello=20111"))); KakaoGame::API::KGTKakaoTalk kakaotalkApi; // 카카오톡 프로필게임 메시지 조회하기보내기 kakaotalkApi.talkProfile(result, profile); sendGameMessage(kakaoProfile, templateId, arguments, [this](KakaoGame::Data::KGTResult result) { if (result.isSuccess()) { // 카카오톡 채팅 프로필메시지 조회보내기 성공 profile; // 로그인한 유저의 카카오톡 프로필 정보 } else if (KakaoGame::Data::KGTResult::NotKakaoTalkUserMessageSettingDisabled == result.code) { // 로그인받은이가 한메시지 유저가수신 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우. } else { // 카카오톡 프로필 조회 실패 } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::API::KGTKakaoTalk kakaotalkApi; // 카카오톡 프로필 조회하기 kakaotalkApi.talkProfile([this]거부를 설정한 경우 } else if (KakaoGame::Data::KGTResult result, KakaoGame::Data::KGTKakaoTalkProfile profile) { if (result.isSuccess()ExceedDailyUsage == result.code) { // 한명이 카카오톡특정 앱에 프로필대해 조회보낼 성공 profile; // 로그인한 유저의 카카오톡 프로필 정보수 있는 하루 쿼터(받는 사람 관계없이) 초과시 발생 } else if (KakaoGame::Data::KGTResult::NotKakaoTalkUserExceedMonthlyUsage == result.code) { // 로그인한명이 한특정 유저가앱에 '카카오톡'대해 유저가특정인에게 아닙니다.보낼 카카오수 스토리만있는 가입한한달 유저의쿼터 계정과초과시 같이 카카오톡 유저가 아닌 경우. 발생 } else { // 카카오톡 채팅 프로필메시지 조회보내기 실패 } }); |
카카오톡
...
채널 추가하기
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // [TODO] 채널 Id 설정 int channelId = 0; KakaoGame::Data::KGTResult result; std::vector<KakaoGame::Data::KGTPlayer> players; KakaoGame::API::KGTKakaoTalk kakaotalkApi; // 게임 친구 목록 조회하기 kakaotalkApi.friendsaddChannel(resultchannelId, playersresult); if (result.isSuccess()) { // 카카오톡 게임 친구 목록 조회 성공. // 게임 친구 목록 for each (auto player in players) { } 채널 추가 성공 } else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code) { // 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우. } else { // 카카오톡채널 프로필 조회추가 실패 } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" KakaoGame::API::KGTKakaoTalk kakaotalkApi; // 게임 친구 목록 조회하기 kakaotalkApi.friends([this](KakaoGame::Data::KGTResult result, std::vector<KakaoGame::Data::KGTPlayer> players) { if (result.isSuccess()) { // 카카오톡 게임 친구 목록 조회 성공. // 게임[TODO] 친구채널 목록Id for설정 eachint (autochannelId player= in0; players) { } } else if KakaoGame::API::KGTKakaoTalk kakaotalkApi; kakaotalkApi.addChannel(channelId, [this](KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code result) { if (result.isSuccess()) { // 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우. 채널 추가 성공 } else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code) { // 카카오톡로그인 게임 친구 목록 조회 실패 } }); |
카카오톡 게임 메시지 보내기
...
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // friends API를 통해 가져온 친구 객체 KakaoGame::Data::KGTKakaoProfile kakaoProfile; // [TODO] 템플릿 Id 설정 std::wstring templateId = TEXT("");한 유저가 '카카오톡' 유저가 아닙니다. (카카오톡 유저가 아닌 경우) } else { // 채널 추가 실패 } }); |
내 초대 메시지로 가입한 친구 목록 조회하기
내 초대 메시지로 가입한 친구 목록을 조회하는 예제입니다.
가입한 친구가 없는 경우 빈 객체로 전달됩니다.
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // [TODO] 메시지이벤트 템플릿에Id 설정한 인자 설정 std::map<std::wstring, std::wstring> arguments; arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("${nickname}"), kakaoProfile.nickname)); arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("rog_link"), TEXT("test=100&hello=20111"))); arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("bruce2"), kTEXT("test=100&hello=20111"))); KakaoGameint32 eventId = 0; KakaoGame::Data::KGTResult result; std::vector<KakaoGame::Data::KGTResultKGTPlayer> resultplayers; KakaoGame::API::KGTKakaoTalkKGTKakaoInvitation kakaotalkApikakaoInvitationApi; // 카카오톡내가 게임초대한 메시지 보내기 kakaotalkApi.sendGameMessage(kakaoProfile, templateId, arguments, result); if (result.isSuccess()) { // 카카오톡 채팅 메시지 보내기 성공 } else if (KakaoGame::Data::KGTResult::MessageSettingDisabled == result.code플레이어 목록 조회하기 kakaoInvitationApi.joiners(eventId, result, players); if (result.isSuccess()) { // 내가 받은이가초대한 메시지플레이어 수신목록 거부를가져오기 설정한 경우 } else iffor (KakaoGame::Data::KGTResult::ExceedDailyUsage == result.code) { // 한명이 특정 앱에 대해 보낼 수 있는 하루 쿼터(받는 사람 관계없이) 초과시 발생 } else if (KakaoGame::Data::KGTResult::ExceedMonthlyUsage == result.code) { // 한명이 특정 앱에 대해 특정인에게 보낼 수 있는 한달 쿼터 초과시 발생 } else { // 카카오톡 채팅 메시지 보내기 실패 } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // friends API를 통해 가져온 친구 객체 KakaoGame::Data::KGTKakaoProfile kakaoProfile; // [TODO] 템플릿 Id 설정 std::wstring templateId = TEXT(""); // [TODO] 메시지 템플릿에 설정한 인자 설정 std::map<std::wstring, std::wstring> arguments; arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("${nickname}"), kakaoProfile.nickname)); arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("rog_link"), TEXT("test=100&hello=20111"))); arguments.insert(std::pair<std::wstring, std::wstring>(TEXT("bruce2"), kTEXT("test=100&hello=20111"))); KakaoGame::API::KGTKakaoTalk kakaotalkApi; // 카카오톡 게임 메시지 보내기 kakaotalkApi.sendGameMessage(kakaoProfile, templateId, arguments, KGTPlayer player : players) { // 수신자의 플레이어 아이디 player.playerId; // 수신자의 닉네임 player.kakaoProfile.nickname; // 수신자의 프로필 썸네일 이미지 player.kakaoProfile.thumbnailImageUrl; // 수신지의 탈퇴 이력 조회. UI상에서 탈퇴 여부 정보를 표시할 경우 해당 flag를 사용. player.kakaoProfile.isUnregistered; } } else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code) { // 로그인 한 유저가 '카카오톡' 유저가 아닙니다. (카카오톡 유저가 아닌 경우) } else { // 호출 실패 } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // [TODO] 이벤트 Id 설정 int32 eventId = 0; // 내가 초대한 플레이어 목록 조회하기 KakaoGame::API::KGTKakaoInvitation kakaoInvitationApi; kakaoInvitationApi.joiners(eventId, [this](KakaoGame::Data::KGTResult result, int32_t totalReceiversCount, int32_t joinersCount) { if (result.isSuccess()) { // 카카오톡내가 채팅초대한 메시지플레이어 보내기목록 성공가져오기 } else iffor (KakaoGame::Data::KGTResult::MessageSettingDisabled == result.codeKGTPlayer player : players) { // 받은이가수신자의 플레이어 메시지 수신 거부를 설정한 경우 } else if (KakaoGame::Data::KGTResult::ExceedDailyUsage == result.code) { 아이디 player.playerId; // 수신자의 닉네임 player.kakaoProfile.nickname; // 수신자의 프로필 썸네일 이미지 player.kakaoProfile.thumbnailImageUrl; // 한명이 특정 앱에 대해 보낼 수 있는 하루 쿼터(받는 사람 관계없이) 초과시 발생수신지의 탈퇴 이력 조회. UI상에서 탈퇴 여부 정보를 표시할 경우 해당 flag를 사용. player.kakaoProfile.isUnregistered; } } else if (KakaoGame::Data::KGTResult::ExceedMonthlyUsageNotKakaoTalkUser == result.code) { // 한명이로그인 특정한 앱에유저가 대해'카카오톡' 특정인에게유저가 보낼아닙니다. 수(카카오톡 있는유저가 한달아닌 쿼터 초과시 발생 경우) } else { // 카카오톡 채팅 메시지 보내기 호출 실패 } }); |
카카오톡 채널 추가하기
...
내가 초대 메시지를 보낸 친구 숫자 조회하기
내가 초대 메시지를 보낸 친구 숫자를 조회하는 예제입니다.
동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // [TODO] 채널이벤트 Id 설정 intint32 channelIdeventId = 0; KakaoGame::Data::KGTResult result; int32 totalReceiversCount; int32 joinersCount; KakaoGame::API::KGTKakaoTalkKGTKakaoInvitation kakaotalkApikakaoInvitationApi; // kakaotalkApi.addChannel(channelId내가 초대한 플레이어 숫자 조회하기 kakaoInvitationApi.receiversCount(eventId, result, totalReceiversCount, joinersCount); if (result.isSuccess()) { // 호출 성공 // 채널 추가 성공 totalReceiversCount - 전체 친구 수 // joinersCount - 게임에 가입한 친구 수 } else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code) { // 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 (카카오톡 유저가 아닌 경우.) } else { // 채널호출 추가 실패 } |
비동기식 예제
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameLib.h" // [TODO] 채널이벤트 Id 설정 intint32 channelIdeventId = 0; // 내가 초대한 플레이어 숫자 조회하기 KakaoGame::API::KGTKakaoTalkKGTKakaoInvitation kakaotalkApikakaoInvitationApi; kakaotalkApikakaoInvitationApi.addChannelreceiversCount(channelIdeventId, [this](KakaoGame::Data::KGTResult result, int32_t totalReceiversCount, int32_t joinersCount) { if (result.isSuccess()) { // 채널 추가 성공 호출 성공 // totalReceiversCount - 전체 친구 수 // joinersCount - 게임에 가입한 친구 수 } else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code) { // 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 (카카오톡 유저가 아닌 경우.) } else { // 채널 추가호출 실패 } }); |