iOS Client SDK API
- 1 Initialization and Status Change Event Processing
- 1.1 App Event Method Initialization (iOS Only)
- 1.2 SDK Initialization
- 1.3 Start
- 1.4 Pause
- 1.5 Resume
- 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
App Event Method Initialization (iOS Only)
import KakaoGame
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
override init() {
KGTApplication.setSwizzleAppDelegate(delegate: AppDelegate.description())
}
}
SDK Initialization
import KakaoGame
/**
* When using a single app
*/
let config = KGTConfig(appId: "909428",
appSecret: "c3c38bbfa3828b342d946e9770c974d0",
appVersion: "1.0.0",
market: "appStore",
ageRating: "14",
serverType: .QA,
logLevel: .Verbose)
/**
* When using an app group
*/
let apps: [String : String] = [ "909428" : "c3c38bbfa3828b342d946e9770c974d0",
"921478" : "5891c32124ca35821890a0bc1cec77a5"]
let config = KGTConfig(appGroupId: "tubeAppGroup",
apps: apps,
appVersion: "1.0.0",
market: "appStore",
ageRating: "14",
serverType: .QA,
logLevel: .Verbose)
KGTApplication.initSDK(config)
Start
import KakaoGame
KGTApplication.start { error in
if error.isSuccess {
// If the start is successful
// Check if auto-login is enabled
let isLoggedIn = KGTPlayer.isLoggedIn
if isLoggedIn {
// The current Player's ID issued by the platform
let playerId = KGTPlayer.currentPlayer?.playerId
// Platform access token
let accessToken = KGTPlayer.accessToken
// Retrieve the current IDP authentication information
let idpProfile = KGTPlayer.currentPlayer?.idpProfile
// [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 error.code == KGTErrorCode.networkFailure ||
error.code == KGTErrorCode.serverTimeout ||
error.code == KGTErrorCode.serverConnectionFalied {
// [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.
}
}
}
Pause
import KakaoGame
KGTApplication.pause()
Resume
import KakaoGame
KGTApplication.resume { error in
if error.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 error.code == KGTErrorCode.authFailure ||
error.code == KGTErrorCode.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. - If the issue persists, close the app.
}
}
})
Login
Logging In Without Using the Default Login UI
import KakaoGame
// Set the IdpCode for login
let idpCode = KGTIdpCode.Kakao
// Login with a specific IDP
KGTPlayer.login(with: idpCode) { error in
if error.isSuccess {
// IDP login and platform login successful
// The current Player's ID issued by the platform
let playerId = KGTPlayer.currentPlayer?.playerId
// Platform access token
let accessToken = KGTPlayer.accessToken
// Retrieve the current IDP authentication information
let idpProfile = KGTPlayer.currentPlayer?.idpProfile
// [TODO] Since 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 error.code == KGTErrorCode.networkFailure ||
error.code == KGTErrorCode.serverTimeout ||
error.code == KGTErrorCode.serverConnectionFailed {
// [TODO] If other errors occur, provide an error notification and prompt the user to retry logging in.
} else if error.code == KGTErrorCode.blockedByPolicy {
// [TODO] Login attempt from a blocked country code or IP range. Handle this accordingly.
} else if error.code == KGTErrorCode.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
import KakaoGame
// Logout request
KGTPlayer.logout(showUI: false) { error in
if error.isSuccess {
// Logout successful
// [TODO] Return to the start screen
} else {
// Logout failed
}
})
Unregistration
Unregistering Without Using the Default Unregistration UI
import KakaoGame
// Unregister request
KGTPlayer.unregister(showUI: false) { error in
if error.isSuccess {
// Unregistration successful
// [TODO] Return to the start screen
} else {
// Unregistration failed
}
})
Account Linking
Linking Accounts Without Using the Default Account Linking UI
import KakaoGame
// Set the IdpCode you want to log in with
let idpCode = KGTIdpCode.Kakao
// Connect to a specific IDP account
KGTPlayer.connect(idpCode: idpCode) { error in
if error.isSuccess {
// IDP connection successful
// Player ID does not change.
} else {
// IDP connection failed
if error.code == KGTErrorCode.invalidParameter {
// Invalid parameter was passed
} else if error.code == KGTErrorCode.notAuthorized {
// The user is not currently logged in
} else if error.code == KGTErrorCode.invalidState {
// The current authenticated IDP is not eligible for account connection
} else if error.code == KGTErrorCode.alreadyUsedIdpAccount {
// The account is already connected
} else {
// Other errors occurred
}
}
})
Profile
Retrieve My Information
import KakaoGame
let localPlayer = KGTPlayer.currentPlayer
Retrieve My IDP Information
import KakaoGame
let idpProfile = KGTPlayer.currentPlayer?.idpProfile
System Information
Retrieve Language Code
import KakaoGame
let languageCode = KGTSystem.languageCode
Retrieve Country Code
import KakaoGame
let countryCode = KGTSystem.countryCode
Retrieve IP-based Country Code
import KakaoGame
let countryCode = KGTSystem.geoCountryCode
Retrieve Device ID
import KakaoGame
let deviceId = KGTSystem.deviceId
Retrieve Device Model
import KakaoGame
let deviceModel = KGTSystem.deviceModel
Retrieve OS Name
import KakaoGame
let osName = KGTSystem.osName
Retrieve Network Connection Status
import KakaoGame
let isNetworkConnected = KGTSystem.isNetworkConnected
Retrieve Connected Network Type
import KakaoGame
let networkType = KGTSystem.networkType
Kakao Integration Feature
Setting Up KakaoTalk Game Message Reception
import KakaoGame
import KakaoGameKakao
// Display the view to set the KakaoTalk game message reception settings
KGTKakaoTalk.showSetting { error, isAllowedMe in
if error.isSuccess {
// Successfully set the KakaoTalk game message reception settings
let isAllowedMe = isAllowedMe // Whether message reception is allowed as per the settings
} else if error.code == KGTErrorCode.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
import KakaoGame
import KakaoGameKakao
// Retrieve KakaoTalk profile
KGTKakaoTalk.talkProfile { error, profile in
if error.isSuccess {
// Successfully retrieved KakaoTalk profile
let talkProfile = profile // The KakaoTalk profile information of the logged-in user
} else if error.code == KGTErrorCode.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
import KakaoGame
import KakaoGameKakao
// Retrieve the list of game friends
KGTKakaoTalk.friends { error, players in
if error.isSuccess {
// Successfully retrieved KakaoTalk game friends list.
for player in players {
if let kakaoFriendProfile = player.idpProfile as? KGTKakaoFriendProfile {
// You can now access kakaoFriendProfile properties here
}
}
} else if error.code == KGTErrorCode.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 friends list
}
})
Sending KakaoTalk Game Messages
import KakaoGame
import KakaoGameKakao
// Friend object retrieved via the friends API
let kakaoProfile: KGTKakaoFriendProfile = // Kakao profile (KGTKakaoFriendProfile object)
// [TODO] Set the template Id
let templateId = ""
// [TODO] Set the arguments for the message template
var argumentDic: [String: Any]? = [:]
argumentDic?["rog_link"] = "test=100&hello20111"
argumentDic?["bruce2"] = "test=100&hello=20111"
// Send KakaoTalk game message
KGTKakaoTalk.sendGameMessage(kakaoProfile: kakaoProfile, templateId: templateId, argumentDic: argumentDic) { error in
if error.isSuccess {
// Successfully sent KakaoTalk chat message
} else {
if error.code == KGTErrorCode.messageSettingDisabled {
// The recipient has set message reception to be disabled.
} else if error.code == KGTErrorCode.exceedDailyUsage {
// Occurs when the daily quota for sending messages to a specific app (regardless of the recipient) is exceeded.
} else if error.code == KGTErrorCode.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
import KakaoGame
import KakaoGameKakao
// [TODO] Set whether to display as a popup window
let isSingle = true
// [TODO] Set whether to display as a popup window
let isPopup = true
// [TODO] Set the template Id
let templateId = ""
// [TODO] Set the arguments for the message template
var argumentDic: [String: Any]? = [:]
argumentDic?["rog_link"] = "test=100&hello20111"
argumentDic?["bruce2"] = "test=100&hello=20111"
KGTKakaoTalk.sendInviteMessage(isSingle: isSingle, isPopup: isPopup, templateId: templateId, argumentDic: argumentDic) { error, users in
if error.isSuccess {
// Successfully sent KakaoTalk invite message
for user in users {
// Check the list of users who received the invite message
}
} else {
// Failed to send to all users (common cause needs to be returned)
if error.code == KGTErrorCode.messageSettingDisabled {
// The recipient has set message reception to be disabled.
} else if error.code == KGTErrorCode.exceedDailyUsage {
// Occurs when the daily quota for sending messages to a specific app (regardless of the recipient) is exceeded.
} else if error.code == KGTErrorCode.exceedMonthlyUsage {
// Occurs when the monthly quota for sending messages to a specific person for a specific app is exceeded.
} else {
// Failed to send KakaoTalk invite message
}
}
})
Adding a KakaoTalk Channel
import KakaoGame
import KakaoGameKakao
// [TODO] Set the channel ID
let channelId = 0
KGTKakaoTalk.addChannel(channelId: channelId) { error in
if error.isSuccess {
// Successfully added the channel
} else if error.code == KGTErrorCode.notKakaoTalkUser {
// The logged-in user is not a KakaoTalk user. For example, they might only be a Kakao Story user and not a KakaoTalk user.
} else {
// Failed to add the channel
}
})
Retrieve the list of friends to whom I sent an invite message
import KakaoGame
import KakaoGameKakao
// set event ID.
let eventId = 0
// Retrieve the list of friends to whom I sent an invite message.
KGTKakaoInvitation.joiners(eventId: eventId) { error, players in
if error.isSuccess {
// Successfully retrieve the list of friends.
// Retrieve the list of players I have invited.
if players.isEmpty {
// No users have joined the app.
} else {
// There are users who have joined the app.
for player in players {
// Recipient’s player ID
let playerId = player.playerId
let kakaoProfile = player.idpProfile as? KGTKakaoFriendProfile
// Recipient’s nickname
let nickname = kakaoProfile?.nickname
// Recipient’s profile thumbnail image
let thumbnailImageUrl = kakaoProfile?.thumbnailImageUrl
// Recipient’s withdrawal history inquiry. Use the corresponding flag when displaying the withdrawal status information in the UI.
let isUnregistered = kakaoProfile?.isUnregistered
}
}
} else if error.code == KGTErrorCode.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 the list of friends.
}
}
Retrieve the count of friends to whom I sent an invite message
import KakaoGame
import KakaoGameKakao
// set event ID.
let eventId = 0
KGTKakaoInvitation.receiversCount(eventId: eventId) { error, totalReceiversCount, joinersCount in
if error.isSuccess {
// Successfully retrieve the count of friends to whom I sent an invite message.
} else if error.code == KGTErrorCode.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 the count of friends.
}
}
, multiple selections available,