목차 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
Initialization and Status Change Event Processing
...
SDK Initialization
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" /** * Perform initialization using the information set in Unreal Editor */ FKGTApplication::InitSDK(); |
Start
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" FKGTApplication::Start(FKGTResultDelegate::CreateLambda([=](FKGTResult result) { if (result.IsSuccess()) { // If the start is successful // Check if auto-login is enabled bool isLoggedIn = FKGTPlayer::IsLoggedIn(); if (isLoggedIn) { // The current Player's ID issued by the platform FString playerId = FKGTPlayer::GetCurrentPlayer().GetPlayerId(); // Platform access token FString accessToken = FKGTPlayer::GetAccessToken(); // Retrieve the current IDP authentication information FKGTIdpProfile idpProfile = FKGTPlayer::GetCurrentPlayer().GetIdpProfile(); // [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. int32 resultCode = result.GetCode(); if (resultCode == FKGTResultCode::NetworkFailure || resultCode == FKGTResultCode::ServerTimeout || resultCode == FKGTResultCode::ServerConnectionFailed) { // [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, notify the user and request a retry of the start process. If the issue persists, check the error code and logs to determine the cause. } } })); |
Pause
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // Called when the game enters a background state (e.g., switching to another app or exiting via the home button). // Register with ApplicationWillEnterBackgroundDelegate so that SDK Pause can be called. FCoreDelegates::ApplicationWillEnterBackgroundDelegate.AddUObject(this, &UApplicationWidget::Pause); FKGTApplication::Pause(FKGTResultDelegate::CreateLambda([=](FKGTResult result) { // The result always returns a success (200) response. })); |
Resume
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // Called when the game returns to the foreground // Register with ApplicationHasEnteredForegroundDelegate so that SDK Resume can be called. FCoreDelegates::ApplicationHasEnteredForegroundDelegate.AddUObject(this, &UApplicationWidget::Resume); FKGTApplication::Resume(FKGTResultDelegate::CreateLambda([=](FKGTResult result) { if (result.IsSuccess()) { // [TODO] If the resume is successful, resume the game screen. } else { // [TODO] If resume fails, navigate to the login screen if it’s an authentication failure; otherwise, show an error popup and check if the user wants to retry. if (result.Code == FKGTResultCode::AuthFailure || result.Code == FKGTResultCode::IdpAuthFailure) { // [TODO] If the start fails - Initialization failed, so you should either retry the start or close the app. } else { // [TODO] If other errors occur, provide an error notification and retry the resume. If the issue persists, close the app. } } }); |
Setting Up Auto Login in a Windows Environment
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.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; FKGTApplication::SetUseAutoLogin(useAutoLogin); |
Login
...
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
Logging In Without Using the Default Login UI
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // Set the IdpCode for the login EKGTIdpCode idpCode = EKGTIdpCode::Kakao; // Log in with a specific IDP FKGTPlayer::Login(idpCode, FKGTResultDelegate::CreateLambda([=](FKGTResult result) { if (result.IsSuccess()) { // The current Player's ID issued by the platform FString playerId = FKGTPlayer::GetCurrentPlayer().GetPlayerId(); // Platform access token FString accessToken = FKGTPlayer::GetAccessToken(); // Retrieve the current IDP authentication information FKGTIdpProfile idpProfile = FKGTPlayer::GetCurrentPlayer().GetIdpProfile(); // [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. int32 resultCode = result.GetCode(); if (resultCode == FKGTResultCode::NetworkFailure || resultCode == FKGTResultCode::ServerTimeout || resultCode == FKGTResultCode::ServerConnectionFailed) { // [TODO] If a network error occurs, notify the user that the start failed due to a network issue and retry. } else if (resultCode == FKGTResultCode::Forbidden) { // [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 (resultCode == FKGTResultCode::UserCanceled) { // [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 prompt the user to retry logging in. It is necessary to check the error code and logs to determine the cause. } } })); |
Logging In Through the Launcher
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 |
---|
#include "KakaoGameV4.h" // The bridgeToken received through the launcher FString bridgeToken = ""; FKGTPlayer::LoginWithBridgeToken(bridgeToken, FKGTResultDelegate::CreateLambda([=](FKGTResult result) { if (result.IsSuccess()) { // The current Player's ID issued by the platform FString playerId = FKGTPlayer::GetCurrentPlayer().GetPlayerId(); // Platform access token FString accessToken = FKGTPlayer::GetAccessToken(); // Retrieve the current IDP authentication information FKGTIdpProfile idpProfile = FKGTPlayer::GetCurrentPlayer().GetIdpProfile(); // Additional information received through the launcher TSharedPtr<FJsonObject> bridgeTokenPayload = FKGTPlayer::GetCurrentPlayer().GetBridgeTokenPayload(); // [TODO] Log in to the game server and proceed to the game screen } else { // Handle login failure. // [TODO] If login fails, inform the user and prompt them to retry. int32 resultCode = result.GetCode(); if (resultCode == FKGTResultCode::NetworkFailure || resultCode == FKGTResultCode::ServerTimeout || resultCode == FKGTResultCode::ServerConnectionFailed) { // [TODO] If a network error occurs, prompt the user to retry logging in. } else if (resultCode == FKGTResultCode::Forbidden) { // [TODO] During the CBT period, authentication may not be possible for users who are not allowed. Display a notification to the user, and after clicking confirm, implement the app to exit. } else if (resultCode == FKGTResultCode::UserCanceled) { // [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 prompt the user to retry logging in. // It is necessary to check the error code and logs to determine the cause. } } })); |
Logout
...
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
Logging Out Without Using the Default Logout UI
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // Logout request FKGTPlayer::Logout(FKGTResultDelegate::CreateLambda([=](FKGTResult result) { if (result.IsSuccess()) { // Logout successful // [TODO] Return to the start screen } else { // Logout failed } })); |
Unregistration
...
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
Unregistering Without Using the Default Unregistration UI
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // Unregistration (account deletion) request FKGTPlayer::Unregister(showUI, FKGTResultDelegate::CreateLambda([=](FKGTResult 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
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // Set the IdpCode for the login EKGTIdpCode idpCode = EKGTIdpCode::Kakao; // Connect the account with a specific IDP FKGTPlayer::Connect(idpCode, FKGTResultDelegate::CreateLambda([=](FKGTResult result) { if (result.IsSuccess()) { // IDP connection successful // The Player ID does not change. } else { // IDP connection failed int32 resultCode = result.GetCode(); if (resultCode == FKGTResultCode::NotAuthorized) { // If the current session is not logged in } else if (resultCode == FKGTResultCode::InvalidState) { // If the currently authenticated IDP is not eligible for account connection } else if (resultCode == FKGTResultCode::AlreadyUsedIDPAccount) { // If the account is already connected to another IDP } else { // Other errors occurred } } })); |
Profile
...
Retrieve My Information
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" FKGTPlayer player = FKGTPlayer::GetCurrentPlayer(); // Platform playerId FString playerId = player.GetPlayerId(); // Platform AccessToken FString accessToken = FKGTPlayer::GetAccessToken(); // idpProfile information FKGTIdpProfile idpProfile = player.GetIdpProfile(); |
Retrieve My IDP Information
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" FKGTPlayer player = FKGTPlayer::GetCurrentPlayer(); // Retrieve IDP information FKGTIdpProfile idpProfile = player.GetIdpProfile(); EKGTIdpCode idpCode = idpProfile.GetIdpCode(); FString idpUserId = idpProfile.GetIdpUserId(); // Retrieve Kakao IDP information // If the login state is with Kakao if (idpCode == EKGTIdpCode::Kakao) { // Retrieve Kakao IDP information FKGTKakaoProfile *kakaoProfile = (FKGTKakaoProfile*)&idpProfile; // Kakao UUID FString uuid = kakaoProfile->GetUUID(); // If the same Kakao user is using a different app, return the same group user token FString groupUserToken = kakaoProfile->GetGroupUserToken(); // Remaining number of invites that can be sent today int32 remainingInviteCount = kakaoProfile->GetRemainingInviteCount(); // Whether the app is registered bool isAppRegistered = kakaoProfile->IsAppRegistered(); // Whether message reception is allowed bool isAllowedMessage = kakaoProfile->IsAllowedMessage(); } |
System Information
...
Retrieve Language Code
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" FString languageCode = FKGTSystem::GetLanguageCode(); |
Retrieve Country Code
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" FString countryCode = FKGTSystem::GetCountryCode(); |
Retrieve IP-based Country Code
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" FString geoCountryCode = FKGTSystem::GetGeoCountryCode(); |
Retrieve Device ID
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" FString deviceId = FKGTSystem::GetDeviceId(); |
Retrieve Device Model
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" FString deviceModel = FKGTSystem::GetDeviceModel(); |
Retrieve OS Name
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" FString osName = FKGTSystem::GetOSName(); |
Retrieve Network Connection Status
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" bool isNetworkConnected = FKGTSystem::IsNetworkConnected(); |
Retrieve Connected Network Type
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" FString networkType = FKGTSystem::GetNetworkType(); |
Kakao Integration Feature
...
Setting Up KakaoTalk Game Message Reception
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // Display the view to set KakaoTalk game message reception preferences FKGTKakaoTalk::ShowSetting(FKGTResultWithIsAllowMeDelegate::CreateLambda([=](FKGTResult result, bool isAllowMe) { if (result.IsSuccess()) { // Successfully set KakaoTalk game message reception settings // isAllowMe - Whether message reception is allowed as per the settings } else if (result.GetCode() == FKGTResultCode::NotKakaoTalkUser) { // The logged-in user is not a 'KakaoTalk' user. (For cases where the user is not a KakaoTalk user) } else { // Failed to set KakaoTalk game message reception settings } })); |
Retrieve KakaoTalk Profile
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // Retrieve KakaoTalk profile FKGTKakaoTalk::TalkProfile(FKGTResultWithKakaoTalkProfileDelegate::CreateLambda([=](FKGTResult result, FKGTKakaoTalkProfile profile) { if (result.IsSuccess()) { // Successfully retrieved KakaoTalk profile // profile - The KakaoTalk profile information of the logged-in user } else if (result.GetCode() == FKGTResultCode::NotKakaoTalkUser) { // The logged-in user is not a 'KakaoTalk' user. (For cases where the user is not a KakaoTalk user) } else { // Failed to retrieve KakaoTalk profile } })); |
Retrieve KakaoTalk Game Friend List
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // Retrieve game friend list FKGTKakaoTalk::Friends(FKGTResultWithPlayerListDelegate::CreateLambda([=](FKGTResult result, TArray<FKGTPlayer> playerList) { if (result.IsSuccess()) { // Successfully retrieved KakaoTalk game friends list. for (FKGTPlayer player : playerList) { FKGTIdpProfile idpProfile = player.GetIdpProfile(); FKGTKakaoFriendProfile *kakaoFriendProfile = (FKGTKakaoFriendProfile*)&idpProfile; } } else if (result.GetCode() == FKGTResultCode::NotKakaoTalkUser) { // The logged-in user is not a 'KakaoTalk' user. (For cases where the user is not a KakaoTalk user) } else { // Failed to retrieve KakaoTalk game friends list } })); |
Sending KakaoTalk Game Messages
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // Kakao friend profile retrieved through the friends API FKGTKakaoFriendProfile *kakaoFriendProfile; // [TODO] Set the template ID FString templateId = TEXT(""); // [TODO] Set the parameters for the message template TMap<FString, FString> argumentDic; argumentDic.Add(TEXT("${nickname}"), kakaoFriendProfile->GetNickname()); argumentDic.Add(TEXT("rog_link"), TEXT("test=100&hello=20111")); // Send a KakaoTalk game message FKGTKakaoTalk::SendGameMessage((*kakaoFriendProfile), templateId, argumentDic, FKGTResultDelegate::CreateLambda([=](FKGTResult result) { if (result.IsSuccess()) { // Successfully sent the KakaoTalk chat message } else { if (result.GetCode() == FKGTResultCode::MessageSettingDisabled) { // The recipient has set message reception to be disabled } else if (result.GetCode() == FKGTResultCode::ExceedDailyUsage) { // Occurs when the daily quota for sending messages to a specific app (regardless of the recipient) is exceeded. } else if (result.GetCode() == FKGTResultCode::ExceedMonthlyUsage) { // 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 } } })); |
Sending KakaoTalk Friend Invitation Messages
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // [TODO] Set whether to display as a popup window bool isSingle = true; // [TODO] Set whether to display as a popup window bool isPopup = true; // [TODO] Set the template ID FString templateId = TEXT(""); // [TODO] Set the parameters for the message template TMap<FString, FString> argumentDic; argumentDic.Add(TEXT("${nickname}"), TEXT("nickname")); FKGTKakaoTalk::SendInviteMessage(isSingle, isPopup, templateId, argumentDic, FKGTResultWithKakaoUserListDelegate::CreateLambda([=](FKGTResult result, TArray<FKGTKakaoUser> users) { if (result.IsSuccess()) { // Successfully sent KakaoTalk invite message for (FKGTKakaoUser user : users) { // Check the list of users to whom the invite message was sent } } else { // If all failed (need to return a common cause) if (result.GetCode() == FKGTResultCode::MessageSettingDisabled) { // The recipient has set message reception to be disabled } else if (result.GetCode() == FKGTResultCode::ExceedDailyUsage) { // Occurs when the daily quota for sending messages to a specific app (regardless of the recipient) is exceeded. } else if (result.GetCode() == FKGTResultCode::ExceedMonthlyUsage) { // 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
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // [TODO] Set the channel ID int32 channelId = 0; FKGTKakaoTalk::AddChannel(channelId, FKGTResultDelegate::CreateLambda([=](FKGTResult result) { if (result.IsSuccess()) { // Successfully added the channel } else if (result.GetCode() == FKGTResultCode::NotKakaoTalkUser) { // The logged-in user is not a 'KakaoTalk' user. (For cases where the user is not a KakaoTalk user) } else { // Failed to add the channel } })); |
Retrieve the list of friends to whom I sent an invite message
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // [TODO] Set the event ID int32 eventId = 0; // Retrieve the list of players I invited FKGTKakaoInvitation::Joiners(eventId, FKGTResultWithJoinersDelegate::CreateLambda([=](FKGTResult result, TArray<FKGTPlayer> players) { if (result.IsSuccess()) { // Successfully retrieved the list of players I invited for (FKGTPlayer player : players) { // Recipient's player ID FString playerId = player.GetPlayerId(); FKGTIdpProfile idpProfile = player.GetIdpProfile(); FKGTKakaoFriendProfile *kakaoProfile = (FKGTKakaoFriendProfile*)&idpProfile; // Recipient's nickname FString nickname = kakaoProfile->GetNickname(); // Recipient's profile thumbnail image FString thumbnailImageUrl = kakaoProfile->GetThumbnailImageUrl(); // Check if the recipient has a withdrawal history. Use this flag to display withdrawal information in the UI. bool isUnregistered = kakaoProfile->IsUnregistered(); } } else if (result.GetCode() == FKGTResultCode::NotKakaoTalkUser) { // 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
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
...