Initialization and Status Change Event Processing


SDK Initialization

std::map<std::wstring, std::wstring> kakaoSetting, facebookSetting, googleSetting;
kakaoSetting.insert(std::pair<std::wstring, std::wstring>(TEXT("jsKey"), TEXT("acd84e5c92067a159573483d8877de67")));
facebookSetting.insert(std::pair<std::wstring, std::wstring>(TEXT("clientId"), TEXT("1421382574931990")));
googleSetting.insert(std::pair<std::wstring, std::wstring>(TEXT("clientId"), TEXT("1002041625464-s2ruvcn1auv3rksr799gb4matvtvppb5.apps.googleusercontent.com")));
googleSetting.insert(std::pair<std::wstring, std::wstring>(TEXT("clientSecret"), TEXT("5MtQUUZ1sHl7RYgrhee-7-22")));

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>>(KakaoGame::Data::KGTIdpCode::Kakao, kakaoSetting));
idpSettings.insert(std::pair<KakaoGame::Data::KGTIdpCode, std::map<std::wstring, std::wstring>>(KakaoGame::Data::KGTIdpCode::Facebook, facebookSetting));
idpSettings.insert(std::pair<KakaoGame::Data::KGTIdpCode, std::map<std::wstring, std::wstring>>(KakaoGame::Data::KGTIdpCode::Google, googleSetting));

/**
 * For using a single app
 */
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
);

/**
 * For using an app group
 */
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

Synchronous Example

#include "KakaoGameLib.h"

KakaoGame::Data::KGTResult result;
KakaoGame::API::KGTApplication applicationApi;

applicationApi.start(GetSafeHwnd(), result);

if (result.isSuccess())
{
	// If the start is successful
	
	// Check if auto-login is enabled
	KakaoGame::API::KGTPlayer playerApi;
	boolean isLoggedIn = playerApi.isLoggedIn();
	
	if (isLoggedIn)
	{
		// The current Player's ID issued by the platform
		KakaoGame::Data::KGTPlayer player;
		playerApi.getCurrentPlayer(player);
		
		std::wstring playerId = player.playerId; // The current Player ID issued by the platform
		std::wstring accessToken = playerApi.getAccessToken(); // Platform access token (AccessToken)
		
		// [TODO] Move to the game screen
	}
	else
	{
		// [TODO] If auto-login is not enabled, move to the login screen
	}
}
else
{
	// If the start fails - since initialization failed, retry the start or close the app.
	if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
		|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
		|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
	{
		// [TODO] If a network error occurs, notify the user that the start failed due to a network issue and retry.
	} else
	{
		// [TODO] If other errors occur, provide an error notification and request a retry of the start process. - If the issue persists, check the error code and logs to determine the cause.
	}
}

Asynchronous Example

#include "KakaoGameLib.h"

KakaoGame::API::KGTApplication applicationApi;

applicationApi.start(GetSafeHwnd(), [this](KakaoGame::Data::KGTResult result) {
	if (result.isSuccess())
	{
		// If the start is successful
		
		// Check if auto-login is enabled
		KakaoGame::API::KGTPlayer playerApi;
		bool isLoggedIn = playerApi.isLoggedIn();
		
		if (isLoggedIn)
		{
			// Get the current Player ID issued by the platform
			KakaoGame::Data::KGTPlayer player;
			playerApi.getCurrentPlayer(player);
			
			std::wstring playerId = player.playerId; // The current Player ID issued by the platform
			std::wstring accessToken = playerApi.getAccessToken(); // Platform access token (AccessToken)
			
			// [TODO] Move to the game screen
		}
		else
		{
			// [TODO] If auto-login is not enabled, move to the login screen
		}
	}
	else
	{
		// If the start fails - since initialization failed, retry the start or close the app.
		if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
			|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
			|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
		{
			// [TODO] If a network error occurs, notify the user that the start failed due to a network issue and retry.
		}
		else
		{
			// [TODO] If other errors occur, provide an error notification and request a retry of the start process. - If the issue persists, check the error code and logs to determine the cause.
		}
	}
});

Setting Up Auto Login in a Windows Environment

This feature is supported in the Windows environment.

If you do not use the default login UI provided by the SDK and instead implement your own login UI, the SDK offers a feature to set up auto login.

nclude "KakaoGameLib.h"
// Set whether to use auto-login; if not set, it defaults to not using auto-login
// When auto-login is enabled and login is successful, auto-login information is generated
// If auto-login information exists, auto-login will proceed automatically during the next KGTApplication start, so to remove the auto-login information, you need to log out
bool useAutoLogin = true;
KakaoGame::API::KGTApplication applicationApi;

applicationApi.setUseAutoLogin(useAutoLogin);

Login


Logging In Without Using the Default Login UI

Synchronous Example

#include "KakaoGameLib.h"

// Setting the idpCode for login
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 login and platform login successful
	KakaoGame::Data::KGTPlayer player;
	KakaoGame::API::KGTPlayer playerApi;
	
	playerApi.getCurrentPlayer(player);
	
	std::wstring playerId = player.playerId; // Current Player ID issued by the platform
	std::wstring accessToken = playerApi.getAccessToken(); // Platform access token (AccessToken)
	
	// [TODO] Since the login was successful, proceed to the game screen.
}
else
{
	// IDP login or platform login failed
	// [TODO] If login fails, inform the user and prompt them to retry.
	if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
		|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
		|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
	{
		// [TODO] If a network error occurs, notify the user that the start failed due to a network issue and retry.
	}
	else if (KakaoGame::Data::KGTResultCode::Forbidden == result.code)
	{
		// [TODO] During the CBT period, authentication may not be possible for users who are not allowed. Provide an appropriate notification to the user.
	}
	else if (KakaoGame::Data::KGTResultCode::UserCanceled == result.code)
	{
		// [TODO] Since the user canceled during the login process, the login screen should be maintained.
	}
	else
	{
		// [TODO] If other errors occur, provide an error notification and request a retry of the start process. - If the issue persists, check the error code and logs to determine the cause.
	}
}

Asynchronous Example

#include "KakaoGameLib.h"

// Set the idpCode you want to log in with
KakaoGame::Data::KGTIdpCode idpCode = KakaoGame::Data::KGTIdpCode::Kakao;

KakaoGame::API::KGTPlayer playerApi;

playerApi.login(GetSafeHwnd(), idpCode, [this](KakaoGame::Data::KGTResult result) {
	if (result.isSuccess())
	{
		// Successfully logged in with IDP and platform
		KakaoGame::Data::KGTPlayer player;
		KakaoGame::API::KGTPlayer playerApi;
		
		playerApi.getCurrentPlayer(player);
		
		std::wstring playerId = player.playerId; // The current Player ID issued by the platform
		std::wstring accessToken = playerApi.getAccessToken(); // Platform access token (AccessToken)
		
		// [TODO] Since the login was successful, proceed to the game screen.
	}
	else
	{
		// IDP login or platform login failed
		// [TODO] If login fails, inform the user and prompt them to retry.
		if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
			|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
			|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
		{
			// [TODO] If a network error occurs, notify the user that the start failed due to a network issue and retry.
		}
		else if (KakaoGame::Data::KGTResultCode::Forbidden == result.code)
		{
			// [TODO] If the user is not allowed during the CBT period, authentication may not be possible. Provide a notification message to the user.
		}
		else if (KakaoGame::Data::KGTResultCode::UserCanceled == result.code)
		{
			// [TODO] Since the user canceled during the login process, the login screen should be maintained.
		}
		else
		{
			// [TODO] If other errors occur, provide an error notification and request a retry of the start process. - If the issue persists, check the error code and logs to determine the cause.
		}
	}
});

Logging in Using a Square Token

Synchronous Example

#include "KakaoGameLib.h"

// User ID requesting login
std::wstring playerId;

// Token received from Square
std::wstring squareToken;

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

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

if (result.isSuccess())
{
	// Successful IDP and platform login
	KakaoGame::Data::KGTPlayer player;
	KakaoGame::API::KGTPlayer playerApi;
	
	playerApi.getCurrentPlayer(player);
	
	std::wstring playerId = player.playerId; // Current Player ID issued by the platform
	std::wstring accessToken = playerApi.getAccessToken(); // Platform access token (AccessToken)
	
	// [TODO] Since login was successful, proceed to the game screen.
}
else
{
	// IDP or platform login failed
	// [TODO] If login fails, notify the user and request a retry.
	if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
		|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
		|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
	{
		// [TODO] If a network error occurs, notify the user that the start failed due to a network issue and retry.
	}
	else
	{
		// [TODO] If other errors occur, provide an error notification and request a retry of the start process. - If the issue persists, check the error code and logs to determine the cause.
	}
}

Asynchronous Example

#include "KakaoGameLib.h"

// User ID requesting login
std::wstring playerId;

// Token received from Square
std::wstring squareToken;

KakaoGame::API::KGTPlayer playerApi;

playerApi.login(GetSafeHwnd(), playerId, squareToken, [this](KakaoGame::Data::KGTResult result) {
	if (result.isSuccess())
	{
		// IDP login and platform login successful
		KakaoGame::Data::KGTPlayer player;
		KakaoGame::API::KGTPlayer playerApi;
		
		playerApi.getCurrentPlayer(player);
		
		std::wstring playerId = player.playerId; // The current Player's ID issued by the platform
		std::wstring accessToken = playerApi.getAccessToken(); // Platform access token (AccessToken)
		
		// [TODO] Since login was successful, proceed to the game screen.
	}
	else
	{
		// IDP login or platform login failed
		// [TODO] If login fails, notify the user and request a retry.
		if (KakaoGame::Data::KGTResultCode::NetworkFailure == result.code
			|| KakaoGame::Data::KGTResultCode::ServerTimeout == result.code
			|| KakaoGame::Data::KGTResultCode::ConnectionFailed == result.code)
		{
			// [TODO] If a network error occurs, notify the user that the start failed due to a network issue and retry..
		}
		else
		{
			// [TODO] If other errors occur, provide an error notification and request a retry of the start process. - If the issue persists, check the error code and logs to determine the cause.
		}
	}
});

Logout


Logging Out Without Using the Default Logout UI

Synchronous Example

#include "KakaoGameLib.h"

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

playerApi.logout(GetSafeHwnd(), false, result);

if (result.isSuccess())
{
	// Logout successful
	
	// [TODO] Return to the start screen
}
else
{
	// Logout failed
}

Asynchronous Example

#include "KakaoGameLib.h"

KakaoGame::API::KGTPlayer playerApi;

playerApi.logout(GetSafeHwnd(), false, [this](KakaoGame::Data::KGTResult result) {
	if (result.isSuccess())
	{
		// Logout successful
		
		// [TODO] Return to the start screen
	}
	else
	{
		// Logout failed
	}
});

Unregistration


Unregistering Without Using the Default Unregistration UI

Synchronous Example

#include "KakaoGameLib.h"

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

playerApi.unregister(GetSafeHwnd(), false, result);

if (result.isSuccess())
{
	// Unregistration successful
	
	// [TODO] Return to the start screen
}
else
{
	// Unregistration failed
}

Asynchronous Example

#include "KakaoGameLib.h"

KakaoGame::API::KGTPlayer playerApi;

playerApi.unregister(GetSafeHwnd(), false, [this](KakaoGame::Data::KGTResult result) {
	if (result.isSuccess())
	{
		// Unregistration successful
		
		// [TODO] Return to the start screen
	}
	else
	{
		// Unregistration failed
	}
});

Account Linking


Linking Accounts Without Using the Default Account Linking UI

Synchronous Example

#include "KakaoGameLib.h"

// Set the idpCode to connect to
KakaoGame::Data::KGTIdpCode idpCode = KakaoGame::Data::KGTIdpCode::Kakao;

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

playerApi.connect(GetSafeHwnd(), idpCode, result);

if (result.isSuccess())
{
	// IDP connection successful
	// Player ID is not changed.
}
else
{
	// IDP connection failed
	if (KakaoGame::Data::KGTResultCode::InvalidParameter == result.code)
	{
		// An invalid parameter was passed
	}
	else if (KakaoGame::Data::KGTResultCode::NotAuthorized == result.code)
	{
		// The user is not currently logged in
	}
	else if (KakaoGame::Data::KGTResultCode::InvalidState == result.code)
	{
		// The current authenticated IDP is not an IDP that can be linked to the account
	}
	else if (KakaoGame::Data::KGTResultCode::AlreadyUsedIDPAccount == result.code)
	{
		// The account is already linked to another IDP
	}
	else
	{
		// Other errors occurred
	}
}

Asynchronous Example

#include "KakaoGameLib.h"

// Set the idpCode to connect to
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 connection successful
		// Player ID is not changed.
	}
	else
	{
		// IDP connection failed
		if (KakaoGame::Data::KGTResultCode::InvalidParameter == result.code)
		{
			// An invalid parameter was passed
		}
		else if (KakaoGame::Data::KGTResultCode::NotAuthorized == result.code)
		{
			// The user is not currently logged in
		}
		else if (KakaoGame::Data::KGTResultCode::InvalidState == result.code)
		{
			// The current authenticated IDP is not an IDP that can be linked to the account
		}
		else if (KakaoGame::Data::KGTResultCode::AlreadyUsedIDPAccount == result.code)
		{
			// The account is already linked to another IDP
		}
		else
		{
			// Other errors occurred
		}
	}
});

Profile


Retrieve My Information

#include "KakaoGameLib.h"

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

playerApi.getCurrentPlayer(player);

Retrieve My IDP Information

#include "KakaoGameLib.h"

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

playerApi.getCurrentPlayer(player);

player.kakaoProfile;

System Information


Retrieve Language Code

#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

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

Retrieve Language Tag

#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

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

Retrieve Country Code

#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

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

Retrieve IP-based Country Code

#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

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

Retrieve Device ID

#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

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

Retrieve Device Model

#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

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

Retrieve OS Name

#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

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

Retrieve Network Connection Status

#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

boolean networkConnected = systemApi.isNetworkConnected();

Retrieve Connected Network Type

#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

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

Get the Set Game Language Code

Returns the set game language code.

If no language code is set, it retrieves the language setting information configured on the device, and the language code is returned according to the ISO 639-1 standard.

#include "KakaoGameLib.h"

KakaoGame::API::KGTSystem systemApi;

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

Set the Game Language Code

Configures the game to use the language synchronized with the platform.

The following language codes are supported:

(Can be set before calling the Start API)

#include "KakaoGameLib.h"

// KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::en; // English
// KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::ko; // Korean
// KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::ja; // Japanese
// KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::zh_hant; // Chinese(Traditional)
// KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::zh_hans; // Chinese (Simplified)
KakaoGame::Data::KGTLanguageCode languageCode = KakaoGame::Data::KGTLanguageCode::device; // Device setting value

KakaoGame::API::KGTSystem systemApi;

systemApi.setGameLanguageCode(languageCode);

Kakao Integration Feature


Setting Up KakaoTalk Game Message Reception

Synchronous Example

#include "KakaoGameLib.h"

KakaoGame::Data::KGTResult result;
bool isAlloweMe;
KakaoGame::API::KGTKakaoTalk kakaotalkApi;

// Display the view to set KakaoTalk game message reception preferences
kakaotalkApi.showSetting(GetSafeHwnd(), result, isAlloweMe);

if (result.isSuccess())
{
	// Successfully set the KakaoTalk game message reception settings
	isAlloweMe; // Whether message reception is allowed as per the settings
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
{
	// The logged-in user is not a 'KakaoTalk' user. This occurs when the user is only registered with KakaoStory and not KakaoTalk.
}
else
{
	// Failed to set the KakaoTalk game message reception settings
}

Asynchronous Example

#include "KakaoGameLib.h"

KakaoGame::API::KGTKakaoTalk kakaotalkApi;

// Display the view to set KakaoTalk game message reception preferences
kakaotalkApi.showSetting(GetSafeHwnd(), [this](KakaoGame::Data::KGTResult result, bool isAlloweMe) {
	if (result.isSuccess())
	{
		// Successfully set the KakaoTalk game message reception settings
		isAlloweMe; // Whether message reception is allowed as per the settings
	}
	else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		// The logged-in user is not a 'KakaoTalk' user. This occurs when the user is only registered with KakaoStory and not KakaoTalk.
	}
	else
	{
		// Failed to set the KakaoTalk game message reception settings
	}
});

Retrieve KakaoTalk Profile

Synchronous Example

#include "KakaoGameLib.h"

KakaoGame::Data::KGTResult result;
KakaoGame::Data::KGTKakaoTalkProfile profile;
KakaoGame::API::KGTKakaoTalk kakaotalkApi;

// Retrieve KakaoTalk profile
kakaotalkApi.talkProfile(result, profile);

if (result.isSuccess())
{
	// Successfully retrieved KakaoTalk profile
	profile; // KakaoTalk profile information of the logged-in user
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
{
	// The logged-in user is not a 'KakaoTalk' user. This occurs when the user is only registered with KakaoStory and not KakaoTalk.
}
else
{
	// Failed to retrieve KakaoTalk profile
}

Asynchronous Example

#include "KakaoGameLib.h"

KakaoGame::API::KGTKakaoTalk kakaotalkApi;

// Retrieve KakaoTalk profile
kakaotalkApi.talkProfile([this](KakaoGame::Data::KGTResult result, KakaoGame::Data::KGTKakaoTalkProfile profile) {
	if (result.isSuccess())
	{
		// Successfully retrieved KakaoTalk profile
		profile; // KakaoTalk profile information of the logged-in user
	}
	else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		// The logged-in user is not a 'KakaoTalk' user. This occurs when the user is only registered with KakaoStory and not KakaoTalk.
	}
	else
	{
		// Failed to retrieve KakaoTalk profile
	}
});

Retrieve KakaoTalk Game Friend List

Synchronous Example

#include "KakaoGameLib.h"

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

// Retrieve the list of game friends
kakaotalkApi.friends(result, players);

if (result.isSuccess())
{
	// Successfully retrieved KakaoTalk game friends list.
	// Game friends list
	for each (auto player in players)
	{
	}
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
{
	// The logged-in user is not a 'KakaoTalk' user. This occurs when the user is only registered with KakaoStory and not KakaoTalk.
}
else
{
	// Failed to retrieve KakaoTalk profile
}

Asynchronous Example

#include "KakaoGameLib.h"

KakaoGame::API::KGTKakaoTalk kakaotalkApi;

// Retrieve the list of game friends
kakaotalkApi.friends([this](KakaoGame::Data::KGTResult result, std::vector<KakaoGame::Data::KGTPlayer> players) {
	if (result.isSuccess())
	{
		// Successfully retrieved KakaoTalk game friends list.
		// Game friends list
		for each (auto player in players)
		{
		}
	}
	else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		// The logged-in user is not a 'KakaoTalk' user. This occurs when the user is only registered with KakaoStory and not KakaoTalk.
	}
	else
	{
		// Failed to retrieve KakaoTalk game friends list
	}
});

Sending KakaoTalk Game Messages

Synchronous Example

#include "KakaoGameLib.h"

// Friend object retrieved via the friends API
KakaoGame::Data::KGTKakaoProfile kakaoProfile;

// [TODO] Set the template Id
std::wstring templateId = TEXT("");

// [TODO] Set the parameters for the message template
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::API::KGTKakaoTalk kakaotalkApi;

// Send a KakaoTalk game message
kakaotalkApi.sendGameMessage(kakaoProfile, templateId, arguments, result);

if (result.isSuccess())
{
	// Successfully sent KakaoTalk chat message
}
else if (KakaoGame::Data::KGTResult::MessageSettingDisabled == result.code)
{
	// The recipient has set message reception to be disabled.
}
else if (KakaoGame::Data::KGTResult::ExceedDailyUsage == result.code)
{
	// Occurs when the daily quota for sending messages to a specific app (regardless of the recipient) is exceeded.
}
else if (KakaoGame::Data::KGTResult::ExceedMonthlyUsage == result.code)
{
	// Occurs when the monthly quota for sending messages to a specific person for a specific app is exceeded.
}
else
{
	// Failed to send KakaoTalk chat message
}

Asynchronous Example

#include "KakaoGameLib.h"

// Friend object retrieved via the friends API
KakaoGame::Data::KGTKakaoProfile kakaoProfile;

// [TODO] Set the template Id
std::wstring templateId = TEXT("");

// [TODO] Set the parameters for the message template
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;

// Send a KakaoTalk game message
kakaotalkApi.sendGameMessage(kakaoProfile, templateId, arguments, [this](KakaoGame::Data::KGTResult result) {
	if (result.isSuccess())
	{
		// Successfully sent KakaoTalk chat message
	}
	else if (KakaoGame::Data::KGTResult::MessageSettingDisabled == result.code)
	{
		// The recipient has set message reception to be disabled.
	}
	else if (KakaoGame::Data::KGTResult::ExceedDailyUsage == result.code)
	{
		// Occurs when the daily quota for sending messages to a specific app (regardless of the recipient) is exceeded.
	}
	else if (KakaoGame::Data::KGTResult::ExceedMonthlyUsage == result.code)
	{
		// Occurs when the monthly quota for sending messages to a specific person for a specific app is exceeded.
	}
	else
	{
		// Failed to send KakaoTalk chat message
	}
});

Adding a KakaoTalk Channel

Synchronous Example

#include "KakaoGameLib.h"

// [TODO] Set the channel Id
int channelId = 0;

KakaoGame::Data::KGTResult result;
KakaoGame::API::KGTKakaoTalk kakaotalkApi;

kakaotalkApi.addChannel(channelId, result);

if (result.isSuccess())
{
	// Successfully added the channel
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
{
	// The logged-in user is not a 'KakaoTalk' user. This occurs when the user is only registered with KakaoStory and not KakaoTalk.
}
else
{
	// Failed to add the channel
}

Asynchronous Example

#include "KakaoGameLib.h"

// [TODO] Set the channel Id
int channelId = 0;

KakaoGame::API::KGTKakaoTalk kakaotalkApi;

kakaotalkApi.addChannel(channelId, [this](KakaoGame::Data::KGTResult result) {
	if (result.isSuccess())
	{
		// Successfully added the channel
	}
	else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		// The logged-in user is not a 'KakaoTalk' user. This occurs when the user is only registered with KakaoStory and not KakaoTalk.
	}
	else
	{
		// Failed to add the channel
	}
});

Retrieve the list of friends to whom I sent an invite message

Synchronous Example

#include "KakaoGameLib.h"
// [TODO] Set the event ID
int32 eventId = 0;
KakaoGame::Data::KGTResult result;
std::vector<KakaoGame::Data::KGTPlayer> players;
KakaoGame::API::KGTKakaoInvitation kakaoInvitationApi;

// Retrieve the list of players I invited
kakaoInvitationApi.joiners(eventId, result, players);

if (result.isSuccess())
{
	// Successfully retrieved the list of players I invited
    for (KakaoGame::Data::KGTPlayer player : players)
    {
      // Recipient's player ID
      player.playerId;
      // Recipient's nickname
      player.kakaoProfile.nickname;
      // Recipient's profile thumbnail image
      player.kakaoProfile.thumbnailImageUrl;
      // Check if the recipient has a withdrawal history. Use this flag to display withdrawal information in the UI.
      player.kakaoProfile.isUnregistered;
    }
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
{
	// The logged-in user is not a 'KakaoTalk' user. (For cases where the user is not a KakaoTalk user)
}
else
{
	// Failed to retrieve the list
}

Asynchronous Example

#include "KakaoGameLib.h"
// [TODO] Set the event ID
int32 eventId = 0;
KakaoGame::API::KGTKakaoInvitation kakaoInvitationApi;

// Retrieve the list of players I invited
kakaoInvitationApi.joiners(eventId, [this](KakaoGame::Data::KGTResult result, int32_t totalReceiversCount, int32_t joinersCount) {
	if (result.isSuccess())
	{
		// Successfully retrieved the list of players I invited
		for (KakaoGame::Data::KGTPlayer player : players)
		{
			// Recipient's player ID
			player.playerId;
			// Recipient's nickname
			player.kakaoProfile.nickname;
			// Recipient's profile thumbnail image
			player.kakaoProfile.thumbnailImageUrl;
			// Check if the recipient has a withdrawal history. Use this flag to display withdrawal information in the UI.
			player.kakaoProfile.isUnregistered;
		}
	}
	else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		// The logged-in user is not a 'KakaoTalk' user. (For cases where the user is not a KakaoTalk user)
	}
	else
	{
		// Failed to retrieve the list
	}
});

Retrieve the count of friends to whom I sent an invite message

Synchronous Example

#include "KakaoGameLib.h"
// [TODO] Set the event ID
int32 eventId = 0;
KakaoGame::Data::KGTResult result;
int32 totalReceiversCount;
int32 joinersCount;
KakaoGame::API::KGTKakaoInvitation kakaoInvitationApi;

// Retrieve the count of players I invited
kakaoInvitationApi.receiversCount(eventId, result, totalReceiversCount, joinersCount);

if (result.isSuccess())
{
	// Successfully retrieved the counts
    // totalReceiversCount - Total number of friends
    // joinersCount - Number of friends who joined the game
}
else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
{
	// The logged-in user is not a 'KakaoTalk' user. (For cases where the user is not a KakaoTalk user)
}
else
{
	// Failed to retrieve the counts
}

Asynchronous Example

#include "KakaoGameLib.h"
// [TODO] Set the event ID
int32 eventId = 0;
KakaoGame::API::KGTKakaoInvitation kakaoInvitationApi;

// Retrieve the count of players I invited
kakaoInvitationApi.receiversCount(eventId, [this](KakaoGame::Data::KGTResult result, int32_t totalReceiversCount, int32_t joinersCount) {
	if (result.isSuccess())
	{
		// Successfully retrieved the counts
		// totalReceiversCount - Total number of friends
		// joinersCount - Number of friends who joined the game
	}
	else if (KakaoGame::Data::KGTResult::NotKakaoTalkUser == result.code)
	{
		// The logged-in user is not a 'KakaoTalk' user. (For cases where the user is not a KakaoTalk user)
	}
	else
	{
		// Failed to retrieve the counts
	}
});