Skip to content

튜토리얼

플레이어 인증

이메일로 로그인(비밀번호 불필요)

  • 플레이어에게 로그인 화면을 표시하고 이메일 주소를 입력하도록 유도합니다
  • 아래 샘플 페이로드를 사용하여 인증 요청을 보내주세요 - 플레이어가 지정한 이메일 주소로 인증 코드가 전송됩니다 - 인증 코드의 유효기간은 3분입니다 - 이 시점에서 플레이어는 아직 인증되지 않았습니다
// 인증 액션을 정의하기 위해서는 항상 요청 유형과 메소드가 필요합니다.
// 이메일 주소를 인증 수단으로 사용하는 경우, 이메일 주소 입력이 필수입니다.
const payload = {
   email: "[email protected]",
   requestType: "login",
   method: "email",
};
Wortal.authenticateAsync(payload)
   .then(result => {
       // 성공할 경우, 상태는 '보류 중'이 됩니다.
       // 이는 확인 코드가 전송되기를 기다리고 있다는 것을 의미합니다.
       console.log("Auth result: " + result.status);

       if (result.status === "pending") {
           // 플레이어에게 확인 코드를 입력할 수 있는 대화창을 표시합니다.
       } else {
           // 오류 상태를 처리합니다.
       }
   )}
   .catch(error => console.log(error));
  • 플레이어에게 인증 코드를 입력할 수 있는 UI 요소를 표시합니다
  • 플레이어가 제공한 확인 코드를 사용하여 확인 요청을 보냅니다
  • 인증 코드는 항상 문자열로 전송되어야 합니다
const payload = {
   email: "[email protected]",
   code: "1234",
   requestType: "login",
   method: "email",
};

Wortal.authenticateAsync(payload)
   .then(result => {
       // 성공하면 상태는 '성공'이 됩니다.
       console.log("Auth result: " + result.status);

       if (result.status === "success") {
           // 플레이어가 로그인했습니다. UI를 업데이트하고 플레이어 데이터를 가져옵니다.
       } else {
           // 오류 상태를 처리합니다.
       }
   )}
   .catch(error => console.log(error));

전화번호로 로그인(비밀번호 불필요)

  • 플레이어에게 로그인 화면을 표시하고 이메일 주소를 입력하도록 유도합니다
  • 아래 샘플 페이로드를 사용하여 인증 요청을 보내주세요 - 플레이어가 지정한 전화번호로 SMS를 통해 확인 코드가 전송됩니다 - 전화 번호는 반드시 "+"와 국가 코드로 시작해야 합니다 - 전화 번호에는 공백, 하이픈, 둥근 괄호를 사용할 수 있습니다 - 유효한 형식 예시: - +1234567890 - +1 (234) 567-890 - +12-345-678-90 - 잘못된 형식의 예시: - 1234567890 (국가 코드 앞에 '+'가 포함되지 않음) - +123abc456 (문자 사용 불가) - 인증 코드의 유효기간은 3분입니다 - 이 시점에서 플레이어는 아직 인증되지 않았습니다
// 인증 액션을 정의하기 위해서는 항상 요청 유형과 메소드가 필요합니다.
// 전화번호를 인증 수단으로 사용하는 경우 전화번호 입력이 필수입니다.
const payload = {
   phone: "+1234567890",
   requestType: "login",
   method: "phone",
};

Wortal.authenticateAsync(payload)
   .then(result => {
       // 성공할 경우, 상태는 '보류 중'이 됩니다.
       // 이는 확인 코드가 전송되기를 기다리고 있다는 것을 의미합니다.
       console.log("Auth result: " + result.status);

       if (result.status === "pending") {
          // 플레이어에게 확인 코드를 입력할 수 있는 대화창을 표시합니다.
       } else {
           // 오류 상태를 처리합니다.
       }
   )}
   .catch(error => console.log(error));
  • 플레이어에게 인증 코드를 입력할 수 있는 UI 요소를 표시합니다
  • 플레이어가 제공한 확인 코드를 사용하여 확인 요청을 보냅니다 - 인증 코드는 항상 문자열로 전송되어야 합니다
const payload = {
   phone: "+1234567890",
   code: "1234",
   requestType: "login",
   method: "phone",
};
Wortal.authenticateAsync(payload)
   .then(result => {
       // 성공하면 상태는 '성공'이 됩니다.
       console.log("Auth result: " + result.status);

       if (result.status === "success") {
           // 플레이어가 로그인했습니다. UI를 업데이트하고 플레이어 데이터를 가져옵니다.
       } else {
           // 오류 상태를 처리합니다.
       }
   )}
   .catch(error => console.log(error));

리워드 광고

리워드 광고는 게임 내 수익 창출에 적합합니다. 플레이어가 광고를 시청하면 게임 내 화폐, 추가 라이프 등을 보상으로 받을 수 있습니다. 이 튜토리얼에서는 게임에 리워드 광고를 도입하는 방법을 설명합니다.

예시

플레이어가 광고를 시청했을 때 게임 내 화폐를 보상으로 제공하는 3가지 방법을 소개합니다.

  1. 멀티플라이어를 사용하여 레벨이 끝날 때 주는 보상을 증가시킨다.
  2. 리워드 광고를 사용하여 플레이어가 게임 오버 시 재도전할 수 있는 기회를 주는 것(세컨드 찬스)
  3. 인앱 상점에서 리워드 광고를 사용하여 동영상 시청을 통해 무과금 아이템을 제공하고, 인앱 구매(IAP) 전환을 증가시킬 수 있다.

멀티플라이어

// 플레이어가 레벨을 클리어하면 결과가 화면에 표시됩니다. 이때 보너스 통화를 얻기 위해 동영상을 시청할 수 있는 옵션을 선택할 수 있다.
const levelEarnings = 100;
const rewardMultiplier = 3;
function onRewardButtonClicked() {
    Wortal.ads.showRewarded("Level 1 Finish",
        () => {
            // beforeAd
            pauseGame();
        },
        () => {
            // afterAd
            resumeGame();
        },
        () => {
            // adDismissed
            addCurrency(levelEarnings);
        },
        () => {
            // adViewed
            addCurrency(levelEarnings * rewardMultiplier);
        },
        () => {
            // noFill
            addCurrency(levelEarnings);
        });
}

두 번째 기회

// 플레이어가 레벨 클리어에 실패하면 결과가 화면에 표시됩니다. 이때 동영상을 시청하여 재도전할 수 있는 옵션을 선택할 수 있다.
function onRewardButtonClicked() {
    Wortal.ads.showRewarded("Level 2 Retry",
        () => {
            // beforeAd
            pauseGame();
        },
        () => {
            // afterAd
            resumeGame();
        },
        () => {
            // adDismissed
            endGame();
        },
        () => {
            // adViewed
            continueGame();
        },
        () => {
            // noFill
            endGame();
        });
}

IAP 상점

// 플레이어가 IAP 상점에 접속했습니다. 화폐로 아이템을 구매하거나 동영상을 시청하여 보너스 화폐를 획득할 수 있습니다.
function onRewardButtonClicked() {
    Wortal.ads.showRewarded("IAP Shop",
        () => {
            // beforeAd
            pauseAudio();
        },
        () => {
            // afterAd
            resumeAudio();
        },
        () => {
            // adDismissed
            // 플레이어는 동영상 광고를 시청하지 않았기 때문에 보너스 통화를 받지 못했습니다.
            // 플레이어에게 설명할 수 있는 팝업형 UI를 표시할 수 있습니다.
            noRewardPopup.show();
        },
        () => {
            // adViewed
            addCurrency()
        },
        () => {
            // noFill
            // 광고를 획득하지 못했기 때문에 플레이어는 보너스 통화를 받지 못했습니다..
            // 플레이어에게 설명할 수 있는 팝업형 UI를 표시할 수 있습니다.
            noAdAvailablePopup.show();
        });
}

"No Fill"의 대안

리워드 광고 요청이 실패하면 게임 진행이 중단되는 등 원치 않는 상황이 발생할 수 있습니다. 예를 들어, 리워드 광고가 게임에 설정되어 있음에도 불구하고 게임이 멈추거나 버튼 등 UI가 반응하지 않는 등 광고가 정상적으로 표시되지 않는 문제가 발생하면 적절한 처리가 필요합니다. 아래에서는 이러한 문제를 해결할 수 있는 두 가지 방법을 소개합니다: 1. 플레이어가 보상을 받을 수 있도록 소셜 공유, 초대 등의 기능을 활용한다. 2. 플레이어에게 광고를 사용할 수 없음을 알리고 잠시 후 다시 시도할 것을 제안한다.

우리 게임에서는 【1.】을 성공적으로 구현하고 플레이어의 참여를 높이기 위해 이 방법을 권장하고 있습니다.

광고가 표시되지 않거나 오류가 발생하면 noFill 콜백을 반환합니다. 아래는 이 문제를 처리하기 위한 콜백입니다.

소셜 공유의 대안

// 플레이어가 레벨을 클리어하면 결과가 화면에 표시됩니다. 이때 보너스 통화를 얻기 위해 동영상을 시청할 수 있는 옵션을 선택할 수 있다.
const levelEarnings = 100;
const rewardMultiplier = 3;
function onRewardButtonClicked() {
    Wortal.ads.showRewarded("Level 1 Finish",
        () => {
            // beforeAd
            pauseGame();
        },
        () => {
            // afterAd
            resumeGame();
        },
        () => {
            // adDismissed
            addCurrency(levelEarnings);
        },
        () => {
            // adViewed
            addCurrency(levelEarnings * rewardMultiplier);
        },
        () => {
            // noFill
            // 광고를 받을 수 없기 때문에 플레이어에게 게임을 공유할 수 있는 옵션을 제공합니다.
            shareAlternativePopup.show();
            if (shareAlternativePopup.result === "share") {
                // 플레이어가 게임을 공유하기로 선택했기 때문에 그 대가로 보상을 제공합니다.
                Wortal.context.shareAsync({
                    intent: "SHARE",
                    payload: {
                        text: "I just finished level 1!",
                        image: "https://example.com/level1.png",
                        data: {
                            level: 1,
                            //공유 링크를 통해 게임을 열어준 친구에게 보상이 주어집니다.
                            // This can be accessed via Wortal.session.getEntryPointData().
                            shareBonus: 100
                        }
                    }
                }).then(() => {
                    // 공유에 성공하면 플레이어에게 보상을 제공합니다.
                    addCurrency(levelEarnings * rewardMultiplier);
                }).catch((error) => {
                    //  공유에 실패한 플레이어에게는 레벨을 클리어한 것에 대한 보상이 주어진다.
                    addCurrency(levelEarnings);
                });
            } else {
                // 플레이어가 게임을 공유하지 않기로 선택했기 때문에 레벨 클리어에 대한 보상만 제공합니다.
                addCurrency(levelEarnings);
            }
        });
}