목차 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
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) => string{ gameLanguageCode =if KGTSystem.GameLanguageCode; |
Set Game Language Code
...
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API;
var languageCode = KGTLanguageCode.Device;
KGTSystem.SetGameLanguageCode(languageCode); |
Kakao Integration Feature
Setting Up KakaoTalk Game Message Reception
...
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API; KGTKakaoTalk.ShowSetting((result) =>(result.IsSuccess) { // Successfully set the KakaoTalk game message reception settings } else if (result.code == KGTResultCode.NotKakaoTalkUser) { if (result.IsSuccess) // The logged-in {user is not a 'KakaoTalk' user. This occurs when the //user Successfullyis setonly theregistered KakaoTalkwith gameKakaoStory messageand receptionnot settingsKakaoTalk. } else if (result.code == KGTResultCode.NotKakaoTalkUser) { // TheFailed logged-into userset is not a 'KakaoTalk' user. This occurs when the user is not a KakaoTalk user, such as in the case of a user who is only registered for KakaoStory. }the KakaoTalk game message reception settings } }); |
Retrieve KakaoTalk Profile
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API; KGTKakaoTalk.TalkProfile((result) => { if (result.IsSuccess) { else // Successfully retrieved {KakaoTalk profile // FailedKGTKakaoTalkProfile totalkProfile set the KakaoTalk game message reception settings= result.Content; } } }); |
Retrieve KakaoTalk Profile
...
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API; KGTKakaoTalk.TalkProfile((result) =>else if (result.code == KGTResultCode.NotKakaoTalkUser) { if (result.IsSuccess) { // Successfully retrieved KakaoTalk profile KGTKakaoTalkProfile talkProfile = result.Content; // The logged-in user is not a 'KakaoTalk' user. This occurs when the user is only registered with KakaoStory and not KakaoTalk. } else if (result.code == KGTResultCode.NotKakaoTalkUser) { // TheFailed logged-into userretrieve isKakaoTalk notprofile a 'KakaoTalk' user. This occurs when the user is not a KakaoTalk user, such as in the case of a user who is only registered for KakaoStory. }} }); |
Retrieve KakaoTalk Game Friend List
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API; KGTKakaoTalk.Friends((result) => { if (result.IsSuccess) { var players = result.Content; // Successfully retrieved KakaoTalk game friends list. else foreach(var player in players) { var kakaoProfile = (KGTKakaoProfile)player.IdpProfile; // Failed to retrieve KakaoTalk profile Used when sending game messages } }); |
Retrieve KakaoTalk Game Friend List
...
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API; KGTKakaoTalk.Friends((result) => { } else if (result.code == KGTResultCode.NotKakaoTalkUser) { if (result.IsSuccess) { // The logged-in user is not a 'KakaoTalk' varuser. playersThis = result.Content; // Successfully retrieved KakaoTalk game friends list. occurs when the user is only registered with KakaoStory and not KakaoTalk. } else foreach(var player in players) { var kakaoProfile = (KGTKakaoProfile)player.IdpProfile; // UsedFailed to whenretrieve sendingKakaoTalk game messagesmessage reception settings } } else if (result.code == KGTResultCode.NotKakaoTalkUser) { // The logged-in user is not a 'KakaoTalk' user. This occurs when the user is not a KakaoTalk user, such as in the case of a user who is only registered for KakaoStory. } else }); |
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) { // FailedSuccessfully tosent retrievea KakaoTalk gamechat message. reception} settings else } }); |
Sending KakaoTalk Game Messages
...
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API; // Through the Friends API KGTKakaoFriendProfile kakaoProfile; // Kakao profile (KGTKakaoFriendProfile object)if (result.code == KGTResultCode.MessageSettingDisabled) { // [TODO]The Setrecipient thehas templateset Idmessage stringreception templateId;to be disabled. // [TODO] Set the} arguments for the message templateelse Dictionary<string, object> argumentDic = new Dictionary<string, object>(); KGTKakaoTalk.SendGameMessage(kakaoProfile, templateId, argumentDic, (result) => {if (result.code == KGTResultCode.ExceedDailyUsage) { if (result.IsSuccess) { // Successfully sent a KakaoTalk chat message// Occurs when the daily quota for sending messages to a specific app (regardless of the recipient) is exceeded. } else if (result.code == KGTResultCode.MessageSettingDisabledExceedMonthlyUsage) { // The recipient has set message reception to be disabledOccurs when the monthly quota for sending messages to a specific person for a specific app is exceeded. } else if (result.code == KGTResultCode.ExceedDailyUsageNotKakaoTalkUser) { // OccursThe whenlogged-in theuser dailyis quota for sending messages to a specific app (regardless of the recipient) is exceedednot a 'KakaoTalk' user. This occurs when the user is only registered with KakaoStory and not KakaoTalk. } else if (result.code == KGTResultCode.ExceedMonthlyUsage) { // Occurs when the monthly quota for sending messagesFailed to asend specificKakaoTalk person for a specific app is exceededchat message. } else if (result.code == KGTResultCode.NotKakaoTalkUser) { // The logged-in user is not a 'KakaoTalk' user. This occurs when the user is not a KakaoTalk user, such as in the case of a user who is only registered for KakaoStory. } else }); |
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) { // Failed to send KakaoTalk chat message. Request successful } else { } }); |
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;// Request failed if (result.code == KGTResultCode.MessageSettingDisabled) { // [TODO]The Setrecipient thehas templateset Idmessage stringreception templateId;to be disabled. // [TODO] Set the arguments for the message} template Dictionary<string, object> argumentDic = new Dictionary<string, object>(); KGTKakaoTalk.SendInviteMessage(isSingle, isPopup, templateId, argumentDic,else if (result).code => {= KGTResultCode.ExceedDailyUsage) if (result.IsSuccess) { { // RequestOccurs successfulwhen the daily quota for }sending messages to a specific elseapp (regardless of the recipient) {is exceeded. // Request} failed else if (result.code == KGTResultCode.MessageSettingDisabledExceedMonthlyUsage) { // Occurs Thewhen the recipientmonthly hasquota setfor messagesending receptionmessages to be disabled a specific person for a specific app is exceeded. } else if (result.code == KGTResultCode.ExceedDailyUsageNotKakaoTalkUser) { // OccursThe whenlogged-in theuser dailyis quotanot fora sending messages to a specific app (regardless of the recipient) is exceeded. 'KakaoTalk' user. } else if (result.code == KGTResultCode.ExceedMonthlyUsage) { // Occurs when the monthly quota for sending messages to a specific person for a specific app is exceeded.Other errors } } } else if (result.code == KGTResultCode.NotKakaoTalkUser) }); |
Adding a KakaoTalk Channel
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API; // [TODO] Set the channel Id int channelId; KGTKakaoTalk.AddChannel(channelId, (result) => { if (result.IsSuccess) { { // TheSuccessfully logged-inadded userfriend is not a 'KakaoTalk' user.} else if (result.code }== KGTResultCode.NotKakaoTalkUser) { else // The logged-in user {is not a 'KakaoTalk' user. This occurs when the user is only registered //with OtherKakaoStory errorsand not KakaoTalk. } } }); |
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 not a KakaoTalk user, such as in the case of a user who is only registered for KakaoStory.
}
else
{
// Failed to add friend
}
}); |
Google Games
Show Achievement Screen
...
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API;
KGTGoogleGamesAchievements.ShowAchievementView(); |
Achievement Unlocked
...
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API;
// [TODO] Set the achievement ID
var id = "";
KGTGoogleGamesAchievements.Unlock(id); |
Display Achievement
...
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API;
// [TODO] Set the achievement ID
var id = "";
KGTGoogleGamesAchievements.Reveal(id); |
Increase Achievement Level
...
else
{
// Failed to add friend
}
}); |
Retrieve the list of friends to whom I sent an invite message
발췌문 삽입 | ||||||||
---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API;
// [TODO] Set the achievement ID
var id = "";
var numSteps = 0;
KGTGoogleGamesAchievements.SetSteps(id, numSteps); |
...
;
|
Retrieve the count of friends to whom I sent an invite message
발췌문 삽입 | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
코드 블럭 | ||
---|---|---|
| ||
using KakaoGame.API; // [TODO] Set the achievement ID var id = ""; var numSteps = 0; KGTGoogleGamesAchievements.Increment(id, numSteps); |