Android 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 Adding a New Intent Receive Setting
- 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
import com.kakaogame.KGTApplication;
import com.kakaogame.KGTConfig;
/**
* When using a single app
*/
KGTConfig config = new KGTConfig();
config.setAppInfo(
"909428", // appID
"c3c38bbfa3828b342d946e9770c974d0", // appSecret
"1.0.0", // appVersion
"googlePlay", // market
"14", // ageRating
KGTServerType.QA, // server type
KGTLogLevel.Error // log level
);
/**
* When using an app group
*/
Map<String, String> appsForAppGroup = new HashMap<>();
appsForAppGroup.put("909428", "c3c38bbfa3828b342d946e9770c974d0");
appsForAppGroup.put("921478", "5891c32124ca35821890a0bc1cec77a5");
KGTConfig config = new KGTConfig();
config.setAppGroupInfos(
"tubeAppGroup", // appGroupId
appsForAppGroup, // app info map
"1.0.0", // appVersion
"googlePlay", // market
"14", // ageRating
KGTServerType.QA, // server type
KGTLogLevel.Error // log level
);
KGTApplication.initSDK(this, config);
Start
import com.kakaogame.KGTApplication;
import com.kakaogame.KGTIdpProfile;
import com.kakaogame.KGTPlayer;
import com.kakaogame.KGTResult;
KGTApplication.start(activity, null, result -> {
if (result.isSuccess()) {
// If the start is successful
// Check if auto-login is enabled
boolean isLoggedIn = KGTPlayer.isLoggedIn();
if (isLoggedIn) {
// The current Player's ID issued by the platform
String playerId = KGTPlayer.getCurrentPlayer().getPlayerId();
// Platform access token (ZAT)
String accessToken = KGTPlayer.getCurrentPlayer().getAccessToken();
// Retrieve the current IDP authentication information
KGTIdpProfile idpProfile = KGTPlayer.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.
int resultCode = result.getCode();
if (resultCode == KGTResult.KGTResultCode.NETWORK_FAILURE
|| resultCode == KGTResult.KGTResultCode.SERVER_TIMEOUT
|| resultCode == KGTResult.KGTResultCode.SERVER_CONNECTION_FAILED) {
// [TODO] If a network error occurs, inform 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 com.kakaogame.KGTApplication;
import com.kakaogame.KGTResult;
KGTApplication.pause(activity, result -> {
//
});
Resume
import com.kakaogame.KGTApplication;
import com.kakaogame.KGTResult;
KGTApplication.resume(activity, 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.getCode() == KGTResult.KGTResultCode.AUTH_FAILURE
|| result.getCode() == KGTResult.KGTResultCode.IDP_AUTH_FAILURE) {
// [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 request a retry of the start process. - If the issue persists, check the error code and logs to determine the cause.
}
}
});
Adding a New Intent Receive Setting
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// Update the current activity with the new intent
this.setIntent(intent);
}
Login
Logging In Without Using the Default Login UI
import com.kakaogame.KGTApplication;
import com.kakaogame.KGTIdpProfile;
import com.kakaogame.KGTPlayer;
import com.kakaogame.KGTResult;
// Set the IdpCode for the login
KGTIdpProfile.KGTIdpCode code = KGTIdpCode.Kakao;
// Log in with a specific IDP
KGTPlayer.login(activity, code, result -> {
if (result.isSuccess()) {
// IDP login and platform login succeeded
// The current Player's ID issued by the platform
String playerId = KGTPlayer.getCurrentPlayer().getPlayerId();
// Platform access token
String accessToken = KGTPlayer.getAccessToken();
// Retrieve the current IDP authentication information
KGTIdpProfile idpProfile = KGTPlayer.getCurrentPlayer().getIdpProfile();
// [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 (result.getCode() == KGTResult.KGTResultCode.NETWORK_FAILURE
|| result.getCode() == KGTResult.KGTResultCode.SERVER_TIMEOUT
|| result.getCode() == KGTResult.KGTResultCode.SERVER_CONNECTION_FAILED) {
// [TODO] If a network error occurs, prompt the user to retry logging in.
} else if (result.getCode() == KGTResult.KGTResultCode.USER_CANCELED) {
// [TODO] Since the user canceled during the login process, the login screen should be maintained.
} else if (result.getCode() == KGTResult.KGTResultCode.BLOCKED_BY_POLICY) {
// [TODO] The login was attempted from a blocked country code or IP range. Handle accordingly.
} 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 com.kakaogame.KGTPlayer;
import com.kakaogame.KGTResult;
// Logout request
KGTPlayer.logout(activity, false, result -> {
if (result.isSuccess()) {
// Logout successful
// [TODO] Return to the start screen
} else {
// Logout failed
}
});
Unregistration
Unregistering Without Using the Default Unregistration UI
import com.kakaogame.KGTPlayer;
import com.kakaogame.KGTResult;
// Unregister request
KGTPlayer.unregister(activity, 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
import com.kakaogame.KGTPlayer;
import com.kakaogame.KGTIdpProfile;
import com.kakaogame.KGTResult;
// Set the IdpCode to log in with
KGTIdpProfile.KGTIdpCode code = KGTIdpCode.Kakao;
// Connect account with a specific idp
KGTPlayer.connect(activity, code, result -> {
if (result.isSuccess()) {
// IDP connection successful
// Player ID will not change.
} else {
// IDP connection failed
if (result.getCode() == KGTResult.KGTResultCode.INVALID_PARAMETER) {
// Invalid parameter passed
// e.g., activity is null
} else if (result.getCode() == KGTResult.KGTResultCode.NOT_AUTHORIZED) {
// The current state is not authorized
} else if (result.getCode() == KGTResult.KGTResultCode.INVALID_STATE) {
// The currently authenticated IDP is not device authentication
} else if (result.getCode() == KGTResult.KGTResultCode.ALREADY_USED_IDP_ACCOUNT) {
// The account is already authenticated
} else {
// Other errors occurred
}
}
});
Profile
Retrieve My Information
import com.kakaogame.KGTPlayer;
KGTPlayer localPlayer = KGTPlayer.getCurrentPlayer();
Retrieve My IDP Information
import com.kakaogame.KGTPlayer;
import com.kakaogame.KGTIdpProfile;
KGTIdpProfile idpProfile = KGTPlayer.getCurrentPlayer().getIdpProfile();
System Information
Retrieve Language Code
import com.kakaogame.KGTSystem;
String languageCode = KGTSystem.getLanguageCode();
Retrieve Language Tag
import com.kakaogame.KGTSystem;
String languageCode = KGTSystem.getLanguageTag();
Retrieve Country Code
import com.kakaogame.KGTSystem;
String countryCode = KGTSystem.getCountryCode();
Retrieve IP-based Country Code
import com.kakaogame.KGTSystem;
String countryCode = KGTSystem.getGeoCountryCode();
Retrieve Device ID
import com.kakaogame.KGTSystem;
String deviceId = KGTSystem.getDeviceId();
Retrieve Device Model
import com.kakaogame.KGTSystem;
String deviceModel = KGTSystem.getDeviceModel();
Retrieve OS Name
import com.kakaogame.KGTSystem;
String osName = KGTSystem.getOSName();
Retrieve Network Connection Status
import com.kakaogame.KGTSystem;
boolean networkConnected = KGTSystem.isNetworkConnected();
Retrieve Connected Network Type
import com.kakaogame.KGTSystem;
String networkType = KGTSystem.getNetworkType();
Kakao Integration Feature
Setting Up KakaoTalk Game Message Reception
import com.kakaogame.KGTKakaoTalk;
// Display the view to set KakaoTalk game message reception preferences
KGTKakaoTalk.showSetting(activity, result -> {
if (result.isSuccess()) {
// Successfully set the KakaoTalk game message reception settings
boolean allowMessage = result.getContent(); // Whether message reception is allowed as per the settings
} else if (result.getCode() == KGTResult.KGTResultCode.NOT_KAKAOTALK_USER) {
// 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 com.kakaogame.KGTKakaoTalk;
import com.kakaogame.KGTKakaoTalkProfile;
// Retrieve KakaoTalk profile
KGTKakaoTalk.talkProfile(result -> {
if (result.isSuccess()) {
// Successfully retrieved KakaoTalk profile
talkProfile = result.getContent(); // The KakaoTalk profile information of the logged-in user
} else if (result.getCode() == KGTResult.KGTResultCode.NOT_KAKAOTALK_USER) {
// 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 com.kakaogame.KGTKakaoTalk;
import com.kakaogame.KGTKakaoFriendProfile;
// Retrieve the list of game friends
KGTKakaoTalk.friends(result -> {
if (result.isSuccess()) {
// Successfully retrieved KakaoTalk game friends list.
List<KGTPlayer> friendList = result.getContent(); // Game friends list
for (KGTPlayer player : friendList) {
KGTKakaoFriendProfile kakaoProfile = (KGTKakaoFriendProfile)player.getIdpProfile();
}
} else if (result.getCode() == KGTResult.KGTResultCode.NOT_KAKAOTALK_USER) {
// 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 com.kakaogame.KGTKakaoFriendProfile;
import com.kakaogame.KGTKakaoTalk;
import com.kakaogame.KGTKakaoTalkProfile;
// Friend object retrieved 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
Map<String, String> args = new LinkedHashMap<>();
if (talkProfile != null) {
args.put("${nickname}", talkProfile.getNickname());
}
args.put("rog_link", "test=100&hello=20111");
args.put("bruce2", "test=100&hello=20111");
// Send a KakaoTalk game message
KGTKakaoTalk.sendGameMessage(kakaoProfile, templateId, args, result -> {
if (result.isSuccess()) {
// Successfully sent a KakaoTalk chat message
} else {
if (result.getCode() == KGTResult.KGTResultCode.MESSAGE_SETTING_DISABLE) {
// The recipient has set message reception to disabled
} else if (result.getCode() == KGTResult.KGTResultCode.EXCEED_DAILY_USAGE) {
// Occurs when the daily quota for sending messages to a specific app (regardless of the recipient) is exceeded.
} else if (result.getCode() == KGTResult.KGTResultCode.EXCEED_MONTHLY_USAGE) {
// 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 com.kakaogame.KGTKakaoTalk;
import com.kakaogame.KGTKakaoTalkProfile;
import com.kakaogame.KGTKakaoUser;
// [TODO] Set whether to display as a popup window
boolean isSingle = true;
// [TODO] Set whether to display as a popup window
boolean isPopup = true;
// [TODO] Set the template Id
String templateId = "";
// [TODO] Set the parameters for the message template
Map<String, String> args = new LinkedHashMap<>();
if (talkProfile != null) {
args.put("${nickname}", talkProfile.getNickname());
}
KGTKakaoTalk.sendInviteMessage(activity, isSingle, isPopUp, templateId, args, result -> {
if (result.isSuccess()) {
// Successfully sent KakaoTalk invite message
for (KGTKakaoUser kakaoUser : result.getContent()) {
// Check the list of users who received the invite message
}
} else {
// Failed to send to all users (need to return a common cause)
if (result.getCode() == KGTResult.KGTResultCode.MESSAGE_SETTING_DISABLE) {
// The recipient has set message reception to disabled
} else if (result.getCode() == KGTResult.KGTResultCode.EXCEED_DAILY_USAGE) {
// Occurs when the daily quota for sending messages to a specific app (regardless of the recipient) is exceeded.
} else if (result.getCode() == KGTResult.KGTResultCode.EXCEED_MONTHLY_USAGE) {
// 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 com.kakaogame.KGTKakaoTalk;
// [TODO] Set the channel Id
int channelId = 0;
KGTKakaoTalk.addChannel(plusFriendId, result -> {
if (result.isSuccess()) {
// Successfully added the channel
} else if (result.getCode() == KGTResult.KGTResultCode.NOT_KAKAOTALK_USER) {
// 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 the channel
}
});
Retrieve the list of friends to whom I sent an invite message
import com.kakaogame.KGTKakaoInvitation;
import com.kakaogame.KGTPlayer;
import com.kakaogame.KGTKakaoFriendProfile;
// [TODO] Event Id.
int eventId = 0;
// Retrieve the list of friends to whom I sent an invite message.
KGTKakaoInvitation.joiners(eventId, result -> {
if (result.isSuccess()) {
// Successfully retrieve the list of friends.
// Retrieve the list of players I have invited.
KGTKakaoInvitation.KGTInvitationJoinersResponse joinersResponse = result.getContent();
// List of players who have joined the app, including those who have left.
List<KGTPlayer> joiners = joinersResponse.getPlayers();
if (joiners.isEmpty()) {
// No users have joined the app.
} else {
// There are users who have joined the app.
for (KGTPlayer player : joiners) {
// Recipient’s player ID
String playerId = player.getPlayerId();
KGTKakaoFriendProfile kakaoProfile = (KGTKakaoFriendProfile) player.getIdpProfile();
// Recipient’s nickname
String nickname = kakaoProfile.getNickname();
// Recipient’s profile thumbnail image
String thumbnailImageUrl = kakaoProfile.getThumbnailImageUrl();
// Recipient’s withdrawal history inquiry. Use the corresponding flag when displaying the withdrawal status information in the UI.
boolean isUnregistered = kakaoProfile.isUnregistered();
}
}
} else if (result.getCode() == KGTResult.KGTResultCode.NOT_KAKAOTALK_USER) {
// 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 com.kakaogame.KGTKakaoInvitation;
// [TODO] Event Id.
int eventId = 0;
KGTKakaoInvitation.receiversCount(eventId, result -> {
if (result.isSuccess()) {
// Successfully retrieve the count of friends to whom I sent an invite message.
// Retrieve the number of friends I have invited.
KGTInvitationReceviersCountResponse response = result.getContent();
int total = response.getTotalReceiversCount();
int joinersCount = response.getJoinersCount();
} else if (result.getCode() == KGTResult.KGTResultCode.NOT_KAKAOTALK_USER) {
// 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,