Initialization and Status Change Event Processing
SDK Initialization
This process sets and initializes the app information used by the SDK.
It must be called before any other API when the game starts.
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
When a game is started, it must call the Start function to notify the Kakao Game SDK that it has been started. UI functions such as platform announcements, update news, and term agreements are performed when the Start function of the Kakao Game SDK is called. If there exists a prior user login record, the automatic login function is also performed, and the result is sent through the callback function inputted in the game when the method is called. Therefore, the game can use the results to decide whether to authenticate the user first or whether to resume a previous game.
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. } } });
Login
The login UI can be customized and applied by the developer.
Considerations When Implementing Login UI Directly
Login APIs are provided for each IDP (Identity Provider).
When implementing the login screen, the developer should place login buttons for each IDP and implement the logic so that clicking each button calls the corresponding IDP's login API.
If a global build is provided, the visibility of IDP buttons should be handled according to the country. For example, in South Korea, Kakao Login should be provided, while in other countries, Facebook Login may be provided.
To differentiate by country, an API in the KGTSystem class is provided to retrieve the countryCode.
After a successful login, if the settings screen is displayed, it should be implemented so that the PlayerID is shown as the member number.
Logging In Without Using the Default Login UI
This is an example of logging in without using the default login UI. If the login IDP varies by country, use the API to retrieve the country and handle branching accordingly. Guest Verification In the case of guest login, an alert popup must be implemented by the developer. This is a mandatory checkpoint during Kakao Games inspection. Before proceeding with guest verification, an alert popup should be displayed with the message: "If you delete the game or change devices, game data may be lost when logging in as a guest." This allows the user to choose whether to continue with guest verification or cancel. Example) When guest login is used, if the app is deleted or the device information is changed, the game cannot continue with the previous playerId. If using the default login, the SDK provides this alert automatically.
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
The logout UI must be implemented directly by the developer.
Logout APIs are provided for each logout UI.
Logging Out Without Using the Default Logout UI
This is an example of 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
탈퇴 UI를 개발사에서 직접 구현하고 싶을 경우(탈퇴 UI를 사용하고 싶지 않은 경우)를 위해서, 탈퇴 API가 제공됩니다.
Unregistering Without Using the Default Unregistration UI
기본 탈퇴 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
If the developer wishes to implement the account linking UI directly (or does not want to use the default account linking UI), an account linking API is provided for each IDP.
The developer should place account linking buttons for each IDP on the account linking screen, and implement the logic so that clicking each button calls the corresponding IDP's account linking API.
Linking Accounts Without Using the Default Account Linking UI
This is an example of linking accounts without using the default account linking UI.
If account linking is successful, the player ID will remain the same.
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
This is an example of retrieving my information.
#include "KakaoGameLib.h" KakaoGame::Data::KGTPlayer player; KakaoGame::API::KGTPlayer playerApi; playerApi.getCurrentPlayer(player);
Retrieve My IDP Information
This is an example of retrieving my IDP profile information.
You can retrieve the information provided by each IDP profile.
#include "KakaoGameLib.h" KakaoGame::Data::KGTPlayer player; KakaoGame::API::KGTPlayer playerApi; playerApi.getCurrentPlayer(player); player.kakaoProfile;
System Information
Retrieve Language Code
Retrieves the language setting information of the device, returning a language code according to the ISO 639-1 standard.
#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
The SDK collects the country code based on the initial GeoIP. The country code follows the ISO 3166-1 alpha-2 standard, and if no country information is available, "zz" is returned.
The country code initially determined when the app is first run is maintained, but if the logged-in user's country code information differs, the user's country code information is followed.
#include "KakaoGameLib.h" KakaoGame::API::KGTSystem systemApi; std::wstring countryCode = systemApi.getCountryCode();
Retrieve IP-based Country Code
Returns the country code based on the IP of the network to which the device is currently connected.
#include "KakaoGameLib.h" KakaoGame::API::KGTSystem systemApi; std::wstring countryCode = systemApi.getGeoCountryCode();
Retrieve Device ID
Returns a value that uniquely identifies the device. This value changes if the device is reset.
#include "KakaoGameLib.h" KakaoGame::API::KGTSystem systemApi; std::wstring deviceId = systemApi.getDeviceId();
Retrieve Device Model
Returns the model information of the current device.
#include "KakaoGameLib.h" KakaoGame::API::KGTSystem systemApi; std::wstring deviceModel = systemApi.getDeviceModel();
Retrieve OS Name
Returns the name of the current device's OS (android/ios).
#include "KakaoGameLib.h" KakaoGame::API::KGTSystem systemApi; std::wstring osName = systemApi.getOSName();
Retrieve Network Connection Status
Returns whether the current device is connected to an external network.
#include "KakaoGameLib.h" KakaoGame::API::KGTSystem systemApi; boolean networkConnected = systemApi.isNetworkConnected();
Retrieve Connected Network Type
Retrieves the type of network to which the current device is connected (wifi/cellular/unknown).
#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)
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);
Kakao Integration Feature
Setting Up KakaoTalk Game Message Reception
This is an example of how to set up the reception of KakaoTalk game messages for yourself.
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
This is an example of how to retrieve your own 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
This is an example of how to retrieve your 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
This is an example of sending a KakaoTalk game message using a message template.
If you want to receive specific parameters when the recipient taps the message to enter the game, you can set the exec parmin the message template.
When the recipient receives the message on KakaoTalk and taps the connection link, the app will launch and pass the exec param.
You can use this value to start a specific stage or provide predefined items. Please note that the exec param can only be used with 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
This is an example of how to add 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, int32_t totalReceiversCount, int32_t joinersCount) { 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 } });
0 댓글