Unity Client SDK API
- 1 Initialization and Status Change Event Processing
- 1.1 SDK Initialization
- 1.2 Start
- 1.3 Pause
- 1.4 Resume
- 1.5 Setting Up Auto Login in a Windows Environment
- 2 Login
- 3 Logout
- 4 Unregistration
- 5 Account Linking
- 6 Profile
- 7 System Information
- 8 Kakao Integration Feature
- 8.1 Setting Up KakaoTalk Game Message Reception
- 8.2 Retrieve KakaoTalk Profile
- 8.3 Retrieve KakaoTalk Game Friend List
- 8.4 Sending KakaoTalk Game Messages
- 8.5 Sending KakaoTalk Friend Invitation Messages
- 8.6 Adding a KakaoTalk Channel
- 8.7 Retrieve the list of friends to whom I sent an invite message
- 8.8 Retrieve the count of friends to whom I sent an invite message
Initialization and Status Change Event Processing
SDK Initialization
using KakaoGame.API;
KGTApplication.InitSDK();
Start
using KakaoGame.API;
KGTApplication.Start((result) =>
{
if (result.IsSuccess)
{
// Start successful
if (KGTPlayer.IsLoggedIn)
{
// Auto login successful
// The current Player's ID issued by the platform
string playerId = KGTPlayer.CurrentPlayer.PlayerId;
// Platform access token
string accessToken = KGTPlayer.AccessToken;
// Retrieve the current IDP authentication information
var idpProfile = KGTPlayer.CurrentPlayer.IdpProfile;
// [TODO] Log in to the game server and proceed to the game screen
}
else
{
// No auto login information, call the login API
}
}
else
{
if (result.code == KGTResultCode.NetworkFailure ||
result.code == KGTResultCode.ServerTimeout ||
result.code == KGTResultCode.ServerConnectionFailed)
{
// [TODO] In case of a network error, notify the user that the start failed due to network issues and retry
}
else
{
// [TODO] Notify the user that an error occurred. It would be helpful to include the error code in the message for tracking the cause.
}
}
});
Pause
using KakaoGame.API;
// Implement in the background transition function of appDelegate
// [Note] Implement in OnApplicationPause.
// [Note] Do not implement in OnApplicationFocus.
void OnApplicationPause(bool paused) {
// Method to be executed when the game moves to the background
// The Pause API always returns success.
// Therefore, you do not need to check the result separately in the game.
if (paused)
{
KGTApplication.Pause((result) => {});
}
}
Resume
using KakaoGame.API;
// Implement in the background transition function of appDelegate
// [Note] Implement in OnApplicationPause.
// [Note] Do not implement in OnApplicationFocus.
void OnApplicationPause(bool paused) {
if (!paused) // When moved to the foreground
{
// Method to be executed when the game moves to the foreground
KGTApplication.Resume((result) =>
{
if (result.IsSuccess)
{
// [TODO] If 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 == KGTResultCode.AuthFailure ||
result.code == KGTResultCode.IdpAuthFailure)
{
// [TODO] In case of authentication failure, move to the start screen and perform the new login flow again.
}
else
{
// [TODO] If other errors occur, provide an error notification and retry the resume.
}
}
});
}
}
Setting Up Auto Login in a Windows Environment
using KakaoGame.API;
// 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, the next time KGTApplication starts, auto-login will proceed automatically. To remove the auto-login information, you must log out.
bool useAutoLogin = true;
KGTApplication.UseAutoLogin = useAutoLogin;
Login
Logging In Without Using the Default Login UI
using KakaoGame.API;
KGTIdpCode idpCode = KGTIdpCode.Kakao;
KGTPlayer.Login(idpCode, (result) =>
{
if (result.IsSuccess)
{
// Handle successful login.
// The current Player's ID issued by the platform
string playerId = KGTPlayer.CurrentPlayer.PlayerId;
// Platform access token
string accessToken = KGTPlayer.AccessToken;
// Retrieve the current IDP authentication information
var idpProfile = KGTPlayer.CurrentPlayer.IdpProfile;
// [TODO] Log in to the game server and proceed to the game screen
}
else
{
// Handle login failure.
if (result.code == KGTResultCode.NetworkFailure ||
result.code == KGTResultCode.ServerTimeout ||
result.code == KGTResultCode.ServerConnectionFailed)
{
// [TODO] If a network error occurs, prompt the user to retry logging in.
}
else if (result.code == KGTResultCode.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 (result.code == KGTResultCode.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
using KakaoGame.API;
// The bridgeToken received through the launcher
string bridgeToken = "";
KGTPlayer.LoginWithBridgeToken(bridgeToken, (result) =>
{
if (result.IsSuccess)
{
// Handle successful login.
// The current Player's ID issued by the platform
string playerId = KGTPlayer.CurrentPlayer.PlayerId;
// Platform access token
string accessToken = KGTPlayer.AccessToken;
// Retrieve the current IDP authentication information
var idpProfile = KGTPlayer.CurrentPlayer.IdpProfile;
// [TODO] Log in to the game server and proceed to the game screen
}
else
{
// Handle login failure.
if (result.code == KGTResultCode.NetworkFailure ||
result.code == KGTResultCode.ServerTimeout ||
result.code == KGTResultCode.ServerConnectionFailed)
{
// [TODO] If a network error occurs, prompt the user to retry logging in.
}
else if (result.code == KGTResultCode.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 (result.code == KGTResultCode.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
using KakaoGame.API;
KGTPlayer.Logout(false, (result) =>
{
if (result.IsSuccess)
{
// Logout successful
// [TODO] Return to the start screen
}
else
{
// Logout failed
}
});
Unregistration
Unregistering Without Using the Default Unregistration UI
using KakaoGame.API;
KGTPlayer.Unregister(false, (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
using KakaoGame.API;
KGTIdpCode idpCode = KGTIdpCode.Kakao;
KGTPlayer.Connect(idpCode, (result) =>
{
if (result.IsSuccess)
{
// Account connection successful
}
else if (result.code == KGTResultCode.NotAuthorized)
{
// When the current session is not authenticated
}
else if (result.code == KGTResultCode.InvalidState)
{
// When the account is already connected
}
else if (result.code == KGTResultCode.AlreadyUsedIDPAccount)
{
// When attempting to connect with an IDP account that is already in use
}
else
{
// Other errors
}
});
Profile
Retrieve My Information
using KakaoGame.API;
KGTPlayer player = KGTPlayer.CurrentPlayer;
Retrieve My IDP Information
using KakaoGame.API;
KGTIdpProfile idpProfile = KGTPlayer.CurrentPlayer.IdpProfile;
System Information
Retrieve Language Code
using KakaoGame.API;
string languageCode = KGTSystem.LanguageCode;
Retrieve Country Code
using KakaoGame.API;
string countryCode = KGTSystem.CountryCode;
Retrieve IP-based Country Code
using KakaoGame.API;
string geoCountryCode = KGTSystem.GeoCountryCode;
Retrieve Device ID
using KakaoGame.API;
string deviceId = KGTSystem.DeviceId;
Retrieve Device Model
using KakaoGame.API;
string deviceModel = KGTSystem.DeviceModel;
Retrieve OS Name
using KakaoGame.API;
string osName = KGTSystem.OsName;
Retrieve Network Connection Status
using KakaoGame.API;
bool isNetworkConnected = KGTSystem.IsNetworkConnected;
Retrieve Connected Network Type
using KakaoGame.API;
string networkType = KGTSystem.NetworkType;
Kakao Integration Feature
Setting Up KakaoTalk Game Message Reception
using KakaoGame.API;
KGTKakaoTalk.ShowSetting((result) =>
{
if (result.IsSuccess)
{
// Successfully set the KakaoTalk game message reception settings
}
else if (result.code == KGTResultCode.NotKakaoTalkUser)
{
// 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
using KakaoGame.API;
KGTKakaoTalk.TalkProfile((result) =>
{
if (result.IsSuccess)
{
// Successfully retrieved KakaoTalk profile
KGTKakaoTalkProfile talkProfile = result.Content;
}
else if (result.code == KGTResultCode.NotKakaoTalkUser)
{
// 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
using KakaoGame.API;
KGTKakaoTalk.Friends((result) =>
{
if (result.IsSuccess)
{
var players = result.Content;
// Successfully retrieved KakaoTalk game friends list.
foreach(var player in players) {
var kakaoProfile = (KGTKakaoProfile)player.IdpProfile; // Used when sending game messages
}
}
else if (result.code == KGTResultCode.NotKakaoTalkUser)
{
// 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 message reception settings
}
});
Sending KakaoTalk Game Messages
using KakaoGame.API;
// Through the Friends API
KGTKakaoFriendProfile kakaoProfile; // Kakao profile (KGTKakaoFriendProfile object)
// [TODO] Set the template Id
string templateId;
// [TODO] Set the arguments for the message template
Dictionary<string, object> argumentDic = new Dictionary<string, object>();
KGTKakaoTalk.SendGameMessage(kakaoProfile, templateId, argumentDic, (result) =>
{
if (result.IsSuccess)
{
// Successfully sent a KakaoTalk chat message.
}
else if (result.code == KGTResultCode.MessageSettingDisabled)
{
// The recipient has set message reception to be disabled.
}
else if (result.code == KGTResultCode.ExceedDailyUsage)
{
// Occurs when the daily quota for sending messages to a specific app (regardless of the recipient) is exceeded.
}
else if (result.code == KGTResultCode.ExceedMonthlyUsage)
{
// Occurs when the monthly quota for sending messages to a specific person for a specific app is exceeded.
}
else if (result.code == KGTResultCode.NotKakaoTalkUser)
{
// 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 send KakaoTalk chat message.
}
});
Sending KakaoTalk Friend Invitation Messages
using KakaoGame.API;
// [TODO] Set whether to display as a popup window
bool isSingle;
// [TODO] Set whether to display as a popup window
bool isPopup;
// [TODO] Set the template Id
string templateId;
// [TODO] Set the arguments for the message template
Dictionary<string, object> argumentDic = new Dictionary<string, object>();
KGTKakaoTalk.SendInviteMessage(isSingle, isPopup, templateId, argumentDic, (result) =>
{
if (result.IsSuccess)
{
// Request successful
}
else
{
// Request failed
if (result.code == KGTResultCode.MessageSettingDisabled)
{
// The recipient has set message reception to be disabled.
}
else if (result.code == KGTResultCode.ExceedDailyUsage)
{
// Occurs when the daily quota for sending messages to a specific app (regardless of the recipient) is exceeded.
}
else if (result.code == KGTResultCode.ExceedMonthlyUsage)
{
// Occurs when the monthly quota for sending messages to a specific person for a specific app is exceeded.
}
else if (result.code == KGTResultCode.NotKakaoTalkUser)
{
// The logged-in user is not a 'KakaoTalk' user.
}
else
{
// Other errors
}
}
});
Adding a KakaoTalk Channel
using KakaoGame.API;
// [TODO] Set the channel Id
int channelId;
KGTKakaoTalk.AddChannel(channelId, (result) =>
{
if (result.IsSuccess)
{
// Successfully added friend
}
else if (result.code == KGTResultCode.NotKakaoTalkUser)
{
// 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 friend
}
});
Retrieve the list of friends to whom I sent an invite message
using KakaoGame.API;
Retrieve the count of friends to whom I sent an invite message
using KakaoGame.API;
, multiple selections available,