목차 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
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 Initializationinitialization failed, so you should either 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 the resume fails, ifnavigate it'sto anthe authenticationlogin failure,screen goif toit’s thean loginauthentication screenfailure; otherwise, show an error popup and check whether if the user wants to retry. if (result.Code == FKGTResultCode::AuthFailure || result.Code == FKGTResultCode::IdpAuthFailure) { // [TODO] InIf casethe ofstart authenticationfails failure,- moveInitialization tofailed, theso startyou screenshould andeither performretry the newstart loginor flowclose again.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 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, notifyprompt the user that the start failed due to aretry network issue and prompt to retrylogging in. } else if (resultCode == FKGTResultCode::Forbidden) { // [TODO] During the CBT period, authentication may not be possible for users who are not allowed. ProvideDisplay ana appropriate 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, notifyprovide an theerror usernotification and prompt themthe user to retry the login. 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 preferencessettings // 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 preferencessettings } })); |
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 friendfriends 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 friendfriends 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 up message reception to be disabled } else if (result.GetCode() == FKGTResultCode::ExceedDailyUsage) { // ExceededOccurs when the daily quota of messages that can be sent by one person for daily quota for sending messages to a specific app (regardless of the recipient) is exceeded. } else if (result.GetCode() == FKGTResultCode::ExceedMonthlyUsage) { // ExceededOccurs when the monthly quota for ofsending messages that can be sent by one person to a specific recipientperson for a specific app is exceeded. } else { // Failed to send the KakaoTalk chat message } } })); |
Sending KakaoTalk Friend Invitation Messages
발췌문 삽입 | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
#include "KakaoGameV4.h" // [TODO] Set whether to display inas a popup window bool isSingle = true; // [TODO] Set whether to display inas 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 up message reception to be disabled } else if (result.GetCode() == FKGTResultCode::ExceedDailyUsage) { // ExceededOccurs when the daily quota of messages that can be sent by one person forfor sending messages to a specific app (regardless of the recipient) is exceeded. } else if (result.GetCode() == FKGTResultCode::ExceedMonthlyUsage) { // Occurs Exceededwhen the monthly quota offor sending messages that can be sent by one person to a specific recipientperson 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
발췌문 삽입 | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
...