버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.
목차
stylenone

...

Initialization and Status Change Event Processing

...

SDK Initialization

발췌문 삽입
EN_Initialization and Status Change Event Processing SDK ExampleEN_
Initialization and Status Change Event Processing SDK Example
nameapplication_init_sdk
nopaneltrue

코드 블럭
languagejava
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

발췌문 삽입
EN_Initialization and Status Change Event Processing SDK ExampleEN_
Initialization and Status Change Event Processing SDK Example
nameapplication_start
nopaneltrue

코드 블럭
languagejava
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, you should 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

발췌문 삽입
EN_Initialization and Status Change Event Processing SDK ExampleEN_
Initialization and Status Change Event Processing SDK Example
nameapplication_pause
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTApplication;
import com.kakaogame.KGTResult;
 
KGTApplication.pause(activity, result -> {
	//
});

Resume

발췌문 삽입
EN_Initialization and Status Change Event Processing SDK ExampleEN_
Initialization and Status Change Event Processing SDK Example
nameapplication_resume
nopaneltrue

코드 블럭
languagejava
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

발췌문 삽입
EN_Initialization and Status Change Event Processing SDK ExampleEN_
Initialization and Status Change Event Processing SDK Example
nameapplication_android_intent
nopaneltrue

코드 블럭
languagejava
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
     
    // Update the current activity with the new intent
    this.setIntent(intent);
}

Login

...

발췌문 삽입
EN_Login SDK ExampleEN_
Login SDK Example
namelogin
nopaneltrue

Logging In Without Using the Default Login UI

발췌문 삽입
EN_Login SDK ExampleEN_
Login SDK Example
namelogin_custom
nopaneltrue

코드 블럭
languagejava
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

...

발췌문 삽입
EN_Logout SDK ExampleEN_
Logout SDK Example
namelogout
nopaneltrue

Logging Out Without Using the Default Logout UI

발췌문 삽입
EN_Logout SDK ExampleEN_
Logout SDK Example
namelogout_custom
nopaneltrue

코드 블럭
languagejava
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

...

발췌문 삽입
탈퇴 Unregistration SDK 예제Example탈퇴
Unregistration SDK 예제Example
nameunregister
nopaneltrue

Unregistering Without Using the Default Unregistration UI

발췌문 삽입
탈퇴 Unregistration SDK 예제Example탈퇴
Unregistration SDK 예제Example
nameunregister_custom
nopaneltrue

코드 블럭
languagejava
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

...

발췌문 삽입
EN_Account Linking SDK ExampleEN_
Account Linking SDK Example
nameconnect
nopaneltrue

Linking Accounts Without Using the Default Account Linking UI

발췌문 삽입
EN_Account Linking SDK ExampleEN_
Account Linking SDK Example
nameconnect_custom
nopaneltrue

코드 블럭
languagejava
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

발췌문 삽입
EN_Profile SDK ExampleEN_
Profile SDK Example
nameplayer_currentPlayer
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTPlayer;

KGTPlayer localPlayer = KGTPlayer.getCurrentPlayer();

Retrieve My IDP Information

발췌문 삽입
EN_Profile SDK ExampleEN_
Profile SDK Example
nameplayer_idpProfile
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTPlayer;
import com.kakaogame.KGTIdpProfile;

KGTIdpProfile idpProfile = KGTPlayer.getCurrentPlayer().getIdpProfile();

System Information

...

Retrieve Language Code

발췌문 삽입
EN_System Information SDK ExampleEN_
System Information SDK Example
namesystem_language_code
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTSystem;

String languageCode = KGTSystem.getLanguageCode();

Retrieve Language Tag

발췌문 삽입
EN_System Information SDK ExampleEN_
System Information SDK Example
namesystem_language_tag
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTSystem;

String languageCode = KGTSystem.getLanguageTag();

Retrieve Country Code

발췌문 삽입
EN_System Information SDK ExampleEN_System
System Information SDK Example
namesystem_country_code
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTSystem;

String countryCode = KGTSystem.getCountryCode();

Retrieve IP-based Country Code

발췌문 삽입
EN_System Information SDK ExampleEN_
System Information SDK Example
namesystem_geo_country_code
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTSystem;

String countryCode = KGTSystem.getGeoCountryCode();

Retrieve Device ID

발췌문 삽입
EN_System Information SDK ExampleEN_
System Information SDK Example
namesystem_device_id
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTSystem;

String deviceId = KGTSystem.getDeviceId();

Retrieve Device Model

발췌문 삽입
EN_System Information SDK ExampleEN_
System Information SDK Example
namesystem_device_model
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTSystem;

String deviceModel = KGTSystem.getDeviceModel();

Retrieve OS Name

발췌문 삽입
EN_System Information SDK ExampleEN_
System Information SDK Example
namesystem_os_name
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTSystem;

String osName = KGTSystem.getOSName();

Retrieve Network Connection Status

발췌문 삽입
EN_System Information SDK ExampleEN_
System Information SDK Example
namesystem_is_network_connected
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTSystem;

boolean networkConnected = KGTSystem.isNetworkConnected();

Retrieve Connected Network Type

발췌문 삽입
EN_System Information SDK ExampleEN_
System Information SDK Example
namesystem_network_type
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTSystem;

String networkType = KGTSystem.getNetworkType();

Kakao Integration Feature

...

Setting Up KakaoTalk Game Message Reception

발췌문 삽입
EN_Kakao Integration Feature SDK ExampleEN_
Kakao Integration Feature SDK Example
namekakao_talk_show_setting
nopaneltrue

코드 블럭
languagejava
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

발췌문 삽입
EN_Kakao Integration Feature SDK ExampleEN_
Kakao Integration Feature SDK Example
namekakao_talk_talk_profile
nopaneltrue

코드 블럭
languagejava
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

발췌문 삽입
EN_Kakao Integration Feature SDK ExampleEN_
Kakao Integration Feature SDK Example
namekakao_talk_friends
nopaneltrue

코드 블럭
languagejava
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

발췌문 삽입
EN_Kakao Integration Feature SDK ExampleEN_
Kakao Integration Feature SDK Example
namekakao_talk_send_game_message
nopaneltrue

코드 블럭
languagejava
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

발췌문 삽입
EN_Kakao Integration Feature SDK ExampleEN_
Kakao Integration Feature SDK Example
namekakao_talk_send_invite_message
nopaneltrue

코드 블럭
languagejava
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

발췌문 삽입
EN_Kakao Integration Feature SDK ExampleEN_
Kakao Integration Feature SDK Example
namekakao_talk_add_plus_friend
nopaneltrue

코드 블럭
languagejava
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
	}
});

Google Games

...

Retrieve the list of friends to whom I sent an invite message

발췌문 삽입
EN_구글 게임 SDK 예제EN_구글 게임 SDK 예제Kakao Integration Feature SDK Example
Kakao Integration Feature SDK Example
namegooglekakao_games_show_achievement_viewinvitation_joiners
nopaneltrue

코드 블럭
languagejava
import com.kakaogame.KGTKakaoInvitation;
import com.kakaogame.KGTGoogleGamesAchievementsKGTPlayer;
import com.kakaogame.KGTKakaoFriendProfile;

// Show[TODO] GoogleEvent GamesId.
achievementint informationeventId screen
KGTGoogleGamesAchievements.showAchievement(activity);

Achievement Unlocked

...

코드 블럭
languagejava
import com.kakaogame.KGTGoogleGamesAchievements;

// [TODO] Set achievement ID
String id = "";

// Unlock achievement
KGTGoogleGamesAchievements.unlock(id);

Display Achievement

...

코드 블럭
languagejava
import com.kakaogame.KGTGoogleGamesAchievements;

// [TODO] Set achievement ID
String id = "";

KGTGoogleGamesAchievements.reveal(id);

Increase Achievement Level

...

코드 블럭
languagejava
import com.kakaogame.KGTGoogleGamesAchievements;

// [TODO] Set achievement ID
String id = "";
int numSteps = 0;

KGTGoogleGamesAchievements.setSteps(id, numSteps);

Set Achievement Level

...

코드 블럭
languagejava
import com.kakaogame.KGTGoogleGamesAchievements;

// [TODO] Set achievement ID
String id = "";
int numSteps = 0;

KGTGoogleGamesAchievements.increment(id, numSteps= 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

발췌문 삽입
Kakao Integration Feature SDK Example
Kakao Integration Feature SDK Example
namekakao_invitation_receivers_count
nopaneltrue

코드 블럭
languagejava
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.
    }
});