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); |
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. } } }); |
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.
If you do not configure auto login, the SDK will not create a file for automatic login by default.
The file for auto login is created and stored in an encrypted format in the folder ".kakaogames" under the name ".access". This is because multiple users can exist on a single PC."
When a game is uninstalled and then reinstalled, if the auto login file remains, the SDK checks whether an encrypted ".access" file exists in the location of the Windows SDK file (KakaoGame.dll). If the file is valid, the SDK loads the file containing the auto login information and performs the auto login.
If the auto login files are corrupted, the SDK will delete them.
If the auto login file exists and the user logs out or withdraws, the auto login file will be deleted.
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); |
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. } } }); |
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. } } }); |
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 } }); |
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 } }); |
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 } } }); |
#include "KakaoGameLib.h" KakaoGame::Data::KGTPlayer player; KakaoGame::API::KGTPlayer playerApi; playerApi.getCurrentPlayer(player); |
#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" KakaoGame::API::KGTSystem systemApi; std::wstring countryCode = systemApi.getCountryCode(); |
#include "KakaoGameLib.h" KakaoGame::API::KGTSystem systemApi; std::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(); |
#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" KakaoGame::API::KGTSystem systemApi; std::wstring networkType = systemApi.getNetworkType(); |
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(); |
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)
device: Device setting value. Can be used to revert to the device's setting value. (default)
en: English
ko: Korean
ja: Japanese
zh_hant: Chinese (Traditional)
zh_hans: Chinese (Simplified)
#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); |
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 } }); |
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 } }); |
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 } }); |
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 } }); |
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 } }); |
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 } }); |
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 } }); |