Wortal SDK for GameMaker
설치하기
- GameMaker Marketplace에서 Wortal 확장 프로그램 설치하기
Included Files
-> wortal_index.html
로 이동하여 JS 파일의 경로를 게임 파일로 대체하세요- GameMaker 빌드 결과물인
.zip
아카이브 압축 풀기 -index.html
을 열고 화면 하단 부근에서 아래 줄을 찾는다:<script type="text/javascript" src="html5game/yourgame.js?DBDYB=830673173"></script></script>
.- 위 행을 복사하여 저장하기 -
wortal_index.html
을 열고, 화면 하단에 있는 다음 줄을 찾습니다:<!-- CHANGE THIS TO YOUR GAME's PATH -->
- C 단계에서 복사한 코드로 해당 행을 대체합니다
Game Options
->HTML5
->Advanced
-> Included file as index.html
순으로 열고 이 옵션을wortal_index.html
로 변경합니다
사용방법
광고
인터스티셜 광고는 레벨을 달성하거나 전환하는 사이사이에 표시할 수 있습니다.
// 플레이어가 레벨을 달성.
wortal_ads_show_interstitial("next", "NextLevel");
// 플레이어가 게임을 일시 중지했습니다.
wortal_ads_show_interstitial("pause", "PausedGame");
// 플레이어가 인앱 결제 페이지에 접속합니다.
wortal_ads_show_interstitial("browse", "BrowseShop");
리워드 광고는 플레이어가 동영상 광고를 끝까지 시청하는 등의 조건을 충족할 경우 보상을 제공하는 광고 유형입니다. 반드시 플레이어에게 알리고 허락을 받은 후 표시해야 합니다.
// 이 예시에서는 광고 조건 달성 여부와 상관없이 게임이 진행됩니다.
// 예: 플레이어는 광고를 시청하여 보너스 코인을 획득할 수 있지만, 그 결과와 상관없이 게임은 계속 진행됩니다.
wortal_ads_show_rewarded("BonusCoins");
// 이 예시에서는 광고 조건 달성 여부와 관련하여 게임이 진행됩니다.
// 예: 게임오버 시 플레이어는 광고를 시청하여 부활할 수 있지만, 광고를 건너뛰면 해당 레벨을 잃게 됩니다.
wortal_ads_show_rewarded("ReviveAndContinue");
참고: 플레이어는 adViewed 콜백을 통해서만 보상을 받을 수 있습니다.
애널리틱스
Wortal의 애널리틱스 API를 활용하여 게임 이벤트를 추적하고 플레이어의 게임 내 활동을 파악할 수 있습니다. 이 데이터는 Wortal의 대시보드에서 확인할 수 있습니다.
// 레벨 시작을 기록합니다.
wortal_analytics_log_level_start("Level 3");
// 레벨의 끝을 기록합니다. 이름이 일치하면 게임 시간을 기록한다.
// logLevelStart()의 마지막 호출명
wortal_analytics_log_level_end("Level 3", "100", 1);
// 플레이어의 게임 내 선택 행동을 기록합니다. 게임의 밸런스를 맞추는 데 도움이 됩니다.
// 그리고 플레이어가 많이 이용하는 콘텐츠를 파악할 수 있습니다.
wortal_analytics_log_game_choice("Character", "Blue");
업적
Achievements API는 플레이어의 게임 내 진행 상황을 추적하는 데 사용됩니다. 특정 작업을 완료하거나 특정 마일스톤에 도달하면 잠금 해제할 수 있습니다.
// 업적 잠금 해제하기.
wortal_achievements_unlock_async("achievementID");
// 플레이어의 업적 진행 상황 파악하기
wortal_achievements_get_async();
컨텍스트
컨텍스트 API는 플레이어끼리 연결하여 게임 섹션 참여, 콘텐츠 공유, 메시지 교환 등에 활용할 수 있습니다.
// 친구를 게임에 초대합니다.
payload = {
image: "data:base64image",
text: "Invite text",
cta: "Play",
data: { exampleData: "yourData" },
}
wortal_context_invite_async(json_stringify(payload));
// 이 게임의 활동을 친구들과 공유하세요.
payload = {
image: "data:base64image",
text: "Share text",
cta: "Play",
data: { exampleData: "yourData" },
}
wortal_context_share_async(json_stringify(payload));
인앱결제
인앱 결제(IAP) API는 플랫폼에서 게임 내 트랜잭션이 발생할 때 사용됩니다. 이 프로세스는 플레이 중인 플랫폼에 따라 다르지만, IP는 동일합니다.
// 플레이어가 구매할 수 있는 아이템 목록 확인.
wortal_iap_get_catalog_async();
// 아이템 구매하기.
purchaseConfig = {
productID: "my_product_123",
}
wortal_iap_make_purchase_async(json_stringify(purchaseConfig));
리더보드
리더보드 API를 활용하면 플랫폼의 리더보드 기능에 접근할 수 있습니다. 플레이어들의 점수를 추적하고 순위를 매길 수 있습니다.
// 상위 10위 안에 든 리더보드를 획득할 수 있다.
wortal_leaderboard_get_entries_async("global", 10, 0);
// 플레이어의 점수를 리더보드에 추가합니다.
wortal_leaderboard_send_entry_async("global", 100, "details");
알림
Notifications API는 플레이어에게 알림을 보내는 데 사용됩니다. 플레이어에게 게임 내 이벤트를 알리거나 다시 플레이하도록 유도하는 데 사용할 수 있습니다.
// 플레이어에게 보낼 알림을 예약합니다.
payload = {
title: "Your energy is full!",
body: "Come back and play again.",
mediaURL: "https://example.com/image.png",
label: "resources-full",
scheduleInterval: 300 // 5 minutes
}
wortal_notifications_schedule_async(json_stringify(payload));
// 예약된 알림을 취소합니다.
wortal_notifications_cancel_async("notification-id-123");
플레이어
현재 플레이어에 대한 자세한 내용은 Player API에서 확인할 수 있습니다
// 플레이어의 이름을 가져옵니다.
wortal_player_get_name();
// 플레이어의 친구 중 게임을 해본 적이 있는 사람들의 목록을 가져옵니다.
payload = {
filter: "ALL",
size: 20,
hoursSinceInvitation: 4,
}
wortal_player_get_connected_players_async(json_stringify(payload));
세션
현재 세션 상태에 대한 자세한 내용은 Session API에서 확인할 수 있습니다.
통계
Stats API는 플레이어의 게임 내 통계를 추적하는 데 사용됩니다.
// 선수의 통계 정보를 게시한다.
wortal_stats_post_async("level 1", 100);
// 특정 레벨에 대한 플레이어의 통계를 얻는다.
wortal_stats_get_async("level 1");
토너먼트
Tournament API는 게임의 토너먼트를 생성하고 관리하는 데 사용됩니다.
// 토너먼트 생성하기.
const payload = {
initialScore: 100,
config: {
title: "Level 1 Tournament",
},
data: {
level: 1,
},
};
wortal_tournament_create_async(json_stringify(payload));
// 토너먼트에서 점수를 기록한다.
wortal_tournament_post_score_async(200);
Wortal 콜백
SDK는 콜백 이벤트가 있는 많은 비동기 호출을 사용합니다. 이 함수들은 the _async
접미사(the _async suffix)로 표시되어 있습니다. 이러한 콜백을 수신하고 Async - Social
이벤트에서 적절히 처리해야 합니다. 콜백 이벤트는 다음과 같은 SDK 정의 속성을 가진 맵으로 반환됩니다:
id: "wortal_callback", // Wortal의 콜백은 항상 동일하다.
event, // 콜백의 이벤트 이름.
success, // 에러 플래그. 0"은 오류가 발생했음을 의미하며, "1"은 호출이 성공했음을 의미한다.
payload, // 선택적 리턴 데이터. 에러가 발생하지 않은 경우에만 존재하며, 그 유형은 호출에 따라 다르다.
error // 에러가 발생했을 경우, 에러가 포함된 JSON 문자열.
광고 콜백 핸들러의 예시:
var ID = async_load[? "id"];
if (ID != undefined) {
if (ID == "wortal_callback") {
switch (async_load[? "event"]) {
case "ADS_BEFORE_AD_CALLBACK":
// Pause game and audio here.
break;
case "ADS_AFTER_AD_CALLBACK":
// Resume game and audio here.
break;
case "ADS_AD_DISMISSED_CALLBACK":
// Do not reward the player - ad was skipped.
break;
case "ADS_AD_VIEWED_CALLBACK":
// Reward player for watching the ad.
break;
}
}
}
모든 콜백 이벤트와 그 페이로드 목록:
INITIALIZE_CALLBACK // Void
START_GAME_CALLBACK // Void
ON_PAUSE_CALLBACK // Void
PERFORM_HAPTIC_FEEDBACK_CALLBACK // Void
ADS_BEFORE_AD_CALLBACK // Void
ADS_AFTER_AD_CALLBACK // Void
ADS_AD_DISMISSED_CALLBACK // Void
ADS_AD_VIEWED_CALLBACK // Void
ADS_NO_FILL_CALLBACK // Void
CONTEXT_CHOOSE_CALLBACK // Void
CONTEXT_CREATE_CALLBACK // Void
CONTEXT_SWITCH_CALLBACK // Void
CONTEXT_INVITE_CALLBACK // Void
CONTEXT_SHARE_CALLBACK // Number
CONTEXT_SHARE_LINK_CALLBACK // Void
CONTEXT_UPDATE_CALLBACK // Void
IAP_GET_CATALOG_CALLBACK // Product[]
IAP_GET_PURCHASES_CALLBACK // Purchase[]
IAP_MAKE_PURCHASE_CALLBACK // Purchase
IAP_CONSUME_PURCHASE_CALLBACK // Void
LEADERBOARD_GET_LEADERBOARD_CALLBACK // Leaderboard
LEADERBOARD_SEND_ENTRY_CALLBACK // LeaderboardEntry
LEADERBOARD_GET_ENTRIES_CALLBACK // LeaderboardEntry[]
LEADERBOARD_GET_PLAYER_ENTRY_CALLBACK // LeaderboardEntry
LEADERBOARD_GET_ENTRY_COUNT_CALLBACK // Number
LEADERBOARD_GET_CONNECTED_PLAYERS_ENTRIES_CALLBACK // LeaderboardEntry[]
NOTIFICATIONS_SCHEDULE_CALLBACK // NotificationScheduleResult
NOTIFICATIONS_GET_HISTORY_CALLBACK // ScheduledNotification[]
NOTIFICATIONS_CANCEL_CALLBACK // Boolean
NOTIFICATIONS_CANCEL_ALL_CALLBACK // Boolean
PLAYER_GET_DATA_CALLBACK // Developer-defined object
PLAYER_SET_DATA_CALLBACK // Void
PLAYER_GET_CONNECTED_PLAYERS_CALLBACK // Player[]
PLAYER_GET_SIGNED_PLAYER_INFO_CALLBACK // Object with id and signature
PLAYER_GET_ASID_CALLBACK // String
PLAYER_GET_SIGNED_ASID_CALLBACK // Object with id and signature
PLAYER_CAN_SUBSCRIBE_BOT_CALLBACK // Boolean
PLAYER_SUBSCRIBE_BOT_CALLBACK // Void
SESSION_GET_ENTRY_POINT_CALLBACK // String
SESSION_ON_ORIENTATION_CHANGE_CALLBACK // Orientation
SESSION_SWITCH_GAME_CALLBACK // Void
TOURNAMENT_GET_CURRENT_CALLBACK // Tournament
TOURNAMENT_GET_ALL_CALLBACK // Tournament[]
TOURNAMENT_POST_SCORE_CALLBACK // Void
TOURNAMENT_CREATE_CALLBACK // Tournament
TOURNAMENT_SHARE_CALLBACK // Void
TOURNAMENT_JOIN_CALLBACK // Void
데모 프로젝트
SDK 호출 구현 예제가 포함된 데모 패키지는 여기에서 확인할 수 있습니다.