Unity SDK
    • PDF

    Unity SDK

    • PDF

    Article Summary

    Unity에서 게임을 개발하기 위한 GAMEPOT Unity SDK 사용법에 대해 설명합니다. SDK를 설치하고 환경을 구성함으로써 게임과 대시보드를 연동할 수 있습니다.

    요구 사양

    Unity용 GAMEPOT SDK를 사용하기 위한 요구 사양은 다음과 같습니다.

    • 최소 사양: 2018.4.0 이상
      (하위 버전의 Unity 지원이 필요하면 문의채널로 문의해 주시기 바랍니다. )
    • v.3.1.0 이하 버전에서 최신 버전으로 업데이트를 진행하려는 경우
      Migration 가이드를 참고하여 Migration 작업을 수행해 주십시오.
    • 2019.3.X 이상 버전을 사용할 경우
      GAMEPOT FAQ에서 설명하는 추가 설정 사항을 반드시 참조해 주십시오.
    • 2019.4.X / 2020.3.X / 2021.1.X 버전의 유니티 에디터 사용자는 2019.4.29f1 이상, 2020.3.36f1 이상, 2021.1.16f1 이상 버전을 사용하는 것을 권장합니다. ( AAB 버전 빌드 시 유니티 에디터 버그 수정 버전, 2020.3.35 이하 버전의 경우 안드로이드31 빌드 시 블루투스 이어폰 연결 시 앱 크래시가 발생됨에 따른 수정 버전 )

    SDK 설치 및 환경 구성

    GAMEPOT Unity SDK를 설치한 후 환경을 구성하여 GAMEPOT 대시보드와 게임을 연동하고 게임 개발에 필요한 기능을 사용할 수 있습니다.

    GAMEPOT SDK에서 지원하는 언어는 아래와 같습니다.

    • 한국어, 영어, 이탈리아어, 태국어 ,베트남어, 일본어, 중국어(간체/번체), 인도네시아어, 독일어, 스페인어, 프랑스어

    앱 실행 시 디바이스의 언어에 따라 SDK 내 지원 언어로 표기되며 미지원 언어는 영어로 표기됩니다.

    IOS 경우)

    • XCode > localization에 적용하고자 하는 언어 추가를 해야 합니다.
    • 빌드 시 버전 코드는 정수 형태로 유니크하게 증가하는 방식으로 진행 부탁드립니다.

    SDK 설치

    GAMEPOT Unity SDK를 설치하고 Unity에서 프로젝트를 구성하는 방법은 다음과 같습니다.

    1. 관리자 계정으로 대시보드에 로그인해 주십시오.
    2. SDK 다운로드 > Unity 메뉴를 차례대로 클릭한 후 다운로드 를 클릭해 주십시오.
    3. Unity에서 Assets > Import Package > Custom Package... 메뉴를 차례대로 클릭한 후 GamePotUnityPlugin-xxxx.unitypackage 파일을 불러와 주십시오.

    안드로이드 환경 설정

    GAMEPOT Unity SDK를 사용하여 안드로이드 기반의 게임을 개발하려면 필요한 환경을 설정해야 합니다.

    최소 사양 설정

    앱을 설치 및 실행할 수 있는 최소 사양을 설정하려면 아래의 코드를 사용해 주십시오.

    minSdkVersion : API 19 이상 (Kitkat)
    

    Gradle 수정

    Gradle 파일을 수정하려면 표를 참조하여 아래 코드에 값을 입력한 뒤 코드를 사용하여 설정을 변경해 주십시오.

    • ../Assets/Plugin/Android/mainTemplate.gradle 파일을 에디터로 엽니다. (Unity 2019.3.X 이후 버전부터는 launcherTemplate.gradle 파일 수정)
    • 페이스북 로그인을 사용하지 않는 고객은 facebook_app_id / fb_login_protocol_scheme 값을 아래와 같이 임의 설정하거나 빌드 시 ../Assets/Plugins/Android/libs/gamepot-channel-facebook.aar 파일이 포함되지 않도록 설정해야 합니다.

    gamepot_payment 값은 빈칸을 기본으로 합니다.

    설명
    gamepot_project_idGAMEPOT에서 발급받은 프로젝트 ID
    (대시보드 프로젝트 설정 > 일반 메뉴에서 확인)
    gamepot_store스토어 값 google, one, 또는 galaxy 입력
    gamepot_app_title앱 제목(FCM)
    gamepot_push_default_channel변경 금지(등록된 기본 채널 이름)
    facebook_app_id페이스북에서 발급받은 앱 ID
    fb_login_protocol_scheme페이스북에서 발급받은 앱 ID
    facebook_client_token페이스북 콘솔 > 앱 > 설정 > 고급 설정 > 클라이언트 토큰
    gamepot_elsa_projectid네이버 클라우드 ELSA 서비스를 사용할 경우 ELSA 프로젝트 ID를 입력
    (Effective Log Search & Analytics 참조)
    gamepot_region게임팟 대시보드 생성 리전이 싱가포르인 경우만 sg 입력
    gamepot_license_url게임팟 대시보드 생성 리전이 일본인경우 경우만 https://gamepot.apigw.ntruss.com/fw/jp-v1 입력
    ...
    android {
        ...
        defaultConfig {
            ...
            resValue "string", "gamepot_project_id", "" // required
            resValue "string", "gamepot_store", "google" // required
            resValue "string", "gamepot_app_title","@string/app_name" // required (fcm)
            resValue "string", "gamepot_push_default_channel","Default" // required (fcm)
            resValue "string", "facebook_app_id", "0" // optional (facebook)
            resValue "string", "fb_login_protocol_scheme", "fb0" // optional (facebook)
             resValue "string", "facebook_client_token", "" // 페이스북 콘솔 > 앱 >  설정 > 고급 설정 > 클라이언트 토큰 optional (facebook)
            // resValue "string", "gamepot_elsa_projectid", "" // optional (ncp elsa)
             resValue "string", "gamepot_region", "" // Caution! Only if the gamepot region is Singapore , value as sg
             resValue "string", "gamepot_license_url", "" // Caution! Only if the gamepot region is Japan , value as https://gamepot.apigw.ntruss.com/fw/jp-v1
        }
        ...
    }
    

    gradleTemplate 수정(Unity 2022.2 이상 버전)

    Edit > Project Settings > Player  > Publishing Settings > Custom Gradle properties Template를 클릭해 주십시오.

    • 해당 옵션을 활성화 하면 Assets/Plugins/Android/gradleTemplate.properties 파일이 생성됩니다.

    image.png

    gradleTemplate.properties 파일에 아래 내용을 추가해 주십시오.

    android.useAndroidX=true
    android.enableJetifier=true

    푸시 알림 아이콘 설정

    푸시 메시지를 수신했을 때 알림 바에 표시할 아이콘을 설정할 수 있습니다. 별도로 설정하지 않을 경우 SDK에 포함된 기본 이미지를 사용하며, 게임에 맞는 아이콘을 직접 설정할 수 있습니다.

    Android Asset Studio를 이용해 제작하면 자동으로 폴더별로 이미지가 제작되어 편리합니다.

    푸시 알림 아이콘을 설정하는 방법은 다음과 같습니다.

    1. 아래와 같이 프로젝트 경로에 res/drawable 폴더를 각각 생성한 후 각 크기별 이미지 파일을 추가해 주십시오.

      폴더명크기
      /Assets/Plugins/Android/GamePotResources/res/drawable-mdpi/24x24
      /Assets/Plugins/Android/GamePotResources/res/drawable-hdpi/36x36
      /Assets/Plugins/Android/GamePotResources/res/drawable-xhdpi/48x48
      /Assets/Plugins/Android/GamePotResources/res/drawable-xxhdpi/72x72
      /Assets/Plugins/Android/GamePotResources/res/drawable-xxxhdpi/96x96

      유니티 엔진 202x 이후 부터는 GamePotResources.androidlib 폴더에 넣어야 하며 mainTemplate.gradle에 해당 리소스 폴더를 추가해야 합니다.

      ...
          implementation project('GamePotResources.androidlib')
      ...
      
    2. 이미지 파일 이름을 ic_stat_gamepot_small로 변경해 주십시오.

    Screen Orientation 설정

    게임에 맞게 Screen Orientation을 설정하는 방법은 다음과 같습니다.

    1. /Assets/Plugin/Android/AndroidManifest.xml 파일을 Unity에서 열어 주십시오.
    2. Main Activity에 아래 코드를 추가한 후 게임에 맞게 sensorLandscape 또는 sensorPortrait를 값으로 입력해 주십시오.
      ...
          <activity android:screenOrientation="sensorLandscape">
            <intent-filter>
              <action android:name="android.intent.action.MAIN" />
                ...
            </intent-filter>
          </activity>
      ...
      

    Android Resolver, Unity Build 설정

    SDK를 사용하기 위해 아래와 같이 Android Resolver 및 Unity Build를 설정해 주십시오.

    • Android Resolver
      Unity에서 Assets > Play Services Resolver > Android Resolver > Settings 메뉴 중 Use Jetifier 선택해 주십시오.
      Enable Resolution On Build / Enable Auto-Resolution / Patch gradle Template.properties 항목은 선택 해제해 주십시오.

    • Unity Build
      Unity에서 File > Build Settings > Build System 메뉴를 차례대로 클릭한 후 Gradle을 선택해 주십시오.

    iOS 환경 설정

    GAMEPOT Unity SDK를 사용하여 iOS 기반의 게임을 개발하려면 필요한 환경을 설정해야 합니다.

    프로젝트 구성

    iOS 환경을 설정하기 위해 프로젝트를 구성하는 방법은 다음과 같습니다.

    1. 구글 Firebase 콘솔에서 획득한 GoogleService-Info.plist 파일을 Unity 프로젝트에 추가해 주십시오.

    2. 표를 참조하여 프로젝트의 GamePotConfig-Info.plist 파일에서 아래 설정을 변경해 주십시오.
      (Facebook 로그인을 사용하지 않는 경우, 빌드 시 GamePotFacebook.framework가 포함되지 않도록 해주십시오.)

      환경 변수설명
      gamepot_project_idGAMEPOT에서 발급받은 프로젝트 ID
      gamepot_facebook_app_id페이스북 콘솔에서 획득한 앱 ID
      gamepot_facebook_display_name페이스북에 표시되는 이름
      gamepot_facebook_client_token// 페이스북 콘솔 > 앱 > 설정 > 고급 설정 > 클라이언트 토큰
      gamepot_google_app_idGoogleService-Info 파일의 CLIENT_ID
      gamepot_google_url_schemesGoogleService-Info 파일의 REVERSED_CLIENT_ID
      gamepot_elsa_projectid네이버 클라우드 ELSA 사용 시 프로젝트 ID
      gamepot_region게임팟 대시보드 생성 리전이 싱가포르인 경우에만 sg 입력
      gamepot_license_url게임팟 대시보드 생성 리전이 일본인경우 경우만 https://gamepot.apigw.ntruss.com/fw/jp-v1 입력
    3. Target을 선택한 후 Info > Custom iOS Target Properties 메뉴에서 아래 사용자 권한 획득 옵션을 추가해 주십시오. ( XCode 기준 )

      • 해당 사용자 권한은 GAMEPOT 고객센터 내의 파일 업로드 기능에서 사용됩니다.
        NSCameraUsageDescription, NSPhotoLibraryUsageDescription, NSMicrophoneUsageDescription
      • iOS 14 버전부터 IDFA 값 획득 시 사용자에게 권한을 획득해야만 IDFA 값 획득이 가능하도록 변경되었습니다. 따라서 IDFA 값 획득 시 사용자에게 권한 획득하는 팝업을 사용하신다면 Targets >> Info >> Custom iOS Target Properties 내에 아래 사용자 권한 획득 옵션을 추가 부탁드립니다. ( 수집하는 목적 및 사용처에 대한 설명이 추가되어야 합니다.)
        NSUserTrackingUsageDescription

    <예시> 게임팟 샘플 화면
    File > Build Settings 메뉴에서 GamePotSample>Scene>Login, Main을 추가한 후 > Build 하시면 샘플 화면을 확인할 수 있습니다.

    초기화

    초기화를 수행하려면 게임을 시작할 때 로드되는 첫 장면에 사용되는 개체에 아래 코드를 추가해 주십시오.

    using GamePotUnity;
    public class GamePotLoginSampleScene : MonoBehaviour {
        void Awake() {
            GamePot.initPlugin();
        }
        void Start () {
            GamePot.setListener(  GamePotInterface.cs 상속받은 class );
        }
    
    }
    
    ex)
    public class GamePotSampleListener : MonoBehaviour , IGamePot {
        ....
    }
    

    오류 코드 설정

    오류 코드를 설정하려면 아래의 코드를 사용해 주십시오.

    public class NError
    {
        // 알 수 없는 Error
        public static readonly int CODE_UNKNOWN_ERROR           = 0;
        // 초기화 실패
        public static readonly int CODE_NOT_INITALIZE           = 1;
        // 파라미터가 올바르지 않은 경우
        public static readonly int CODE_INVAILD_PARAM           = 2;
        // 멤버ID 데이터가 없는 경우
        public static readonly int CODE_MEMBERID_IS_EMPTY       = 3;
        // 로그인이 되지 않은 상태
        public static readonly int CODE_NOT_SIGNIN              = 4;
        // 네트워크 모듈이 초기화되지 않은 경우
        public static readonly int CODE_NETWORK_MODULE_NOT_INIT = 3000;
        // 네트워크 연결 오류 및 타임아웃 발생 시
        public static readonly int CODE_NETWORK_ERROR           = 3001;
        // server-side에서 발생하는 오류
        public static readonly int CODE_SERVER_ERROR            = 4000;
        // http response code가 성공이 아닌 경우
        public static readonly int CODE_SERVER_HTTP_ERROR       = 4001;
        // 네트워크 연결 오류 및 타임아웃 발생 시
        public static readonly int CODE_SERVER_NETWORK_ERROR    = 4002;
        // 서버에서 받은 데이터를 파싱할 때의 오류
        public static readonly int CODE_SERVER_PARSING_ERROR    = 4003;
        // 결제에서 알 수 없는 오류 발생 및 스토어 측에서 Error를 전달하는 경우
        public static readonly int CODE_CHARGE_UNKNOWN_ERROR    = 5000;
        // product id를 입력하지 않은 경우
        public static readonly int CODE_CHARGE_PRODUCTID_EMPTY  = 5001;
        // product id를 잘못 입력한 경우
        public static readonly int CODE_CHARGE_PRODUCTID_WRONG  = 5002;
        // consume 시 오류
        public static readonly int CODE_CHARGE_CONSUME_ERROR    = 5003;
    
        // error Code
        public int code { get; set; }
        // error Message
        public string message { get; set; }
    }
    

    로그인 관련 기능

    구글, 페이스북, 네이버 등 다양한 로그인 SDK 기능을 통합하여 GAMEPOT Unity SDK에서 사용할 수 있습니다.

    사용 전 설정

    로그인 관련 SDK 기능을 사용하려면 필요한 콘솔 설정을 완료하고 로그인 관련 코드를 선언해야 합니다.

    구글 로그인 환경 설정

    로그인 기능을 사용하기 위해 구글 Firebase 콘솔을 설정하는 방법은 아래와 같습니다.

    1. 구글 Firebase 콘솔에서 획득한 안드로이드용 google-service.json 파일을 /Assets/Plugins/Android/ 경로에 복사해 주십시오.
    2. APK를 구성할 때 사용한 Keystore 파일의 SHA-1 값을 Firebase 콘솔에 추가해 주십시오.
    • 구글 로그인을 시도할 때 onCancel 응답과 함께 로그인이 되지 않는 경우 아래와 같이 해결해 주십시오.
      • google-service.json 파일을 정상적으로 적용하였는지 확인
      • APK를 구성할 때 사용한 Keystore와 Firebase 콘솔에 등록하기 위해 SHA-1 값을 추출한 Keystore가 서로 동일한 개체가 맞는지 확인
      • Firebase 콘솔에 등록한 패키지 명으로 빌드를 했는지 확인

    페이스북 로그인 환경 설정

    로그인 기능을 사용하기 위해 페이스북 콘솔을 설정하는 방법은 다음과 같습니다.

    1. Facebook for Developers 콘솔에서 앱 유형을 None 또는 Consumer 또는 Instant Games으로 선택한 후 앱을 생성해 주십시오.
    2. APK를 구성할 때 사용한 Keystore의 키 해시값을 Facebook for Developers 콘솔에 추가해 주십시오.
    3. Facebook for Developers 콘솔에서 획득한 앱 ID 및 관련 정보를 추가해 주십시오.
    • 안드로이드
      • mainTemplate.gradle 수정 ( unity 2019 이상버전에서는 launcherTemplate.gradle에서 수정)
      ...
      defaultConfig {
          resValue "string", "facebook_app_id", "{앱 ID}"
          resValue "string", "fb_login_protocol_scheme", "fb{앱 ID}"
          resValue "string", "facebook_client_token", "" // 페이스북 콘솔 > 앱 >  설정 > 고급 설정 > 클라이언트 토큰 optional (facebook)
      }
      ...
      
      


    • iOS
      • GamepotConfig-info.plist 파일 수정
      gamepot_facebook_app_id // 페이스북 앱 ID
      gamepot_facebook_display_name // 페이스북에 표시되는 이름
      gamepot_facebook_client_token //  // 페이스북 콘솔 > 앱 >  설정 > 고급 설정 > 클라이언트 토큰 
      
      SourceCode로 확인할 때는 아래와 같이 추가
      ...
       <key>gamepot_facebook_app_id</key>
       <string>xxxxxx</string>
       <key>gamepot_facebook_display_name</key>
       <string>xxxxxx</string>
       <key>gamepot_facebook_client_token</key>
       <string>xxxxxx</string>
       ...
      
    1. 프로젝트 /Assets/Plugins/IOS/Frameworks 경로에 아래 프레임워크를 추가해 주십시오.
      • FBSDKLoginKit.xcframework, FBSDKCoreKit_Basics.xcframework, FBSDKCoreKit.xcframework, FBAEMKit.xcframework, FBSDKCoreKit.framework, GamePotFacebook.framework

    애플 로그인 환경 설정

    iOS 전용 애플 로그인 환경을 설정하려면 프로젝트에서 Target을 선택한 후 Signing & Capabilities 메뉴에서 Sign In with Apple Capability를 추가해 주십시오.

    게임 센터 로그인 환경 설정

    iOS 전용 게임센터 로그인 환경을 설정하는 방법은 다음과 같습니다.

    1. 프로젝트 Assets/Plugins/IOS/etcFrameworks/ 경로에서 GamePotGameCenter.framework를 선택한 후 Select platforms for plugin 목록의 iOS 설정을 선택해 주십시오.
    2. Xcode에서 Target을 선택한 후 Build Phases > Linked Binary With Libraries 메뉴에 Gamekit.framework를 추가해 주십시오.
    3. Signing & Capabilities 메뉴에서 GameCenter Capability를 추가해 주십시오.

    로그인 기능

    개발사에서 구현한 로그인 UI에 따라 로그인 버튼을 클릭했을 때 동작하는 SDK 로그인 기능을 사용하려면 아래 코드를 사용해 주십시오.

    • 방식 1

      GamePot.login(NCommon.LoginType);
      
      // 로그인 성공
      public void onLoginSuccess(NUserInfo userInfo)
      {
      }
      // 로그인 실패
      public void onLoginFailure(NError error)
      {
          // error.message를 사용하여 메시지를 표시해 주십시오.
      }
      // 로그인 취소
      public void onLoginCancel()
      {
          // 사용자가 로그인을 취소
      }
      // 강제 업데이트(스토어 버전과 클라이언트 버전이 다를 경우 호출)
      public void onNeedUpdate(NAppStatus status)
      {
          // 파라미터로 넘어온 status 정보를 토대로 팝업을 만들어 표시해야 합니다. 아래 두 가지 방식 중 한 가지를 선택하여 팝업을 구성해 주십시오.
          // case 1: 개발사에서 직접 UI를 구현한 인게임 팝업 사용
          // case 2: 아래 코드를 호출하여 SDK 자체 팝업 사용
          // GamePot.showAppStatusPopup(status.ToJson());
      }
      // 점검(대시보드에 점검이 활성화되어 있는 경우 호출)
      public void onMainternance(NAppStatus status)
      {
           // 파라미터로 넘어온 status 정보를 토대로 팝업을 만들어 표시해야 합니다. 아래 두 가지 방식 중 한 가지를 선택하여 팝업을 구성해 주십시오.
          // case 1: 개발사에서 직접 UI를 구현한 인게임 팝업 사용
          // case 2: 아래 코드를 호출하여 SDK 자체 팝업 사용
          // GamePot.showAppStatusPopup(status.ToJson());
      }
      // 앱 종료
      public void onAppClose()
      {
          // 강제 업데이트나 점검 기능을 case 2 방식으로 구현하는 경우 앱을 강제 종료할 수 있으므로 이 곳에서 앱을 종료할 수 있도록 구현해 주십시오.
      }
      
    • 방식 2

      GamePot.login(NCommon.LoginType.GOOGLE, GamePotCallbackDelegate.CB_Login);
      
      GamePot.login(NCommon.LoginType.GOOGLE, (resultState, userInfo, appStatus, error) => {
          switch (resultState)
          {
              case NCommon.ResultLogin.SUCCESS:
              // login success
              break;
              case NCommon.ResultLogin.CANCELLED:
              // login cancel
              break;
              case NCommon.ResultLogin.FAILED:
              // login fail
              break;
              case NCommon.ResultLogin.NEED_UPDATE:
                  // 파라미터로 넘어온 appStatus 정보를 토대로 팝업을 만들어 표시해야 합니다. 아래 두 가지 방식 중 한 가지를 선택하여 팝업을 구성해 주십시오.
                  // case 1: 개발사에서 직접 UI를 구현한 인게임 팝업 사용
                  // case 2: 아래 코드를 호출하여 SDK 자체 팝업 사용
                  // GamePot.showAppStatusPopup(status.ToJson());
              break;
              case NCommon.ResultLogin.MAINTENANCE:
                  // 파라미터로 넘어온 appStatus 정보를 토대로 팝업을 만들어 표시해야 합니다. 아래 두 가지 방식 중 한 가지를 선택하여 팝업을 구성해 주십시오.
                  // case 1: 개발사에서 직접 UI를 구현한 인게임 팝업 사용
                  // case 2: 아래 코드를 호출하여 SDK 자체 팝업 사용
                  // GamePot.showAppStatusPopup(status.ToJson());
              break;
              case NCommon.ResultLogin.APP_CLOSE:
                  // 강제 업데이트나 점검 기능을 case 2 방식으로 구현하는 경우 앱을 강제 종료할 수 있으므로 이 곳에서 앱을 종료할 수 있도록 구현해 주십시오.
              break;
              default:
              break;
          }
      });
      

    LoginType, NUserInfo, NAppStatus 정의

    로그인 기능의 각종 파라미터를 설정하려면 아래 코드를 사용해 주십시오.

    • LoginType
      public enum LoginType
      {
          NONE,
          GOOGLE,
          GOOGLEPLAY,
          FACEBOOK,
          NAVER,
          GAMECENTER,
          TWITTER,
          LINE,
          APPLE,
          GUEST,
          THIRDPARTYSDK
      }
      
    • NUserInfo
      public class NUserInfo
      {
          public string memberid { get; set; }        // 사용자 고유 ID
          public string name { get; set; }            // 이름
          public string profileUrl { get; set; }      // 프로필 URL(있을 경우)
          public string email { get; set; }           // 이메일(있을 경우)
          public string token { get; set; }           // 사용자 유효성 검증 Token (Token Authentication API에서 사용)
          public string userid { get; set; }          // 소셜 미디어 ID
      }
      
    • NAppStatus
      public class NAppStatus
      {
          public string type { get; set; }        // AppStatus 타입으로 "maintenance": 점검, "needupdate" : 업데이트
          public string message { get; set; }     // 점검 설정: Dashboard에서 입력한 메시지
          public string url { get; set; }         // 점검 설정: Dashboard에서 입력한 URL
          public string currentAppVersion { get; set; }   // 업데이트 : 현재 App Version
          public string updateAppVersion { get; set; }    // 업데이트 : Dashboard에서 입력한 App Version
          public int currentAppVersionCode { get; set; }  // 업데이트 : 현재 App Code
          public int updateAppVersionCode { get; set; }   // 업데이트 : Dashboard에서 입력한 App Version code
          public bool isForce { get; set; }           // 업데이트: Dashboard에서 강제 업데이트 설정 시 true
          public string resultPayload { get; set; }   // 클라이언트 SDK에서 전달된 Json 값이므로 무시해 주십시오.
          public double startedAt { get; set; }       // 점검: 시작 시간
          public double endedAt { get; set; }         // 점검: 종료 시간
      }
      

    IDFA 값 획득을 위한 권한 요청 팝업 설정

    iOS 플랫폼에서 사용자 IDFA 값 획득을 위한 권한 요청 팝업을 사용하려면 아래 코드를 사용해 주십시오.

    // IDFA 값 획득 권한 요청 팝업을 임의로 띄울 수 있습니다.
    // 권한 획득 후에는, 메소드 호출 시에도 팝업이 뜨지 않습니다.
    
    GamePot.requestTrackingAuthorization((NResultTrackingAuthorizationresultState) =>
    {
       // 획득한 NResultTrackingAuthorizationresultState 핸들링..
    });
    


    • NResultTrackingAuthorizationresultState 정의
      public class NResultTrackingAuthorization
      {
          public NCommon.ResultTrackingAuthorization authorization { get; set; }
      }
      
      public enum ResultTrackingAuthorization
      {
          ATTrackingManagerAuthorizationStatusNotDetermined,
          ATTrackingManagerAuthorizationStatusRestricted,
          ATTrackingManagerAuthorizationStatusDenied,
          ATTrackingManagerAuthorizationStatusAuthorized,
          ATTrackingManagerAuthorizationStatusUnknown
      }
      

    회원 고유 아이디 획득

    게임 회원의 고유 아이디 값을 획득하려면 아래 코드를 사용해 주십시오.

    GamePot.getMemberId();
    

    계정별 로그인 기능 사용

    계정별 로그인 기능을 사용하려면 아래의 코드를 사용하여 설정을 적용해 주십시오.

    네이버 로그인

    네이버 로그인 기능을 사용하려면 Naver Developers 콘솔에서 사용 API를 네아로로 선택한 후 앱을 등록하고 아래 코드를 사용해 주십시오.

    • 안드로이드
      • mainTemplate.gradle 수정
      ...
      defaultConfig {
          resValue "string", "gamepot_naver_clientid", "abcdefg1234567890"
          resValue "string", "gamepot_naver_secretid", "hijklmn"
      }
      ...
      
      // Naver Developers 콘솔에서 획득한 Client ID를 gamepot_naver_clientid 값에 입력하고 Client Secret을 gamepot_naver_secretid 값에 입력해 주십시오.
          ```
      


    • iOS
      • GamepotConfig-info.plist 파일 수정
      gamepot_naver_clientid // 네이버에서 사용할 client ID
      gamepot_naver_secretid // 네이버에서 사용할 secret ID
      gamepot_naver_urlscheme // 네이버에서 사용할 URL Scheme
      
      SourceCode로 확인할 때는 아래와 같이 추가
      ...
       <key>gamepot_naver_clientid</key>
       <string>xxxxxx</string>
       <key>gamepot_naver_secretid</key>
       <string>xxxxxx</string>
       <key>gamepot_naver_urlscheme</key>
       <string>xxxxxx</string>
       ...
      
      • 프로젝트 Info > URL Types 메뉴에 네이버 ID로 로그인 설정에 등록한 URL Scheme을 추가

    라인 로그인

    라인 로그인 기능을 사용하려면 APK를 구성할 때 사용한 패키지명, Keystore의 SHA-1 값, URL Scheme 값을 LINE Developers 콘솔에 추가한 후 아래 코드를 사용해 주십시오.

    • 안드로이드
      • mainTemplate.gradle 수정
      ...
      defaultConfig {
          resValue "string", "gamepot_line_channelid","xxxxxxx"
      }
      ...
      
      // 라인 Developers 콘솔에서 획득한 Client ID를 gamepot_line_channelid 값에 입력해 주십시오.
      


    • iOS
      • GamepotConfig-info.plist 파일 수정
      gamepot_line_channelid // 라인에서 사용할 client 아이디
      gamepot_line_url_schemes // Line URL Scheme (line3rdp.{프로젝트 번들 identifier})
      
      SourceCode로 확인할 때는 아래와 같이 추가
      ...
       <key>gamepot_line_channelid</key>
       <string>xxxxxx</string>
       <key>gamepot_line_url_schemes</key>
       <string>xxxxxx</string>
       ...
      

    애플 웹 로그인

    애플 웹 로그인 기능을 사용하려면 대시보드의 프로젝트 설정 > 일반 메뉴에서 Apple ID Login을 설정한 후 프로젝트 /Assets/Plugins/Android/libs 경로에 gamepot-channel-apple-signin.aar 파일을 추가해 주십시오.

    자동 로그인 기능

    회원이 마지막으로 로그인했던 정보를 전달하는 API를 통한 자동 로그인 기능을 사용하려면 아래 코드를 사용해 주십시오.

    NCommon.LoginType type = GamePot.getLastLoginType();
    if(type != NCommon.LoginType.NONE) {
    {
        // 마지막에 로그인했던 로그인 타입으로 로그인하는 방식입니다.
        GamePot.login(type);
    }
    else
    {
        // 처음 게임을 실행했거나 로그아웃한 상태. 로그인을 할 수 있는 로그인 화면으로 이동해 주십시오.
    }
    

    로그아웃 기능

    로그아웃 기능을 사용하려면 아래 코드를 사용해 주십시오.

    • 방식 1
    GamePot.logout();
    
    /// 로그아웃 성공
    public void onLogoutSuccess()
    {
    }
    
    /// 로그아웃 실패
    public void onLogoutFailure(NError error)
    {
        // error.message를 사용하여 메시지를 표시해 주십시오.
    }
    
    • 방식 2
    GamePot.logout(GamePotCallbackDelegate.CB_Common);
    
    GamePot.logout((success, error) => {
       if(success)
       {
           // 로그아웃 성공
       }
       else
       {
            // 로그아웃 실패
            // error.message를 사용하여 메시지를 표시해 주십시오.
       }
    });
    
    

    회원 탈퇴 기능

    회원 탈퇴 기능을 사용하려면 아래 코드를 사용해 주십시오.

    • 방식 1
    GamePot.deleteMember();
    
    /// 회원 탈퇴 성공
    public void onDeleteMemberSuccess() {
    }
    
    /// 회원 탈퇴 실패
    public void  onDeleteMemberFailure(NError error) {
        // error.message를 사용하여 메시지를 표시해 주십시오.
    }
    
    • 방식 2
    GamePot.deleteMember(GamePotCallbackDelegate.CB_Common);
    
    GamePot.deleteMember((success, error) => {
       if(success)
       {
            // 회원 탈퇴 성공
       }
       else
       {
            // 회원 탈퇴 실패
            // error.message를 사용하여 메시지를 표시해 주십시오.
       }
    });
    

    로그인 검증 기능

    로그인 완료 후 로그인 정보를 개발사 서버에서 GAMEPOT 서버로 전달하여 로그인 검증을 진행할 수 있습니다.

    자세한 설명은 로그인 검증 요청을 참조해 주십시오.

    외부 계정 연동

    하나의 게임 계정에 여러 개의 외부 계정을 연결 또는 연결 해제할 수 있습니다.

    계정 연동 기능

    구글, 페이스북, 네이버 등 다양한 외부 계정과의 연동 기능을 사용하려면 아래 코드를 사용해 주십시오.

    • 방식 1
    public enum LinkingType
    {
        GOOGLEPLAY,
        GAMECENTER,
        GOOGLE,
        FACEBOOK,
        NAVER,
        TWITTER,
        LINE,
        APPLE
    }
    
    void GamePot.createLinking(NCommon.LinkingType.XXXXX);
    
    /// 계정 연동 취소
    public void onCreateLinkingCancel() {
        // 사용자가 계정 연동을 취소
    }
    
    /// 계정 연동 성공
    public void onCreateLinkingSuccess(NUserInfo userInfo) {
    }
    
    /// 계정 연동 실패
    public void onCreateLinkingFailure(NError error) {
        // error.message를 사용하여 메시지를 표시해 주십시오.
    }
    
    • 방식 2
    public enum LinkingType
    {
        GOOGLEPLAY,
        GAMECENTER,
        GOOGLE,
        FACEBOOK,
        NAVER,
        TWITTER,
        LINE,
        APPLE
    }
    
    void GamePot.createLinking(NCommon.LinkingType.XXXXX, GamePotCallbackDelegate.CB_CreateLinking);
    
    GamePot.createLinking(NCommon.LinkingType.XXXXX, (resultState, userInfo, error) => {
          switch (resultState)
        {
            case NCommon.ResultLinking.SUCCESS:
            // 계정 연동 성공
            break;
            case NCommon.ResultLinking.CANCELLED:
            // 계정 연동 취소
            break;
            case NCommon.ResultLinking.FAILED:
            // 계정 연동 실패
            break;
            default:
            break;
        }
    });
    

    연동 리스트 확인 기능

    계정에 연동된 외부 계정 목록을 확인하려면 아래 코드를 사용해 주십시오.

    List<NLinkingInfo> linkedList = GamePot.getLinkedList();
    
    // 링크 정보 정의
    public class NLinkingInfo
    {
        public LinkingType provider { get; set; }  // google, facebook, naver, apple..
    }
    

    연동 해제 기능

    외부 계정과의 연동 해제 기능을 사용하려면 아래 코드를 사용해 주십시오.

    • 방식 1
    void GamePot.deleteLinking(NCommon.LinkingType.XXXXX);
    
    /// 계정 연동 해제 성공
    public void onDeleteLinkingSuccess() {
    }
    
    /// 계정 연동 해제 실패
    public void onDeleteLinkingFailure(NError error) {
        // 연동 해제를 실패하는 경우
        // error.message를 사용하여 메시지를 표시해 주십시오.
    }
    
    • 방식 2
    void GamePot.deleteLinking(NCommon.LinkingType.XXXXX, GamePotCallbackDelegate.CB_Common);
    
    GamePot.deleteLinking(NCommon.LinkingType.XXXXX, (success, error) => {
        if(success)
        {
           // 계정 연동 해제 성공
        }
       else
       {
            // 연동 해제를 실패하는 경우
            // error.message를 사용하여 메시지를 표시해 주십시오.
        }
    });
    

    결제 기능

    참고

    게임팟 결제는 소모성 인앱 상품 타입만을 지원하고 있으며 원스토어 인앱 SDK는 V21버전만 지원합니다.

    • 원스토어 인앱 SDK 포함 : gamepot-billing-onestore.aar, sdk-auth-1.0.2.aar, sdk-base-1.0.3.aar, sdk-iap-21.00.00.aar
    • 갤럭시 스토어 인앱 SDK 포함: gamepot-billing-galaxystore.aar
    • 마이카드 인앱 SDK 포함 : gamepot-billing-mycard.aar ( 구글 스토어 빌드에는 포함되지 않도록 조치해 주십시오.

    인앱 구매를 위한 결제 기능을 사용할 수 있습니다.

    원스토어의 경우 AndroidManifest.xml 파일 내 하기 문구 추가가 필요합니다.

     <queries>
          <intent>
              <action android:name="com.onestore.ipc.iap.IapService.ACTION" />
          </intent>
          <intent>
              <action android:name="android.intent.action.VIEW" />
              <data android:scheme="onestore" />
          </intent>
      </queries>
    

    인앱 상품 조회 기능

    스토어에 등록된 상품 정보를 조회하는 기능을 사용하려면 아래 코드를 사용해 주십시오.

    로그인 성공 후 호출을 해야 하는 API로 getPurchaseItems API의 경우, 비동기적으로 스토어 인앱 SDK로 부터 전달 받은 내용을 드리는 API이기 때문에 호출하는 타이밍에 따라 빈 값으로 전달될 수도 있습니다. (결제 가능한 환경 기준)

    [Case1]:
    
    NPurchaseItem[] items = GamePot.getPurchaseItems();
    foreach(NPurchaseItem item in items) {
        Debug.Log(item.productId);        // 상품ID
        Debug.Log(item.price);            // 가격
        Debug.Log(item.title);            // 제목
        Debug.Log(item.description);    // 설명
    }
    
    [Case2]:
    
    GamePot.getPurchaseDetailListAsync((bool success, NPurchaseItem[] purchaseInfoList, NError error) =>
    {
       // string result = "data is empty!";
        if (success)
        {
             //PurchaseDetailList API Success
            // if (purchaseInfoList != null)
            //     result = purchaseInfoList[0].productId;
            //if (purchaseInfoList.Length > 1)
            //{
            //    for (int i = 1; i < purchaseInfoList.Length; i++)
            //        result += "\n" + purchaseInfoList[i].productId;
            //}
        }
        else
        {
            // API 오류 
            // result = error.ToJson();
        }
    
    });
    
    
    public class NPurchaseItem
    {
        public string productId { get; set; }   // 상품 ID
        public string type { get; set; }        // 상품 타입. "inapp"으로 고정
        public string price { get; set; }       // 가격 google 스토어: $0.99, 그 외 스토어: 0.99
        public string price_amount { get; set; }
        public string price_amount_micros { get; set; }
        public string price_currency_code { get; set; } // 통화코드 ex) KRW, USD
        public string price_with_currency { get; set; } // (UI에 노출 시 권장) 통화와 가격이 합쳐진 값. 원스토어의 경우 통화 단위는 전달되지 않습니다. ex) $0.99
        public string title { get; set; }       // 상품 이름
        public string description { get; set; } // 상품 설명
    }
    
    [Case3]:
    
    GamePot.getPurchaseDetailListAsync();
    
    public void onPurchaseDetailListSuccess(NPurchaseItem[] purchaseInfoList)
    {
        //PurchaseDetailList API Success
    }
    
    public void onPurchaseDetailListFailure(NError error)
    {
           // API 오류 
    }
    

    결제 시도 기능

    하나의 결제 API로 구글 플레이스토어, 애플 앱스토어 모두에서 결제 시도 기능을 사용할 수 있습니다.
    (원스토어 버전의 경우 uniqueId+serverId+playerId+etc 한 길이가 85byte 미만이 되어야 결제가 가능합니다.)

    결제 시도 기능을 사용하려면 아래의 코드를 사용해 주십시오.

    • 방식 1

    // productId : 스토어에 등록된 상품ID
    // uniqueId : 별도로 관리하는 영수증 번호
    // serverId : 결제를 진행한 캐릭터의 서버 ID
    // playerId : 결제를 진행한 캐릭터의 캐릭터 ID
    // etc : 결제를 진행한 캐릭터의 기타 정보

    
    GamePot.purchase(string productId);
    
    GamePot.purchase(string productId, string uniqueId);
    
    GamePot.purchase(string productId, string uniqueId, string serverId, string playerId, string etc);
    
    /// 인앱 결제 성공
    public void onPurchaseSuccess(NPurchaseInfo purchase) {
    }
    
    /// 인앱 결제 실패
    public void onPurchaseFailure(NError error) {
        // 인앱 결제 실패
        // error.message를 사용하여 메시지를 표시해 주십시오.
    }
    
    /// 인앱 결제 실패
    public void onPurchaseCancel() {
    }
    
    • 방식 2
    // productId : 스토어에 등록된 상품 ID
    GamePot.purchase(string productId, GamePotCallbackDelegate.CB_Purchase);
    
    GamePot.purchase(string productId, string uniqueId, GamePotCallbackDelegate.CB_Purchase);
    
    GamePot.purchase(string productId, string uniqueId, string serverId, string playerId, string etc, GamePotCallbackDelegate.CB_Purchase);
    
    GamePot.purchase(productId, (resultState, purchaseInfo, error) => {
          switch (resultState)
        {
            case NCommon.ResultPurchase.SUCCESS:
            // purchase success
            break;
            case NCommon.ResultPurchase.CANCELLED:
            // purchase cancel
            break;
            case NCommon.ResultPurchase.FAILED:
            // purchase fail
            break;
            default:
            break;
        }
    });
    

    결제 아이템 정보 획득 기능

    스토어에서 전달하는 인앱 결제 아이템 정보를 획득하는 기능을 사용하려면 아래 코드를 사용해 주십시오.

    public class NPurchaseInfo
    {
        public string price { get; set; }               // 결제 아이템의 가격
        public string productId { get; set; }           // 결제 아이템 ID
        public string currency { get; set; }            // 결제 가격 통화(KRW/USD)
        public string orderId { get; set; }             // 스토어 Order ID
        public string productName { get; set; }         // 결제 아이템 이름
        public string gamepotOrderId { get; set; }      // GAMEPOT에서 생성한 Order ID (해당 값을 제공하지 않음) 
        public string uniqueId { get; set; }            // 개발사에서 별도로 관리하는 영수증 ID
        public string serverId { get; set; }            // 결제를 진행한 캐릭터의 서버 ID
        public string playerId { get; set; }            // 결제를 진행한 캐릭터의 캐릭터 ID
        public string etc { get; set; }                 // 결제를 진행한 캐릭터의 기타 정보
        public string signature { get; set; }           // 결제 Signature
        public string originalJSONData { get; set; }    // 영수증 데이터
    }
    

    결제 아이템 지급 기능

    결제 스토어의 영수증 내역과 대조하여 검증을 모두 완료한 경우에만 개발사 서버에 지급 요청을 전송하도록 설정할 수 있습니다.
    자세한 설명은 아이템 지급 요청을 참조해 주십시오.

    Mycard 결제

    Mycard 라이브러리 : gamepot-billing-mycard.aar

    참고

    마이카드와 연동하기 위한 FacServiceID / KEY 값은 마이카드 측을 통해 확인해주세요.

    1. 대시보드 >> 결제 >> IAP의 스토어 타입:Google 항목 > 가격추가 > 통화(ex. TWD)/가격 정보를 기입후 저장해주세요.

    2. 대시보드 >> 프로젝트 설정 >> 외부결제 항목에 MyCard를 추가하고 해당 FacService ID / Sign Key 가 정상적으로 입력되어 있는지 확인해주세요.

    3. 결제는 SDK의 아래 코드를 호출 합니다.
      GamePot.getInstance().purchase("product id");

      • MyCard 사용 중 결제 아이템 호출 형태는 기존 GamePot.getInstance().getPurchaseDetailList(); 호출 시 에러발생됩니다.
        이를 대체하여 GamePot.getInstance().getPurchaseThirdPaymentsDetailList();을 호출해 주십시오.
    4. ../Assets/Plugins/Android/AndroidManifest.xml 파일에 레벨에 name을 제거 합니다.

      <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
      <application android:icon="@drawable/app_icon"
          android:label="@string/app_name"
          android:allowBackup="false"
          tools:replace="android:allowBackup"
          >
    
    1. ../Assets/Plugins/Android/mainTemplate.gradle 파일에 아래와 같이 설정 합니다.
      (Unity 2019.3.X 이후 버전부터는 launcherTemplate.gradle 파일 수정)
    resValue "string", "gamepot_store", "google"
    resValue "string", "gamepot_payment", "mycard" // 스토어가 google인 경우에만 동작합니다.
    
    1. ../Assets/Plugins/Android/libs 폴더 내에 gamepot-billing-mycard.aar 이 포함 되어 있는지 확인 합니다.

    외부결제

    외부 결제 모듈과 연동하려면 먼저 외부 결제 서비스 연동을 참조하여 설정을 완료한 후 아래의 코드를 사용해 주십시오.

    • 방식 1
    GamePot.purchaseThirdPayments(string productId);
    
    // 리턴되는 데이터 포멧은 getPurchaseItems()와 동일합니다.
    GamePot.getPurchaseThirdPaymentsItems();
    
    • 방식 2
    GamePot.purchaseThirdPayments(string productId, GamePotCallbackDelegate.CB_Purchase);
    
    // 리턴되는 데이터 포멧은 getPurchaseItems()와 동일합니다.
    GamePot.purchase(productId, (resultState, purchaseInfo, error) => {
          switch (resultState)
        {
            case NCommon.ResultPurchase.SUCCESS:
            // purchase success
            break;
            case NCommon.ResultPurchase.CANCELLED:
            // purchase cancel
            break;
            case NCommon.ResultPurchase.FAILED:
            // purchase fail
            break;
            default:
            break;
        }
    });
    

    SDK 자체 제공 로그인 UI

    GAMEPOT Unity SDK가 제공하는 완성된 형태의 로그인 UI를 사용할 수 있습니다.

    SDK 자체 제공 로그인 UI 호출

    GAMEPOT Unity SDK가 제공하는 로그인 UI를 호출하려면 아래 코드를 사용해 주십시오.

    • 방식 1
    public class NLoginUIInfo
    {
        public NCommon.LoginType[] loginTypes { get; set; }     // 노출할 Login UI 타입(배열)
        public bool showLogo { get; set; }                      // 이미지 로고 노출 여부
    }
     NLoginUIInfo info = new NLoginUIInfo();
    
    //호출할 로그인 UI 타입
     info.loginTypes = new NCommon.LoginType[]
     {
         NCommon.LoginType.GOOGLE,
         NCommon.LoginType.FACEBOOK,
         NCommon.LoginType.GUEST
         ...
     };
     info.showLogo = true;
    
    GamePot.showLoginWithUI(info);
    
    // 일반 로그인 API 응답 로직과 동일합니다. 단, onLoginCancel / onLoginFailure의 경우 Native 레벨에서 토스트 메시지로 처리됩니다.
    
    // 로그인 성공
    public void onLoginSuccess(NUserInfo userInfo)
    {
    }
    // 강제 업데이트(스토어 버전과 클라이언트 버전이 다를 경우 호출)
    public void onNeedUpdate(NAppStatus status)
    {
       // 파라미터로 넘어온 status 정보를 토대로 팝업을 만들어 표시해야 합니다. 아래 두 가지 방식 중 한 가지를 선택하여 팝업을 구성해 주십시오.
       // case 1: 개발사에서 직접 UI를 구현한 인게임 팝업 사용
       // case 2: 아래 코드를 호출하여 SDK 자체 팝업 사용
       // GamePot.showAppStatusPopup(status.ToJson());
    }
    // 점검(대시보드에 점검이 활성화되어 있는 경우 호출)
    public void onMainternance(NAppStatus status)
    {
       // 파라미터로 넘어온 status 정보를 토대로 팝업을 만들어 표시해야 합니다. 아래 두 가지 방식 중 한 가지를 선택하여 팝업을 구성해 주십시오.
       // case 1: 개발사에서 직접 UI를 구현한 인게임 팝업 사용
       // case 2: 아래 코드를 호출하여 SDK 자체 팝업 사용
       // GamePot.showAppStatusPopup(status.ToJson());
    }
    // 앱 종료
    public void onAppClose()
    {
       // 강제 업데이트나 점검 기능을 case 2 방식으로 구현하는 경우 앱을 강제 종료할 수 있으므로 이 곳에서 앱을 종료할 수 있도록 구현해 주십시오.
    }
    
    public void onLoginExit()
    {
       // 자체 제공 로그인 UI 를 닫았을때
    }       
           
    
    • 방식 2
    GamePot.showLoginWithUI(NLoginUIInfo, GamePotCallbackDelegate.CB_Login);
    
     GamePot.showLoginWithUI(NLoginUIInfo, (resultState, userInfo, appStatus, error) => {
        switch (resultState)
        {
            case NCommon.ResultLogin.SUCCESS:
              // login success
            break;
            case NCommon.ResultLogin.EXIT:
                // 자체 제공 로그인 UI 를 닫았을때
            break;
             case NCommon.ResultLogin.NEED_UPDATE:
                // 파라미터로 넘어온 status 정보를 토대로 팝업을 만들어 표시해야 합니다. 아래 두 가지 방식 중 한 가지를 선택하여 팝업을 구성해 주십시오.
                // case 1: 개발사에서 직접 UI를 구현한 인게임 팝업 사용
                // case 2: 아래 코드를 호출하여 SDK 자체 팝업 사용
                // GamePot.showAppStatusPopup(appStatus.ToJson());
            break;
             case NCommon.ResultLogin.MAINTENANCE:
                 // 파라미터로 넘어온 status 정보를 토대로 팝업을 만들어 표시해야 합니다. 아래 두 가지 방식 중 한 가지를 선택하여 팝업을 구성해 주십시오.
                // case 1: 개발사에서 직접 UI를 구현한 인게임 팝업 사용
                // case 2: 아래 코드를 호출하여 SDK 자체 팝업 사용
                // GamePot.showAppStatusPopup(appStatus.ToJson());
            break;
             case NCommon.ResultLogin.APP_CLOSE:
                // 강제 업데이트나 점검 기능을 case 2 방식으로 구현하는 경우 앱을 강제 종료할 수 있으므로 이 곳에서 앱을 종료할 수 있도록 구현해 주십시오.
            break;
            default:
            break;
        }
    });
    

    자체 제공 로그인 UI 이미지 로고 설정

    자체 제공 로그인 UI 상단에 표시되는 이미지를 설정할 수 있습니다. 별도로 설정하지 않으면 SDK에 포함된 기본 이미지를 사용하며, 게임에 맞는 이미지를 직접 설정할 수 있습니다.

    안드로이드용 이미지 로고 설정

    안드로이드용 자체 제공 로그인 UI 이미지를 설정하는 방법은 다음과 같습니다.

    1. 아래와 같이 경로에 res/drawable 폴더를 각각 생성한 후 각 크기별 이미지 파일을 추가해 주십시오.
      폴더명크기
      /Assets/Plugins/Android/GamePotResources/res/drawable-mdpi/78x55
      /Assets/Plugins/Android/GamePotResources/res/drawable-hdpi/116x82
      /Assets/Plugins/Android/GamePotResources/res/drawable-xhdpi/155x110
      /Assets/Plugins/Android/GamePotResources/res/drawable-xxhdpi/232x165
      /Assets/Plugins/Android/GamePotResources/res/drawable-xxxhdpi/310x220
    2. 이미지 파일 이름을 ic_stat_gamepot_login_logo.png로 변경해 주십시오.

    iOS용 이미지 로고 설정

    iOS용 자체 제공 로그인 UI 이미지를 설정하려면 설정할 이미지(권장 크기 310x220의 파일명을 ic_stat_gamepot_login_logo.png로 변경한 후 GamePot.bundle 내에 존재하는 같은 이름의 기존 파일과 교체해 주십시오.

    쿠폰 기능

    사용자가 쿠폰을 입력하면 사용 처리하는 기능을 사용하려면 아래 코드를 사용해 주십시오.

    • 방식 1
    GamePot.coupon(string couponNumber); // 쿠폰번호
    
    GamePot.coupon(string couponNumber, string userData); // 쿠폰번호, 사용자정보
    
    /// 쿠폰 사용 성공
    public void onCouponSuccess() {
    }
    
    /// 쿠폰 사용 실패
    public void onCouponFailure(NError error) {
        // error.message를 사용하여 메시지를 표시해 주십시오.
    }
    
    • 방식 2
    GamePot.coupon(string couponNumber, GamePotCallbackDelegate.CB_Common); // 쿠폰번호
    
    GamePot.coupon(string couponNumber, string userData, GamePotCallbackDelegate.CB_Common);    // 쿠폰번호, 사용자정보
    
    GamePot.coupon(couponNumber, (success, error) => {
       if(success)
       {
           // 쿠폰 사용 성공
       }
       else
       {
            // 쿠폰 사용 실패
            // error.message를 사용하여 메시지를 표시해 주십시오.
       }
    });
    

    아이템 지급

    쿠폰 사용에 성공하면 개발사 서버에 아이템 지급을 요청합니다.

    자세한 설명은 아이템 지급 요청을 참조해 주십시오.

    푸시 기능

    일반 푸시, 야간 푸시, 광고성 푸시 기능을 활성화 또는 비활성화하고, 로컬 푸시 기능을 사용할 수 있습니다.
    광고성 푸시 설정은 푸시기능을 사용하신다면 true 로 해주세요 (광고성 푸시 값이 false 시 일반/야간 푸시 설정 상관없이 푸시가 오지 않습니다.)

    일반 푸시 설정

    일반 푸시를 설정하려면 아래의 코드를 사용해 주십시오.

    • 방식 1
        GamePot.setPushStatus(bool pushEnable);
    
        /// 푸시 상태 변경에 대한 서버 통신 성공
        public void onPushSuccess() {
        }
    
        /// 푸시 상태 변경에 대한 서버 통신 실패
        public void onPushFailure(NError error) {
    
            // 푸시 상태 변경을 실패한 경우 error.message를 사용하여 메시지를 표시해 주십시오.
        }
    
    • 방식 2
    void GamePot.setPushStatus(bool pushEnable, GamePotCallbackDelegate.CB_Common);
    
        GamePot.setPushStatus(pushEnable, (success, error) => {
            if(success)
            {
                // 푸시 상태 변경에 대한 서버 통신 성공
            }
           else
           {
                // 푸시 상태 변경 실패. error.message를 사용하여 메시지를 표시해 주십시오.
            }
        });
        
    

    야간 푸시 설정

    야간 푸시를 설정하려면 아래의 코드를 사용해 주십시오.

    • 방식 1
    GamePot.setPushNightStatus(bool nightPushEnable);
    
        /// 야간 푸시 상태 변경에 대한 서버 통신 성공
        public void onPushNightSuccess() {
        }
    
        /// 야간 푸시 상태 변경에 대한 서버 통신 실패
        public void onPushNightFailure(NError error) {
    
            // 야간 푸시 상태 변경을 실패한 경우 error.message를 사용하여 메시지를 표시해 주십시오.
        }
    
    • 방식 2
        void GamePot.setPushNightStatus(bool nightPushEnable, GamePotCallbackDelegate.CB_Common);
    
        GamePot.setPushNightStatus(nightPushEnable, (success, error) => {
            if(success)
            {
                // 야간 푸시 상태 변경에 대한 서버 통신 성공
            }
           else
           {
                // 야간 푸시 상태 변경 실패. error.message를 사용하여 메시지를 표시해 주십시오.
            }
        });
    

    일반/야간/광고 푸시 한 번에 설정

    로그인 전에 푸시 허용 여부를 확인하는 게임인 경우 로그인 후 반드시 아래 코드를 호출해 주십시오.

    • 방식 1
    GamePot.setPushStatus(bool pushEnable, bool nightPushEnable, bool adPushEnable);
    
    /// 푸시 상태 변경에 대한 서버 통신 성공
    public void onPushStatusSuccess() {
    }
    
    /// 푸시 상태 변경에 대한 서버 통신 실패
    public void onPushStatusFailure(NError error) {
    
        // 푸시 상태 변경을 실패한 경우 error.message를 팝업 등으로 유저에게 알려주세요.
    }
    
    • 방식 2
    void GamePot.setPushStatus(bool pushEnable, bool nightPushEnable, bool adPushEnable, GamePotCallbackDelegate.CB_Common);
    
    GamePot.setPushStatus(pushEnable, nightPushEnable, adPushEnable, (success, error) => {
        if(success)
        {
            // 푸시 상태 변경에 대한 서버 통신 성공
        }
       else
       {
            // 푸시 상태 변경 실패. error.message를 팝업 등으로 유저에게 알려주세요.
        }
    });
    

    푸시 상태 확인

    현재 푸시 상태를 확인하려면 아래 코드를 사용해 주십시오.

    NPushInfo pushInfo = GamePot.getPushStatus();
    
    // pushInfo.enable  푸시 허용 여부
    // pushInfo.night   야간 푸시 허용 여부
    

    이미지 푸시 기능

    iOS 앱에서 알림 이미지를 수신하고 처리할 수 있도록 알림 서비스 확장 프로그램을 추가하는 방법은 다음과 같습니다.

    1. 프로젝트에서 Target 메뉴를 클릭한 후 Notification Service Extension을 선택하고 Next를 클릭해 주십시오.
    2. Project Name을 입력한 후 Finish를 클릭해 주십시오.
    3. 생성된 Notification Service Extension 모듈의 NotificationService.h 파일을 아래와 같이 수정해 주십시오.
      // GamePot/GamePotNotificationServiceExtension.h를 Import
      // #import <UserNotifications/UserNotifications.h>
      #import <GamePot/GamePotNotificationServiceExtension.h
      // UNNotificationServiceExtension 대신 GamePotNotificationServiceExtension를 상속
      // @interface NotificationService : UNNotificationServiceExtension
      @interface NotificationService : GamePotNotificationServiceExtension
      @end
      
    4. 생성된 Notification Service Extension 모듈의 NotificationService.m 파일을 아래와 같이 수정해 주십시오.
      ...
      
      - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
          // self.contentHandler = contentHandler;
          // self.bestAttemptContent = [request.content mutableCopy];
          // Modify the notification content here...
          // self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
          // self.contentHandler(self.bestAttemptContent);
          [super didReceiveNotificationRequest:request withContentHandler:contentHandler];
      }
      
      ...
      
    5. 생성된 Notification Service Extension 모듈에서 Targets > Build Phases > Link Binary With Libraries 메뉴를 차례대로 클릭한 후 GamePot.framework를 추가해 주십시오.

    로컬 푸시 기능

    푸시 메시지 서버를 통하지 않고 디바이스에서 자체적으로 푸시를 표시할 수 있습니다.

    푸시를 등록하여 정해진 시간에 로컬 푸시가 표시되도록 하려면 아래 코드를 사용해 주십시오.

    int pushId = GamePot.sendLocalPush(DateTime.Parse("2018-01-01 00:00:00"), "title", "content");
    
    // pushid의 return 값은 개발사에서 관리 
    

    등록한 로컬 푸시 취소

    로컬 푸시를 등록할 때 얻은 pushid 값을 사용하여 기존에 등록된 푸시를 취소하려면 아래 코드를 사용해 주십시오.

    GamePot.cancelLocalPush(/*푸시 등록시 얻은 pushId*/);
    

    공지사항 이미지 표시 기능

    대시보드의 공지사항 메뉴에 업로드한 이미지가 표시되도록 설정할 수 있습니다. 권장 이미지 크기는 아래와 같습니다.

    • 크기: 720x1200(Portrait), 1280x640(Landscape)
    • 용량: 250 kB 이하

    대시보드 공지사항 메뉴에 업로드한 이미지가 표시되도록 하려면 아래 코드를 사용해 주십시오.

    GamePot.showNotice(bool Flag = true);
    
    // true : 오늘 하루 보지 않기 적용
    // false : 오늘 하루 보지 않기 관계없이 강제 노출
    
    GamePot.showEvent(string Type)
    
    // Type : 대시보드 공지사항 > 분류 메뉴에서 설정한 분류명에 해당하는 이미지만 노출
    
    public void onReceiveScheme(string scheme)
    {
        // GAMEPOT 대시보드에서 설정한 scheme 값을 전달
    }
    

    고객지원 기능

    대시보드와 연동하여 고객 문의, 정책 및 약관 UI 호출, 동의 수집 등의 기능을 사용할 수 있습니다.

    고객 문의 기능

    회원이 문의를 발송하고 담당자가 답변할 수 있는 고객 문의 기능을 사용할 수 있습니다. 대시보드의 고객지원 > 고객문의 메뉴와 연동됩니다.

    고객 문의 UI는 디바이스 언어에 따라 한국어, 영어, 일어, 중국어 간체 및 번체 중 하나의 언어로 변경되며, 이외의 디바이스 언어일 경우 영어로 변경됩니다.

    대시보드와 연동하여 고객 문의 기능을 사용하려면 아래 코드를 사용해 주십시오.

    GamePot.showCSWebView();
    

    외부 링크 고객 문의

    외부 링크를 통해 로그인하지 않은 고객도 문의를 등록할 수 있도록 하려면 아래 코드를 사용해 주십시오.

    // url : 게임팟에서 발급받은 외부고객지원 URL
    
    GamePot.showWebView(string url);
    

    약관 및 정책 UI 호출 기능

    대시보드의 고객지원 메뉴에서 작성한 각종 약관, 정책을 UI로 호출할 수 있습니다.

    약관 및 정책 UI를 호출하려면 아래 코드를 사용하세요.

    • 이용약관

      GamePot.showTerms();
      
    • 개인정보처리방침

      GamePot.showPrivacy();
      
    • 환불정책

      GamePot.showRefund();
      

    약관 동의 기능 (GDPR 포함)

    제공되는 팝업 UI 기능을 사용하여 대시보드에서 작성한 각종 정책과 약관에 대한 동의를 수집할 수 있습니다. GDPR 정책에 대한 동의도 수집 가능합니다.

    약관 동의 자동 호출

    GAMEPOT Unity SDK 버전 v3.3.0 이상을 사용하는 경우 회원이 로그인할 때 자동으로 약관 동의 팝업이 표시됩니다.

    로그인할 때의 약관 동의 자동 호출 여부를 변경하려면 하려면 아래 코드를 사용해 주십시오.

    // Default Value는 true
    // 자동 팝업 시, MATERIAL_BLUE 테마로 적용 
    // false로 셋팅 시, 로그인 할 때 약관 동의 팝업이 노출되지 않습니다.
    GamePot.setAutoAgree(true);
    
    // MATERIAL_ORANGE 테마로 커스텀 적용 시
    NAgreeInfo bulider = new NAgreeInfo(); 
    bulider.theme = "MATERIAL_ORANGE";
    GamePot.setAutoAgreeBuilder(bulider);
    
    ...
    
    GamePot.login(NCommon.LoginType);
    
    ...
    

    수동 약관 동의 호출

    약관 동의 호출을 수동으로 수행하려면 아래 코드를 사용해 주십시오.

    • 테마 선택

      // 기본 테마
      BLUE
      GREEN
      
      // 개선 테마
      MATERIAL_RED,
      MATERIAL_BLUE,
      MATERIAL_CYAN,
      MATERIAL_ORANGE,
      MATERIAL_PURPLE,
      MATERIAL_DARKBLUE,
      MATERIAL_YELLOW,
      MATERIAL_GRAPE,
      MATERIAL_GRAY,
      MATERIAL_GREEN,
      MATERIAL_PEACH,
      
    • 호출 - 방식 1

       // 기본 호출(MATERIAL_BLUE 테마로 적용)
      GamePot.showAgreeDialog();
      
      // 그 외 테마로 적용 시
      NAgreeInfo info = new NAgreeInfo();
      info.theme = "MATERIAL_RED";
      GamePot.showAgreeDialog(info);
      // 약관에 동의한 경우
      public void onAgreeDialogSuccess(NAgreeResultInfo info)
      {
          // info.agree : 필수 약관을 모두 동의한 경우 true
          // info.agreePush : 일반 광고성 수신 동의를 체크한 경우 true, 그렇지 않으면 false
          // info.agreeNight : 야간 광고성 수신 동의를 체크한 경우 true, 그렇지 않으면 false
          // agreePush / agreeNight 값은 로그인 완료 후 setPushStatus api를 통해 한번에 설정해주십시오.
      }
      
      // 오류 발생
      public void onAgreeDialogFailure(NError error)
      {
          // error.message를 사용하여 메시지를 표시해 주십시오.
      }
      
    • 호출 - 방식 2

            // 기본 호출(BLUE 테마로 적용)
        showAgreeDialog(GamePotCallbackDelegate.CB_ShowAgree);
    
        // 그 외 테마로 적용시
        NAgreeInfo info = new NAgreeInfo();
        info.theme = "MATERIAL_RED";
        GamePot.showAgreeDialog(info,GamePotCallbackDelegate.CB_ShowAgree);
        
        GamePot.showAgreeDialog( info, (success, NAgreeResultInfo agreeInfo, NError error) => {
           if(success)
           {
                // 약관에 동의한 경우
                // info.agree : 필수 약관을 모두 동의한 경우 true
                 // info.agreePush : 일반 광고성 수신 동의를 체크한 경우 true, 그렇지 않으면 false
                 // info.agreeNight : 야간 광고성 수신 동의를 체크한 경우 true, 그렇지 않으면 false
                 // agreePush / agreeNight 값은 로그인 완료 후 setPushStatus api를 통해 한번에 설정해주십시오.
           }
           else
           {
                // 오류 발생
                // error.message를 사용하여 메시지를 표시해 주십시오.
           }
        });
    

    약관 동의 UI 테마 직접 구성

    SDK에서 제공하는 테마를 사용하는 대신 직접 구성한 약관 동의 UI 테마를 사용할 수 있습니다.

    약관 동의 UI 테마를 직접 구성하여 사용하려면 약관 동의를 호출하기 전에 아래 코드를 사용하여 테마를 구성해 주십시오.

    NAgreeInfo info = new NAgreeInfo();
    info.theme = "MATERIAL_RED";
    info.headerBackGradient = new string[] { "0xFF00050B", "0xFF0F1B21" };
    info.headerTitleColor = "0xFFFF0000";
    info.headerBottomColor = "0xFF00FF00";
    // 미사용시 ""로 설정
    info.headerTitle = "약관 동의";
    // Android : res/drawable 객체 아이디(파일명)
    // iOS : asset 객체 아이디(파일명)
    info.headerIconDrawable = "ic_stat_gamepot_agree";
    
    info.contentBackGradient = new string[] { "0xFFFF2432", "0xFF11FF32" };
    info.contentIconColor = "0xFF0429FF";
    info.contentCheckColor = "0xFFFFADB5";
    info.contentTitleColor = "0xFF98FFC6";
    info.contentShowColor = "0xFF98B3FF";
    // Android : res/drawable 객체 아이디(파일명)
    // iOS : asset 객체 아이디(파일명)
    info.contentIconDrawable = "ic_stat_gamepot_small";
    
    info.footerBackGradient = new string[] { "0xFFFFFFFF", "0xFF112432" };
    info.footerButtonGradient = new string[] { "0xFF1E3A57", "0xFFFFFFFF" };
    info.footerButtonOutlineColor = "0xFFFF171A";
    info.footerTitleColor = "0xFFFF00D5";
    info.footerTitle = "게임 시작하기";
    
    // 일반 광고성 수신동의 버튼 노출 여부
    info.showPush = true;
    
    // 야간 광고성 수신동의 버튼 노출 여부
    info.showNightPush = true;
    
    // 일반 광고성 수신동의 링크 버튼 설정(미사용 시, 입력 안함)
    info.pushDetailURL = "https://...";
    
    // 야간 광고성 수신동의 링크 버튼 설정(미사용 시, 입력 안함)
    info.nightPushDetailURL = "https://...";
    
    // 문구 변경
    info.allMessage = "모두 동의";
    info.termMessage = "필수) 이용약관";
    info.privacyMessage = "필수) 개인정보 취급 방침";
    info.pushMessage = "선택) 일반 푸시 수신 동의";
    info.nightPushMessage = "선택) 야간 푸시 수신 동의";
    
    
    //광고성 수신동의(일반/야간) 체크 후, 게임 시작 시 Toast 메시지(동의 시간) 노출 여부
    GamePot.setShowToastPushStatus(true);
    GamePot.showAgreeDialog(info);
    
    //약관팝업 내 연령제한 관련 옵션 활성화 여부 ( 기본 비활성화 / 활성화시 게임팟 대시보드 > 고객지원 > 설정> GDPR > 이메일 인증 항목 기입은 필수 )
    info.ageCertificationShow = false;  // true : 연령제한 활성화 false : 비활성화
    
    • 각 변수는 아래 이미지에 표시된 영역에 적용됩니다.
      • AgeView
        game-gamepotandroid_ko
      • EmailView
        gamepot_unity_15_1_ko
      • AgreeView
        gamepot_unity_15_2_ko

    GDPR 약관 체크리스트 기능

    대시보드에서 활성화한 GDPR 약관 항목을 리스트 형태로 가져오려면 아래 코드를 사용해 주십시오.

    //리턴되는 데이터포맷은 string[] 입니다.
    GamePot.getGDPRCheckedList();
    
    //리턴되는 각 파라미터는 대시보드의 다음 설정에 해당합니다.
    gdpr_privacy : 개인정보처리방침
    gdpr_term : 이용약관
    gdpr_gdpr : GDPR 이용약관
    gdpr_push_normal : 이벤트 푸시 수신동의
    gdpr_push_night : 야간 이벤트 푸시 수신동의 (한국만 해당)
    gdpr_adapp_custom : 개인 맞춤광고 보기에 대한 동의 (GDPR 적용 국가)
    gdpr_adapp_nocustom : 개인 맞춤이 아닌 광고 보기에 대한 동의 (GDPR 적용 국가)
    

    결제 취소 악용자 재결제 팝업 기능

    대시보드의 결제 취소 메뉴를 통해 구글 결제 취소 악용자를 자동으로 이용 정지 처리하도록 설정한 경우, 해당 악용자에게 SDK에서 제공하는 재결제 팝업 UI가 보여지며 UI를 통해 결제 취소한 아이템을 재결제하면 이용 정지가 자동으로 해제됩니다.

    기본적으로 제공하는 결제 취소 악용자 재결제 팝업 내 문구를 수정하여 사용하려면 아래 코드를 사용하세요.

    
    NVoidInfo info = new NVoidInfo();
    
    //테마 종류
    MATERIAL_RED,
    MATERIAL_BLUE,
    MATERIAL_CYAN,
    MATERIAL_ORANGE,
    MATERIAL_PURPLE,
    MATERIAL_DARKBLUE,
    MATERIAL_YELLOW,
    MATERIAL_GRAPE,
    MATERIAL_GRAY,
    MATERIAL_GREEN,
    MATERIAL_PEACH
    
    //테마 변경
    info.theme = "MATERIAL_ORANGE";
    
    // 문구 변경
    info.headerTitle = "Header Title Section!";
    
    info.descHTML = "descHTML Section!";
    
    info.listHeaderTitle = "listHeaderTitle Section!";
    
    info.footerTitle = "footerTitle Section!";
    
    GamePot.setVoidBuilder(info);
    

    원격 구성 기능

    대시보드의 게임 > 원격구성메뉴에 등록한 서버 매개변수 값을 가져올 수 있습니다. 매개변수 값을 가져와 SDK에서 사용하면 게임을 업데이트하지 않고 각 요소를 수정 및 제어할 수 있습니다.

    가져온 매개변수는 로그인 시점에 로드되며, 그 이후부터 호출할 수 있습니다.

    원격 구성 기능을 사용하려면 아래 코드를 사용하세요.

    //"test_01" : 매개변수 string
    var str_value = GamePot.getConfig("test_01");
    
    //대시보드에 추가한 모든 매개변수를 json string 형태로 가져옵니다.
    var json_value = GamePot.getConfigs();
    

    게임 로그 전송 기능

    게임 로그를 호출하여 대시보드의 게임 > 플레이어 메뉴에서 확인할 수 있습니다.

    게임 로그 전송 기능을 사용하려면 표를 참조하여 아래 코드에 예약어를 입력한 후 코드를 호출해 주십시오.

    • 예약어 및 코드
      예약어필수 여부타입설명최대 길이
      GamePotSendLogCharacter.NAME필수String캐릭터명128
      GamePotSendLogCharacter.LEVEL선택String레벨128
      GamePotSendLogCharacter.SERVER_ID선택String서버 ID128
      GamePotSendLogCharacter.PLAYER_ID선택String캐릭터 ID128
      GamePotSendLogCharacter.USERDATA선택StringETC128
      String name = "케릭터명";
      String level = "10";
      String serverid = "svn_001";
      String playerid = "283282191001";
      String userdata = "";
      
      GamePotSendLogCharacter characterLog = new GamePotSendLogCharacter();
      characterLog.put(GamePotSendLogCharacter.NAME, name);
      characterLog.put(GamePotSendLogCharacter.PLAYER_ID, playerid);
      characterLog.put(GamePotSendLogCharacter.LEVEL, level);
      characterLog.put(GamePotSendLogCharacter.SERVER_ID, serverid);
      characterLog.put(GamePotSendLogCharacter.USERDATA, userdata);
      
      Boolean result = GamePot.characterInfo(characterLog);
      
      // 결과값 true : 검증 성공. 로그가 GAMEPOT 서버로 전송됩니다.
      // 결과값 false : 검증 실패. logcat을 확인해 주십시오.
      

    AppStatus 확인

    현재 클라이언트의 AppStatus를 확인하려면 아래 코드를 사용해 주십시오. ( 로그인 전 점검 / 업데이트 상태 확인 )

    public enum ResultCheckAppStatus
    {
        SUCCESS,
        FAILED,
        NEED_UPDATE,
        MAINTENANCE
    }
    
    GamePot.checkAppStatus((NCommon.ResultCheckAppStatus resultState , NAppStatus appStatus, NError error) =>
    {
        switch(resultState)
        {
            case NCommon.ResultCheckAppStatus.SUCCESS:
            // 점검/업데이트 관련 설정이 안되어 있는 상태
            break;
    
            case NCommon.ResultCheckAppStatus.FAILED:
            // Handling error
            break;
    
            case NCommon.ResultCheckAppStatus.NEED_UPDATE:
            // 업데이트
            // Handling appStatus
             // 파라미터로 넘어온 status 정보를 토대로 팝업을 만들어 표시해야 합니다. 아래 두 가지 방식 중 한 가지를 선택하여 팝업을 구성해 주십시오.
            // case 1: 개발사에서 직접 UI를 구현한 인게임 팝업 사용
            // case 2: 아래 코드를 호출하여 SDK 자체 팝업 사용
            // GamePot.showAppStatusPopup(appStatus.ToJson());
            break;
    
            case NCommon.ResultCheckAppStatus.MAINTENANCE:
            // 점검
            // Handling appStatus
            // 파라미터로 넘어온 status 정보를 토대로 팝업을 만들어 표시해야 합니다. 아래 두 가지 방식 중 한 가지를 선택하여 팝업을 구성해 주십시오.
            // case 1: 개발사에서 직접 UI를 구현한 인게임 팝업 사용
            // case 2: 아래 코드를 호출하여 SDK 자체 팝업 사용
            // GamePot.showAppStatusPopup(appStatus.ToJson());
            break;
            
            default:
            break;
        }
    });
    

    setUserData설정

    로그인 후 해당 회원에 추가 정보를 넣고자 할때 사용해주세요.
    key 최대 갯수 50개 제한
    value 최대 길이 1024 제한
    해당 정보는 회원 상세 항목에서만 확인이 가능합니다.

    • 방식 1
    JSONNode _json = new JSONObject();
    _json.Add("appversion", "1.0.23");
    _json.Add("server", "s1");
    string json = _json.ToString();
    GamePot.setUserData(_json);
    
    // setUserData 성공
    public void onSetUserDataSuccess() {
    
    }
    
    // setUserData 실패
    public void onSetUserDataFailure(NError error) {
    
    }
    
    • 방식 2
    void setUserData(JSONNode userData, GamePotCallbackDelegate.CB_SetUserData cbSetUserData);
    
    JSONNode _json = new JSONObject();
    _json.Add("appversion", "1.0.23");
    _json.Add("server", "s1");
    string json = _json.ToString();
    
    GamePot.setUserData(_json, (success,  error) => {
        if(success)
        {
            // setUserData 성공
        }
       else
       {
            // setUserData 실패
        }
    });
    

    3rd Party SDK 연동

    GAMEPOT Unity SDK는 3rd Party SDK와의 연동을 지원합니다.

    3rd Party SDK 로그인 연동

    3rd Party SDK와 연동하여 로그인 기능을 사용하려면 표를 참조하여 아래 코드에 파라미터에 값을 입력한 후 코드를 사용해 주십시오.

    • 파라미터 및 코드

      • 자동 로그인을 지원하지 않으므로 매번 호출해야 합니다.
      파라미터명필수 여부타입설명
      userid필수String사용자 고유 ID
      값에 ":"(콜론) 사용 불가
      String userid = "memberid of 3rd party sdk";
      
      GamePot.loginByThirdPartySDK("userid");
      

    3rd Party SDK 결제 연동

    3rd Party SDK와 연동하여 결제 기능을 사용하려면 표를 참조하여 아래 코드에 파라미터에 값을 입력한 후 코드를 사용해 주십시오.

    • 파라미터 및 코드
      파라미터명필수 여부타입설명
      productid필수String대시보드에 등록된 아이템 ID
      transactionid필수String결제 영수증 번호(GPA-xxx-xxxx-xxxx)
      store필수결제 스토어(google, apple, one, galaxy)
      currency선택String통화(KRW,USD)
      price선택double결제 아이템 금액
      paymentid선택String결제 ID
      일반적으로 store_id와 동일
      uniqueid선택String개발사에서 사용하는 고유 ID
      String productId = "purchase_001";
      String transactionId = "GPA-xxx-xxxx-xxxx";
      String currency = "KRW";
      double price = 1200;
      String paymentId = "google";
      String uniqueId = "developer unique id";
      
      sendPurchaseByThirdPartySDK(string productId, string transactionId, string currency, double price, string store, string paymentId, string uniqueId);
      

    Firebase SDK 연동 시 주의 사항

    Firebase SDK와 정상적으로 연동하려면 최초 연동을 포함하여 패키지 명이 변경될 때마다 Assets > External Dependency Manager > Android Resolver > Settings 메뉴에서 Patch mainTemplate.gradle 옵션을 선택 해제한 후 리졸브를 진행해야 합니다.

    Firebase 라이브러리가 Unity 에디터에 입력된 패키지 명으로 리패키징을 진행할 때 패키지 명이 올바르지 않은 경우 앱 설치가 되지 않습니다. 이 경우 패키지 명을 올바르게 수정해야 합니다.

    패키지 명을 확인 및 수정하려면 아래 코드를 사용해 주십시오.

    // 리졸브 작업 이후 com.google.firebase.firebase-common-[Firebase 라이브러리 버전].aar 내
    AndroidManifest.xml에서 android:authorities 값이 버전에 맞는 패키지명 형식([패키지명].firebaseinitprovider)으로 되어 있는지 확인해 주십시오.
    
    <provider>
                android:name="com.google.firebase.provider.FirebaseInitProvider"
                android:exported="false"
                android:authorities=“[앱 패키지명].firebaseinitprovider"
    

    Native 환경에서 프로젝트 수정

    GAMEPOT Unity SDK 사용 중 Native 환경에서 프로젝트를 수정해야 할 경우, MainActivity인 io.gamepot.unity.plugin.GamePotSDKActivity의 Class를 상속받아 별도 처리하는 MainActivity를 생성해야 합니다.

    GAMEPOT Unity SDK를 사용하여 Native 환경에서 프로젝트를 수정하는 방법은 다음과 같습니다. 예제 파일을 기준으로 설명합니다.

    1. 다운로드한 예제 프로젝트의 /app/libs 경로에 있는 예제 브릿지 파일을 프로젝트의 gamepot-bridge.aar 파일 삭제해 주십시오
    2. 현재 프로젝트의 gamepot-bridge.aar 파일를 다운로드한 예제 프로젝트의 /app/libs 경로에 추가해 주십시오
    3. 빌드를 수행하여 후 생성된 .aar 파일을 프로젝트 경로의 /Android/libs 경로에 추가해 주십시오.
    4. 아래 코드를 사용하여 MainActivity가 교체되도록 AndroidManifest.xml를 수정해 주십시오.
      기존 :
              <activity android:theme="@style/UnityThemeSelector"
                  android:name="io.gamepot.unity.plugin.GamePotSDKActivity"
      
      수정 : 
                  android:name="io.gamepot.unity.plugin.Game.GameActivity"   //예제 기준: 빌드시 상속받은 액티비티로 변경
      

    이 문서가 도움이 되었습니까?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.