버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.
목차
stylenone

...

초기화 및 상태변화 이벤트 처리

...

SDK 초기화

발췌문 삽입
초기화 및 상태변화 이벤트 처리 SDK 예제
초기화 및 상태변화 이벤트 처리 SDK 예제
nameapplication_init_sdk
nopaneltrue

코드 블럭
languagecpp
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::wstring, stdData::wstring>(TEXT("clientId"), TEXT("1002041625464-s2ruvcn1auv3rksr799gb4matvtvppb5.apps.googleusercontent.com")));
googleSetting.insert(KGTIdpCode, std::pair<stdmap<std::wstring, std::wstring>(TEXT("clientSecret"), TEXT("5MtQUUZ1sHl7RYgrhee-7-22")));

std::map<KakaoGame::wstring>>(KakaoGame::Data::KGTIdpCode, std::map<std::wstringKakao, std::wstring>> idpSettings;
idpSettings.insert(std::pair<KakaoGame::Data::KGTIdpCode, std::map<std::wstring, std::wstring>>(kakaoSetting));

KakaoGame::Data::KGTIdpCode::Kakao, kakaoSetting))KGTConfig config;
idpSettings.insert(std::pair<KakaoGame::Data::KGTIdpCode, std::map<std::wstring, std::wstring>>(config.setAppInfo(
	TEXT("1113970"), // appID
	TEXT("5b23360a86e87ba790b39475a98579bd"), // appSecret
	TEXT("1.0.0"), // appVersion
	TEXT("gameWeb"), // market
	TEXT(""), // ageRating
	KakaoGame::Data::KGTIdpCodeKGTServerType::FacebookQA, facebookSetting));
idpSettings.insert(std::pair<KakaoGame::Data::KGTIdpCode, std::map<std::wstring, std::wstring>>( // server type
	KakaoGame::Data::KGTIdpCodeKGTLogLevel::GoogleNone, googleSetting));

/**
 * 단일 앱으로 사용하는 경우
 */// log level
	idpSettings // idpSettings
);

KakaoGame::DataAPI::KGTConfigKGTApplication configapplicationApi;
configapplicationApi.setAppInfo(
	TEXT("909428"), // appID
	TEXT("c3c38bbfa3828b342d946e9770c974d0"), // appSecret
	TEXT("1.0.0"), // appVersion
	TEXT("gameWeb"), // market
	TEXT("14"), // ageRating
	initSDK(config);

스타트 (Start) 하기

발췌문 삽입
초기화 및 상태변화 이벤트 처리 SDK 예제
초기화 및 상태변화 이벤트 처리 SDK 예제
nameapplication_start
nopaneltrue

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::Data::KGTServerType::QA, // server type
	KGTResult result;
KakaoGame::DataAPI::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) 하기

...

동기식 예제

코드 블럭
languagecpp
#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)
	{
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] 나머지 에러가 발생한 경우에는 에러 안내 후 스타트 재시도 요청 하여야 합니다. - 문제가 반복해서 발생하는 경우 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
	}
}

비동기식 예제

코드 블럭
languagecpp
#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
	{
		// 스타트가 [TODO]실패 나머지 에러가경우 발생한- 경우에는초기화가 에러실패한 안내경우 이므로 스타트스타트를 재시도 하거나 요청앱을 종료 하여야 합니다.
- 문제가 반복해서 발생하는 경우 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
	}
}

비동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTApplication applicationApi;

applicationApi.start(GetSafeHwnd(), [this](		if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
			|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
			|| KakaoGame::Data::KGTResult result) {
	if (result.isSuccess()KGTResultCode::ConnectionFailed == result.code)
		{
			// 스타트가[TODO] 성공네트워크 에러가 경우발생한 		
		// 자동로그인 여부
		KakaoGame::API::KGTPlayer playerApi;
		boolean isLoggedIn = playerApi.isLoggedIn();
		
		if (isLoggedIn)경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도
		}
		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] 나머지 에러가 발생한 경우에는 에러 안내 후 스타트 재시도 요청 하여야 합니다. - 문제가 반복해서 발생하는 경우 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
		}
	}
});

로그인

...

기본 로그인 UI를 사용하지 않는 로그인하기

...

동기식 예제

코드 블럭
languagecpp
#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] 나머지 에러가 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
	}
}

...

에러 안내 후 스타트 재시도 요청 하여야 합니다. - 문제가 반복해서 발생하는 경우 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
		}
	}
});

윈도우즈 환경에서 자동로그인 설정하기

윈도우즈 환경에서 지원하는 기능입니다.

SDK에서 제공하는 기본 로그인 UI를 사용하지 않고, 로그인 UI를 직접 구현하는 경우 자동로그인 방식을 설정하는 기능을 제공합니다.

  • 자동로그인 유무를 설정하지 않으면 기본으로 자동로그인을 위한 파일을 생성하지 않습니다.

  • 자동로그인을 위한 파일이 생성되는 위치는 ".kakaogames" 폴더에 ".access"이름의 파일에 암호화되어 저장하고 있습니다.

  • 게임을 삭제하고 재 설치 시 자동로그인 파일이 남아 있는 경우 자동로그인이 진행되는 것을 막기 위해 윈도우SDK파일(KakaoGame.dll)위치에 암호화된 ".access"파일이 존재하는지 여부를 체크하고 정상적인 파일일 때 자동로그인 정보가 들어있는 파일을 불러와 자동로그인을 수행합니다.

  • 자동로그인을 위한 파일들이 손상되면 해당 파일들을 삭제합니다.

  • 자동로그인을 위한 파일이 존재한 상태에서 로그아웃이나 탈퇴를 진행하면 자동로그인을 위한 파일이 삭제됩니다.

코드 블럭
languagecpp
#include "KakaoGameLib.h"
// 자동로그인사용 유무를 세팅, 세팅하지 않으면 사용하지 않음 상태로 세팅
// 자동로그인사용설정으로 로그인이 성공하면 자동로그인정보가 생성됨
// 자동로그인정보가 존재하면 다음 KGTApplication의 start시에 자동로그인이 진행됨으로 자동로그인정보를 제거하려면 로그아웃을 진행해야함
bool useAutoLogin = true;
KakaoGame::API::KGTApplication applicationApi;

applicationApi.setUseAutoLogin(useAutoLogin);

로그인

...

발췌문 삽입
로그인 SDK 예제
로그인 SDK 예제
namelogin
nopaneltrue

기본 로그인 UI를 사용하지 않는 로그인하기

발췌문 삽입
로그인 SDK 예제
로그인 SDK 예제
namelogin_custom
nopaneltrue

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// 로그인 하고자 하는 idpCode 셋팅
KakaoGame::Data::KGTIdpCode idpCode = KakaoGame::Data::KGTIdpCode::Kakao;

KakaoGame::Data::KGTResult result;
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] 나머지 에러가 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
		}
	}
});

스퀘어 토큰을 사용하여 로그인하기

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// 로그인을 요청하는 사용자 아이디
std::wstring playerId;

// 스퀘어에서 전달받은 토큰
std::wstring squareToken;

KakaoGame::Data::KGTResult result;
KakaoGame::API::KGTPlayer playerApi;

playerApi.loginIdpWithSquareToken(GetSafeHwnd(), playerId, squareToken, result);

if (result.isSuccess())
{
	// IDP 로그인과 플랫폼 로그인 성공
	KakaoGame::Data::KGTPlayer player;
	 진행 중 취소한 상황이므로 로그인 화면을 유지 하여야 합니다.
	}
	else
	{
		// [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
	}
}

비동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// 로그인 하고자 하는 idpCode 셋팅
KakaoGame::Data::KGTIdpCode idpCode = KakaoGame::Data::KGTIdpCode::Kakao;

KakaoGame::API::KGTPlayer playerApi;
	
	playerApi.getCurrentPlayerlogin(GetSafeHwnd(player);, 	
	std::wstring playerId = player.playerId; // 플랫폼에서 발급한 현재 Player의 ID
	std::wstring accessToken = playerApi.getAccessToken(); // 플랫폼 액세스 토큰(AccessToken)
	
	// [TODO] 로그인이 성공하였으므로 게임 화면으로 이동합니다.
}
else
{
idpCode, [this](KakaoGame::Data::KGTResult result) {
	if (result.isSuccess())
	{
		// IDP 로그인 혹은로그인과 플랫폼 로그인 실패
	// [TODO] 로그인 실패 시 사용자 안내 후 재 시도 하도록 하여야 합니다.
	if (성공
		KakaoGame::Data::KGTResultCode::NetworkFailure == result.codeKGTPlayer player;
		|| KakaoGame::DataAPI::KGTResultCode::ServerTimeout == result.codeKGTPlayer playerApi;
		
		playerApi.getCurrentPlayer(player);
		||
KakaoGame		std::Data::KGTResultCode::ConnectionFailedwstring playerId == result.code)
	{
		player.playerId; // [TODO]플랫폼에서 네트워크발급한 에러가현재 발생한Player의 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도
	}
	else
	{
		// [TODO] 나머지 에러가 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
	}
}

비동기식 예제

코드 블럭
languagecpp
#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())
	{
		// 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 로그인 혹은 플랫폼 로그인 실패
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] 나머지 로그인에러가 실패발생한 경우에는 사용자에러 안내 후 로그인 시도재시도 하도록요청 하여야 합니다.
		if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
			|| 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
		}
	}
});

로그아웃

...

발췌문 삽입
로그아웃 SDK 예제
로그아웃 SDK 예제
namelogout
nopaneltrue

기본 로그아웃 UI를 사용하지 않는 로그아웃하기

발췌문 삽입
로그아웃 SDK 예제
로그아웃 SDK 예제
namelogout_custom
nopaneltrue

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
			||KGTResult result;
KakaoGame::DataAPI::KGTResultCode::ConnectionFailed == result.code)
		{
			// [TODO] 네트워크 에러가 발생한 경우에는 유저에게 네트워크 이슈로 스타트에 실패했음을 알리고 재시도
		}
		else
		{
			KGTPlayer playerApi;

// 채널링에서는 강제로 로그아웃 UI를 표시하지 않는다.
playerApi.logout(GetSafeHwnd(), false, result);

if (result.isSuccess())
{
	// 로그아웃 성공
	
	// [TODO] 나머지시작 에러가화면으로 발생한 경우에는 에러 안내 후 로그인 재시도 요청 하여야 합니다. - 에러코드 및 로그 확인 후 원인 파악이 필요합니다.
		}
	}
});

로그아웃

...

기본 로그아웃 UI를 사용하지 않는 로그아웃하기

...

돌아가기
}
else
{
	// 로그아웃 실패
}

비동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::Data::KGTResult result;
KakaoGame::API::KGTPlayer playerApi;

// 채널링에서는 강제로 로그아웃 UI를 표시하지 않는다.
playerApi.logout(GetSafeHwnd(), false, [this](KakaoGame::Data::KGTResult result); {
	if (result.isSuccess())
	{
		// 로그아웃 성공
		
		// [TODO] 시작 화면으로 돌아가기
	}
	else
	{
		// 로그아웃 실패
	}
}

...

);

탈퇴

...

발췌문 삽입
탈퇴 SDK 예제
탈퇴 SDK 예제
nameunregister
nopaneltrue

기본 탈퇴 UI를 사용하지 않는 탈퇴하기

발췌문 삽입
탈퇴 SDK 예제
탈퇴 SDK 예제
nameunregister_custom
nopaneltrue

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::Data::KGTResult result;
KakaoGame::API::KGTPlayer playerApi;

playerApi.logoutunregister(GetSafeHwnd(), false, [this](KakaoGame::Data::KGTResult result);
{
	if (result.isSuccess())
	{
		// 로그아웃탈퇴 성공
		
		// [TODO] 시작 화면으로 돌아가기
	}
	else
	{
		// 로그아웃 실패
	}
});

탈퇴

계정 연결

...

기본 계정 연결 UI를 사용하지 않는 계정 연결하기

...

탈퇴 실패
}

비동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// 연결하고자 하는 idpCode 셋팅
KakaoGame::Data::KGTIdpCode idpCode = KakaoGame::Data::KGTIdpCode::Kakao;

KakaoGame::Data::KGTResult
result;
KakaoGame::API::KGTPlayer playerApi;

playerApi.connectunregister(GetSafeHwnd(), idpCode,false, [this](KakaoGame::Data::KGTResult result); {
	if (result.isSuccess())
{
	// IDP 연결 성공
	// Player ID 는 변경되지 않습니다.
}
else
{
	// IDP 연결 실패
	if (KakaoGame::Data::KGTResultCode::InvalidParameter== result.code)
	{
		// 탈퇴 성공
		
		// [TODO] 시작 화면으로 돌아가기
	}
	else
	{
		// 잘못된탈퇴 인자가실패
전달 된 경우
	}
	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
	{
		// 기타 에러 발생
	}
}

비동기식 예제

	}
});

프로필

내 정보 조회하기

발췌문 삽입
프로필 SDK 예제
프로필 SDK 예제
nameplayer_currentPlayer
nopaneltrue

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::Data::KGTPlayer player;
KakaoGame::API::KGTPlayer playerApi;

playerApi.getCurrentPlayer(player);

내 IDP 정보 조회하기

발췌문 삽입
프로필 SDK 예제
프로필 SDK 예제
nameplayer_idpProfile
nopaneltrue

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::Data::KGTPlayer player;
KakaoGame::API::KGTPlayer playerApi;

playerApi.getCurrentPlayer(player);

player.kakaoProfile;

시스템 정보

...

언어 코드 가져오기

발췌문 삽입
시스템 정보 SDK 예제
시스템 정보 SDK 예제
namesystem_language_code
nopaneltrue

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring languageCode = systemApi.getLanguageCode();

언어 태그 가져오기

발췌문 삽입
시스템 정보 SDK 예제
시스템 정보 SDK 예제
namesystem_language_tag
nopaneltrue

코드 블럭
languagecpp
#include "KakaoGameLib.h"


// 연결하고자 하는 idpCode 셋팅
KakaoGame::Data::KGTIdpCode idpCode = KakaoGame::Data::KGTIdpCode::Kakao;

KakaoGame::API::KGTPlayer playerApi;

playerApi.connect(GetSafeHwnd(), idpCode, [this](KakaoGame::Data::KGTResult 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
		{
			// 기타 에러 발생
		}
	}
});

프로필

내 정보 조회하기

...

KakaoGame::API::KGTSystem systemApi;

std::wstring languageCode = systemApi.getLanguageTag();

국가 코드 가져오기

발췌문 삽입
시스템 정보 SDK 예제
시스템 정보 SDK 예제
namesystem_country_code
nopaneltrue

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring countryCode = systemApi.getCountryCode();

IP 기반 국가 코드 가져오기

발췌문 삽입
시스템 정보 SDK 예제
시스템 정보 SDK 예제
namesystem_geo_country_code
nopaneltrue

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring countryCode = systemApi.getGeoCountryCode();

기기 아이디 가져오기

발췌문 삽입
시스템 정보 SDK 예제
시스템 정보 SDK 예제
namesystem_device_id
nopaneltrue

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring deviceId = systemApi.getDeviceId();

기기 모델 가져오기

발췌문 삽입
시스템 정보 SDK 예제
시스템 정보 SDK 예제
namesystem_device_model
nopaneltrue

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring deviceModel = systemApi.getDeviceModel();

OS 이름 가져오기

발췌문 삽입
시스템 정보 SDK 예제
시스템 정보 SDK 예제
namesystem_os_name
nopaneltrue

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring osName = systemApi.getOSName();

네트워크 연결 여부 가져오기

발췌문 삽입
시스템 정보 SDK 예제
시스템 정보 SDK 예제
namesystem_is_network_connected
nopaneltrue

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

boolean networkConnected = systemApi.isNetworkConnected();

연결된 네트워크 타입 가져오기

발췌문 삽입
시스템 정보 SDK 예제
시스템 정보 SDK 예제
namesystem_network_type
nopaneltrue

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring networkType = systemApi.getNetworkType();

카카오 연동 기능

...

카카오톡 게임 메시지 수신 여부 설정하기

발췌문 삽입
카카오 연동 기능 SDK 예제
카카오 연동 기능 SDK 예제
namekakao_talk_show_setting
nopaneltrue

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::Data::KGTPlayer playerKGTResult result;
bool isAlloweMe;
KakaoGame::API::KGTPlayerKGTKakaoTalk playerApi;

playerApi.getCurrentPlayer(player);

내 IDP 정보 조회하기

...

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::Data::KGTPlayer player;
KakaoGame::API::KGTPlayer playerApi;

playerApi.getCurrentPlayer(player);

player.kakaoProfile;

시스템 정보

언어 코드 가져오기

...

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring languageCode = systemApi.getLanguageCode();

언어 태그 가져오기

...

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring languageCode = systemApi.getLanguageTag();

국가 코드 가져오기

...

kakaotalkApi;

// 카카오톡 게임 메시지 수신 여부 설정 뷰 띄우기
kakaotalkApi.showSetting(GetSafeHwnd(), result, isAlloweMe);

if (result.isSuccess())
{
	// 카카오톡 게임 메시지 수신 여부 설정 성공
	isAlloweMe; // 설정된 메시지 수신 허용 여부
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
{
	// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
}
else
{
	// 카카오톡 게임 메시지 수신 여부 설정 실패
}

비동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystemKGTKakaoTalk systemApi;

std::wstring countryCode = systemApi.getCountryCode();

IP 기반 국가 코드 가져오기

...

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring countryCode = systemApi.getGeoCountryCode();

기기 아이디 가져오기

...

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring deviceId = systemApi.getDeviceId();

기기 모델 가져오기

...

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring deviceModel = systemApi.getDeviceModel();

OS 이름 가져오기

...

kakaotalkApi;

// 카카오톡 게임 메시지 수신 여부 설정 뷰 띄우기
kakaotalkApi.showSetting(GetSafeHwnd(), [this](KakaoGame::Data::KGTResult result, bool isAlloweMe) {
	if (result.isSuccess())
	{
		// 카카오톡 게임 메시지 수신 여부 설정 성공
		isAlloweMe; // 설정된 메시지 수신 허용 여부
	}
	else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
	}
	else
	{
		// 카카오톡 게임 메시지 수신 여부 설정 실패
	}
});

카카오톡 프로필 조회하기

발췌문 삽입
카카오 연동 기능 SDK 예제
카카오 연동 기능 SDK 예제
namekakao_talk_talk_profile
nopaneltrue

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::APIData::KGTSystemKGTResult systemApiresult;

std::wstring osName = systemApi.getOSName();

네트워크 연결 여부 가져오기

...

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

boolean networkConnected = systemApi.isNetworkConnected();

연결된 네트워크 타입 가져오기

...

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

std::wstring networkType = systemApi.getNetworkType();

설정된 게임 언어 코드 가져오기

설정된 게임 언어 코드를 반환한다.

설정된 언어 코드가 없는 경우 기기에 설정되어 있는 언어 설정 정보를 가져오며, 언어 코드는 ISO 639-1 표준에 따른 값을 반환한다.

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
{
	// 카카오톡 프로필 조회 실패
}

비동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTSystemKGTKakaoTalk systemApi;

std::wstring gameLanguageCode = systemApi.getGameLanguageCode();

게임 언어 코드 설정하기

게임에서 사용하는 언어를 플랫폼에서 동기화 해서 사용하도록 설정한다.

아래와 같은 언어 코드를 지원한다.

(Start API 호출 이전에 설정 가능)

  • device: 디바이스 설정 값. 디바이스 설정 값으로 되돌릴 때 사용할 수 있음. (default)

  • en: 영어

  • ko: 한국어

  • ja: 일어

  • zh_hant: 중국어 (번체)

  • zh_hans: 중국어 (간체)

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// KakaoGame::Data::KGTLanguageCode languageCode = kakaotalkApi;

// 카카오톡 프로필 조회하기
kakaotalkApi.talkProfile([this](KakaoGame::Data::KGTResult result, KakaoGame::Data::KGTKakaoTalkProfile profile) {
	if (result.isSuccess())
	{
		// 카카오톡 프로필 조회 성공
		profile; // 로그인한 유저의 카카오톡 프로필 정보
	}
	else if (KakaoGame::Data::KGTLanguageCodeKGTResult::en; // 영어
// KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::ko; // 한국어
// KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::ja; // 일어
// KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::zh_hant; // 중국어 (번체)
//NotKakaoTalkUser == result.code)
	{
		// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
	}
	else
	{
		// 카카오톡 프로필 조회 실패
	}
});

카카오톡 게임 친구 목록 조회하기

발췌문 삽입
카카오 연동 기능 SDK 예제
카카오 연동 기능 SDK 예제
namekakao_talk_friends
nopaneltrue

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::Data::KGTLanguageCodeKGTResult languageCode = KakaoGameresult;
std::Data::KGTLanguageCode::zh_hans; // 중국어 (간체)
KakaoGame::vector<KakaoGame::Data::KGTLanguageCodeKGTPlayer> languageCode = KakaoGame::Dataplayers;
KakaoGame::KGTLanguageCodeAPI::deviceKGTKakaoTalk kakaotalkApi;

// 디바이스게임 설정친구 목록 
KakaoGame::API::KGTSystem systemApi;

systemApi.setGameLanguageCode(languageCode);

카카오 연동 기능

카카오톡 게임 메시지 수신 여부 설정하기

...

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

조회하기
kakaotalkApi.friends(result, players);

if (result.isSuccess())
{
	// 카카오톡 게임 친구 목록 조회 성공.
	// 게임 친구 목록
	for each (auto player in players)
	{
	}
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result;.code)
bool isAlloweMe;
KakaoGame::API::KGTKakaoTalk kakaotalkApi;

// 카카오톡 게임 메시지 수신 여부 설정 뷰 띄우기
kakaotalkApi.showSetting(GetSafeHwnd(), result, isAlloweMe);

if (result.isSuccess()){
	// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
}
else
{
	// 카카오톡 프로필 게임조회 메시지 수신 여부 설정 성공
	isAlloweMe;실패
}

비동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTKakaoTalk kakaotalkApi;

// 설정된게임 메시지친구 수신목록 허용 여부
}
else if 조회하기
kakaotalkApi.friends([this](KakaoGame::Data::KGTResult result, std::vector<KakaoGame::Data::NotKakaoTalkUser == result.code)
KGTPlayer> players) {
	if (result.isSuccess())
	{
		// 로그인카카오톡 게임 유저가친구 '카카오톡'목록 유저가조회 아닙니다성공.
카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
}
else
{
	// 카카오톡 게임 메시지 수신 여부 설정 실패
}

비동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::API::KGTKakaoTalk kakaotalkApi;

// 카카오톡 게임 메시지 수신 여부 설정 뷰 띄우기
kakaotalkApi.showSetting(GetSafeHwnd(), [this](KakaoGame::Data::KGTResult result, bool isAlloweMe) {
	if (result.isSuccess())		// 게임 친구 목록
		for each (auto player in players)
		{
		}
	}
	else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
	}
	else
	{
		// 카카오톡 게임 메시지친구 수신목록 여부조회 설정실패
성공
		isAlloweMe; // 설정된 메시지 수신 허용 여부
	}
	else if (	}
});

카카오톡 게임 메시지 보내기

발췌문 삽입
카카오 연동 기능 SDK 예제
카카오 연동 기능 SDK 예제
namekakao_talk_send_game_message
nopaneltrue

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// friends API를 통해 가져온 친구 객체
KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		KGTKakaoProfile kakaoProfile;

// 로그인[TODO] 템플릿 유저가Id '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
	}
	else
	{
		// 카카오톡 게임 메시지 수신 여부 설정 실패
	}
});

카카오톡 프로필 조회하기

...

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::Data::KGTResult result;설정
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::Data::KGTKakaoTalkProfileKGTResult profileresult;
KakaoGame::API::KGTKakaoTalk kakaotalkApi;

// 카카오톡 게임 프로필메시지 조회하기보내기
kakaotalkApi.talkProfile(result, profile);

if (result.isSuccess())sendGameMessage(kakaoProfile, templateId, arguments, result);

if (result.isSuccess())
{
	// 카카오톡 채팅 메시지 보내기 성공
}
else if (KakaoGame::Data::KGTResult::MessageSettingDisabled == result.code)
{
	// 받은이가 메시지 수신 거부를 설정한 경우
}
else if (KakaoGame::Data::KGTResult::ExceedDailyUsage == result.code)
{
	// 카카오톡 프로필 조회 성공
	profile; // 로그인한 유저의 카카오톡 프로필 정보한명이 특정 앱에 대해 보낼 수 있는 하루 쿼터(받는 사람 관계없이) 초과시 발생
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUserExceedMonthlyUsage == result.code)
{
	// 로그인한명이 특정 유저가앱에 '카카오톡'대해 유저가특정인에게 아닙니다.보낼 카카오 스토리만있는 가입한한달 유저의쿼터 계정과 같이 카카오톡 유저가 아닌 경우.초과시 발생
}
else
{
	// 카카오톡 채팅 프로필메시지 조회보내기 실패
}

비동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// friends API를 통해 가져온 친구 객체
KakaoGame::APIData::KGTKakaoTalkKGTKakaoProfile kakaotalkApikakaoProfile;

// 카카오톡 프로필 조회하기
kakaotalkApi.talkProfile([this](KakaoGame::Data::KGTResult result, KakaoGame::Data::KGTKakaoTalkProfile profile) {
	if (result.isSuccess())
	{
		// 카카오톡 프로필 조회 성공
		profile; // 로그인한 유저의 카카오톡 프로필 정보
	}
	else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
	}
	else
	{
		// 카카오톡 프로필 조회 실패
	}
});

카카오톡 게임 친구 목록 조회하기

...

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

KakaoGame::Data::KGTResult result;
std::vector<KakaoGame::Data::KGTPlayer> players;
KakaoGame::API::KGTKakaoTalk kakaotalkApi;

// 게임 친구 목록 조회하기
kakaotalkApi.friends(result, players);

if (result.isSuccess())
{
	// 카카오톡 게임 친구 목록 조회 성공.
	// 게임 친구 목록
	for each (auto player in players)
	{
	}
}
 [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, [this](KakaoGame::Data::KGTResult result) {
	if (result.isSuccess())
	{
		// 카카오톡 채팅 메시지 보내기 성공
	}
	else if (KakaoGame::Data::KGTResult::MessageSettingDisabled == result.code)
	{
		// 받은이가 메시지 수신 거부를 설정한 경우
	}
	else if (KakaoGame::Data::KGTResult::ExceedDailyUsage == result.code)
	{
		// 한명이 특정 앱에 대해 보낼 수 있는 하루 쿼터(받는 사람 관계없이) 초과시 발생
	}
	else if (KakaoGame::Data::KGTResult::NotKakaoTalkUserExceedMonthlyUsage == result.code)
	{
		// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
}
else
{
	// 카카오톡 프로필 조회 실패
}

...

한명이 특정 앱에 대해 특정인에게 보낼 수 있는 한달 쿼터 초과시 발생
	}
	else
	{
		// 카카오톡 채팅 메시지 보내기 실패
	}
});

카카오톡 채널 추가하기

발췌문 삽입
카카오 연동 기능 SDK 예제
카카오 연동 기능 SDK 예제
namekakao_talk_add_plus_friend
nopaneltrue

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// 
KakaoGame::API::KGTKakaoTalk kakaotalkApi;

// 게임 친구 목록 조회하기
kakaotalkApi.friends([this]([TODO] 채널 Id 설정
int channelId = 0;

KakaoGame::Data::KGTResult result,;
stdKakaoGame::vector<KakaoGame::Data::KGTPlayer> players) {
	API::KGTKakaoTalk kakaotalkApi;

kakaotalkApi.addChannel(channelId, result);

if (result.isSuccess())
	{
		// 카카오톡 게임 친구 목록 조회 성공.
		// 게임 친구 목록
		for each (auto player in players)
		{
		}
	}
	채널 추가 성공
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이 카카오톡 유저가 아닌 경우.
	}
	else
	{
		// 카카오톡 게임 친구 목록 조회채널 추가 실패
	}
});

카카오톡 게임 메시지 보내기

...

동기식 예제

코드 블럭
languagecpp
#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::Data::KGTResult result

비동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// [TODO] 채널 Id 설정
int channelId = 0;

KakaoGame::API::KGTKakaoTalk kakaotalkApi;

kakaotalkApi.addChannel(channelId, [this](KakaoGame::Data::KGTResult result) {
	if (result.isSuccess())
	{
		// 채널 추가 성공
	}
	else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. (카카오톡 유저가 아닌 경우)
	}
	else
	{
		// 채널 추가 실패
	}
});

내 초대 메시지로 가입한 친구 목록 조회하기

내 초대 메시지로 가입한 친구 목록을 조회하는 예제입니다.

가입한 친구가 없는 경우 빈 객체로 전달됩니다.

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// [TODO] 이벤트 Id 설정
int32 eventId = 0;

KakaoGame::Data::KGTResult result;
std::vector<KakaoGame::Data::KGTPlayer> players;
KakaoGame::API::KGTKakaoTalkKGTKakaoInvitation kakaotalkApikakaoInvitationApi;

// 내가 카카오톡초대한 게임플레이어 메시지목록 보내기조회하기
kakaotalkApikakaoInvitationApi.sendGameMessagejoiners(kakaoProfileeventId, templateIdresult, arguments, resultplayers);

if (result.isSuccess())
{
	// 카카오톡 채팅 메시지 보내기 성공
}
else if/ 내가 초대한 플레이어 목록 가져오기
    for (KakaoGame::Data::KGTResult::MessageSettingDisabled == result.code)
{
	// 받은이가 메시지 수신 거부를 설정한 경우
}
else if (KakaoGame::Data::KGTResult::ExceedDailyUsage == result.code)
{
	// 한명이 특정 앱에 대해 보낼 수 있는 하루 쿼터(받는 사람 관계없이) 초과시 발생
}
else if (KakaoGame::Data::KGTResult::ExceedMonthlyUsage == result.code)
{
	// 한명이 특정 앱에 대해 특정인에게 보낼 수 있는 한달 쿼터 초과시 발생
}
else
{
	// 카카오톡 채팅 메시지 보내기 실패
}

비동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// friends API를 통해 가져온 친구 객체
KakaoGame::Data::KGTKakaoProfile kakaoProfile;

// [TODO] 템플릿 Id 설정
std::wstring templateId = TEXT("");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
{
	// 호출 실패
}

비동기식 예제

코드 블럭
languagecpp
#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")));
설정
int32 eventId = 0;

// 내가 초대한 플레이어 목록 조회하기
KakaoGame::API::KGTKakaoTalkKGTKakaoInvitation kakaotalkApikakaoInvitationApi;

// 카카오톡 게임 메시지 보내기
kakaotalkApi.sendGameMessage(kakaoProfile, templateId, arguments
kakaoInvitationApi.joiners(eventId, [this](KakaoGame::Data::KGTResult result, int32_t totalReceiversCount, int32_t joinersCount) {
	if (result.isSuccess())
	{
		// 카카오톡내가 채팅초대한 메시지플레이어 보내기목록 성공가져오기
	}
	elsefor if (KakaoGame::Data::KGTResult::MessageSettingDisabled == result.code)
	{
KGTPlayer player : players)
		{
			// 수신자의 플레이어 아이디
			player.playerId;
			// 수신자의 닉네임
			player.kakaoProfile.nickname;
			// 받은이가수신자의 메시지프로필 수신썸네일 거부를 설정한 경우
	}
	else if (KakaoGame::Data::KGTResult::ExceedDailyUsage == result.code)
	{
이미지
			player.kakaoProfile.thumbnailImageUrl;
			// 수신지의 탈퇴 한명이이력 특정조회. 앱에UI상에서 대해탈퇴 보낼여부 정보를 있는표시할 하루경우 쿼터(받는해당 사람flag를 관계없이) 초과시 발생사용.
			player.kakaoProfile.isUnregistered;
		}
	}
	else if (KakaoGame::Data::KGTResult::ExceedMonthlyUsageNotKakaoTalkUser == result.code)
	{
		// 한명이로그인 특정 앱에유저가 대해'카카오톡' 특정인에게유저가 보낼아닙니다. (카카오톡 있는유저가 한달 쿼터 초과시 발생아닌 경우)
	}
	else
	{
		// 카카오톡 채팅 메시지 보내기 호출 실패
	}
});

카카오톡 채널 추가하기

...

내가 초대 메시지를 보낸 친구 숫자 조회하기

내가 초대 메시지를 보낸 친구 숫자를 조회하는 예제입니다.

동기식 예제

코드 블럭
languagecpp
#include "KakaoGameLib.h"

// [TODO] 채널이벤트 Id 설정
intint32 channelIdeventId = 0;

KakaoGame::Data::KGTResult result;
int32 totalReceiversCount;
int32 joinersCount;
KakaoGame::API::KGTKakaoTalkKGTKakaoInvitation kakaotalkApi;

kakaotalkApi.addChannel(channelId, resultkakaoInvitationApi;

// 내가 초대한 플레이어 숫자 조회하기
kakaoInvitationApi.receiversCount(eventId, result, totalReceiversCount, joinersCount);

if (result.isSuccess())
{
	// 호출 성공
    // totalReceiversCount - 전체 친구 수
    // 채널 추가 성공joinersCount - 게임에 가입한 친구 수
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
{
	// 로그인 한 유저가 '카카오톡' 유저가 아닙니다. 카카오 스토리만 가입한 유저의 계정과 같이  아닙니다. (카카오톡 유저가 아닌 경우.)
}
else
{
	// 채널 추가호출 실패
}

비동기식 예제

코드 블럭
languagecpp
#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
	{
		// 채널 추가호출 실패
	}
});