안드로이드 SDK
    • PDF

    안드로이드 SDK

    • PDF

    기사 요약

    Classic/VPC 환경에서 이용 가능합니다.

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

    요구 사양

    안드로이드 운영 체제용 GAMEPOT SDK를 사용하기 위한 요구 사양은 다음과 같습니다.

    • 최소 사양: API 19(Kitkat) 이상, gradle 3.3.3 또는 3.4.3. 이상
    • 개발 환경: Android Studio

    SDK 설치 및 환경 구성

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

    SDK 설치

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

    1. 관리자 계정으로 대시보드에 로그인해 주십시오.
    2. SDK 다운로드 > Android 메뉴를 차례대로 클릭한 후 다운로드를 클릭해 주십시오.
    3. Android Studio를 실행한 후 게임 프로젝트를 열어 주십시오.
    4. 다운로드한 AOS SDK 파일의 압축을 해제한 후 libs 폴더 내의 모든 파일을 게임 프로젝트의 libs 폴더로 복사해 주십시오.

    build.gradle 수정

    build.gradle 파일을 수정하는 방법은 다음과 같습니다.

    1. 아래 코드를 사용하여 프로젝트 root 폴더의 build.gradle 파일을 수정해 주십시오.

      buildscript {
      
          repositories {
              ...
              google()
              jcenter()
              maven { url "https://jitpack.io" }
              maven { url "https://jcenter.bintray.com" }
          }
          dependencies {
             ...
              classpath 'com.google.gms:google-services:4.2.0'
          }
      }
      
      allprojects {
          repositories {
              ...
              google()
              jcenter()
              maven { url "https://jitpack.io" }
              maven { url "https://jcenter.bintray.com" }
          }
      }
      
    2. 표를 참조하여 아래 코드의 값을 수정한 후 코드를 사용하여 app 폴더의 build.gradle 파일을 수정해 주십시오.
      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_schemefb[페이스북에서 발급받은 앱 ID] ex) fb101010
      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 {
              ...
              // GamePot [START]
              resValue "string", "gamepot_project_id", "[projectId]" // required
              resValue "string", "gamepot_store", "[storeId]" // required
              resValue "string", "gamepot_payment", "[storeId]" // optional
              resValue "string", "gamepot_app_title","@string/app_name" // required (fcm)
              resValue "string", "gamepot_push_default_channel","Default" // required (fcm)
              resValue "string", "facebook_app_id", "[Facebook ID]" // facebook
              resValue "string", "fb_login_protocol_scheme", "fb[Facebook ID]" // (facebook)
              resValue "string", "facebook_client_token", "[페이스북 클라이언트 토큰]" // 페이스북 콘솔 > 앱 >  설정 > 고급 설정 > 클라이언트 토큰
              // resValue "string", "gamepot_elsa_projectid", "" // (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
              // GamePot [END]
          }
      
          packagingOptions {
              exclude 'META-INF/proguard/androidx-annotations.pro'
          }
      }
      
      repositories {
          flatDir {
              dirs 'libs'
          }
      }
      
      dependencies {
       implementation 'androidx.appcompat:appcompat:1.2.0'
       implementation 'androidx.multidex:multidex:2.0.1'
      
       // GamePot common [START]
       implementation(name: 'gamepot-common', ext: 'aar')
       implementation('io.socket:socket.io-client:1.0.0') {
           exclude group: 'org.json', module: 'json'
       }
       implementation('com.github.ihsanbal:LoggingInterceptor:3.0.0') {
           exclude group: 'org.json', module: 'json'
       }
       implementation "com.github.nisrulz:easydeviceinfo:2.4.1"
       implementation 'pub.devrel:easypermissions:1.3.0'
       implementation 'com.android.installreferrer:installreferrer:1.0'
       implementation 'com.google.code.gson:gson:2.8.2'
       implementation 'com.jakewharton.timber:timber:4.7.0'
       implementation 'com.squareup.okhttp3:okhttp:4.9.1'
       implementation 'com.apollographql.apollo:apollo-runtime:1.0.0-alpha2'
       implementation 'com.apollographql.apollo:apollo-android-support:1.0.0-alpha2'
       implementation 'com.android.billingclient:billing:5.0.0'
       implementation 'com.google.firebase:firebase-crashlytics-buildtools:2.9.1'
       implementation 'com.github.bumptech.glide:glide:3.7.0'
       implementation 'com.romandanylyk:pageindicatorview:1.0.3'
       implementation 'androidx.sqlite:sqlite-framework:2.0.1'
       implementation 'com.cookpad.puree:puree:4.1.6'
       implementation 'com.google.firebase:firebase-core:18.0.1'
       implementation 'com.google.firebase:firebase-messaging:23.1.2'
       implementation 'com.google.firebase:firebase-iid:21.1.0'
       implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
       // GamePot common [END]
      
       implementation(name: 'gamepot-channel-base', ext: 'aar')
       // GamePot facebook [START]
       implementation(name: 'gamepot-channel-facebook', ext: 'aar')
       implementation 'com.facebook.android:facebook-android-sdk:13.2.0'
       // GamePot facebook [END]
      
       // GamePot google sigin [START]
       implementation(name: 'gamepot-channel-google-signin', ext: 'aar')
       implementation "com.google.android.gms:play-services-auth:19.0.0"
       // GamePot google sigin [END]
      }
      
      // ADD THIS AT THE BOTTOM
      apply plugin: 'com.google.gms.google-services'
      
    3. Google Developer Center에서 획득한 google-service.json 파일을 app 폴더 하위에 복사해 주십시오.

    4. Android Studio를 새로 고침해 주십시오.

    새로 고침에 실패했을 경우

    새로 고침을 시도했을 때 안내 메시지가 표시되면서 실패하는 경우 아래와 같이 해결해 주십시오.

    • 메시지: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'. It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html
      설명: compile 설정은 더 이상 지원되지 않으므로 프로젝트 코드에서 compile이 입력된 부분을 implementation으로 수정해 주십시오.

    • 메시지: No matching client found for package name '[packagename]'
      설명: 앱의 패키지명과 google-service.json 파일에 선언된 패키지 명이 서로 일치하도록 수정해 주십시오.

    AndroidManifest.xml 설정

    AndroidManifest.xml을 설정하여 일반적으로 게임에 사용되는 설정 값을 추가하려면 아래 코드를 사용해 주십시오.

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">
    
        <!--태블릿 등 전화 기능이 없는 기기에서도 스토어에서 다운로드할 수 있도록 설정-->
        <uses-feature android:name="android.hardware.telephony" android:required="false" />
        <!--마이크가 없는 기기에서도 음성 채팅이 지원되는 게임을 스토어에서 다운로드할 수 있도록 설정-->
        <uses-feature android:name="android.hardware.microphone" android:required="false" />
    
        <!--allowBackup을 반드시 false로 설정해 주십시오. false로 설정하면 게임이 재설치되었을 때 자동으로 shared preference 값을 복구하지 않습니다.-->
        <application
            android:name="androidx.multidex.MultiDexApplication"
            android:allowBackup="false"
            tools:replace="android:allowBackup">
    
            <!--resizeableActivity: 앱 분할 화면 보기 기능 비활성화-->
            <activity
                android:resizeableActivity="false">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <!--갤럭시 S8과 같은 스크린 대응-->
            <meta-data android:name="android.max_aspect" android:value="2.1" />
    
        </application>
    </manifest>
    

    푸시 알림 아이콘 설정

    푸시 메시지를 수신했을 때 알림 바에 표시할 아이콘을 설정할 수 있습니다. 별도로 설정하지 않을 경우 SDK에 포함된 기본 이미지를 사용하며, 게임에 맞는 아이콘을 직접 설정할 수 있습니다.
    Android Asset Studio를 이용해 제작하면 자동으로 폴더별로 이미지가 제작되어 편리합니다.

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

    1. 아래와 같이 프로젝트 경로에 res/drawable 폴더를 각각 생성한 후 각 크기별 이미지 파일을 추가해 주십시오.
      폴더명크기
      res/drawable-mdpi/24x24
      res/drawable-hdpi/36x36
      res/drawable-xhdpi/48x48
      res/drawable-xxhdpi/72x72
      res/drawable-xxxhdpi/96x96
    2. 이미지 파일 이름을 ic_stat_gamepot_small로 변경해 주십시오.

    초기화

    초기화를 수행하려면 MainActivity.java 파일에서 아래 코드를 사용해 주십시오.

    import io.gamepot.common.GamePot;
    import io.gamepot.common.GamePotLocale;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // GAMEPOT 초기화. context에 반드시 application context를 입력해 주십시오.
        // setup API는 다른 API에 앞서 가장 먼저 호출해 주십시오.
        GamePot.getInstance().setup(getApplicationContext());
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        GamePot.getInstance().onActivityResult(requestCode, resultCode, data);
    }
    
    @Override
    protected void onStart() {
        super.onStart();
        GamePotChat.getInstance().start();
        GamePot.getInstance().onStart(this);
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        GamePotChat.getInstance().stop();
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        GamePot.getInstance().onDestroy();
    }
    

    로그인 관련 기능

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

    사용 전 설정

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

    구글 Firebase 콘솔 설정

    로그인 기능을 사용하기 위해 구글 Firebase 콘솔을 설정하려면 APK를 구성할 때 사용한 Keystore 파일의 SHA-1 값을 Firebase 콘솔에 추가해 주십시오.

    페이스북 콘솔 설정

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

    1. Facebook for Developers 콘솔에서 앱 유형을 None 또는 Consumer 또는 Gaming으로 선택한 후 앱을 생성해 주십시오.
    2. APK를 구성할 때 사용한 Keystore의 키 해시값을 Facebook for Developers 콘솔에 추가해 주십시오.

    MainActivity.java 설정

    로그인 관련 코드를 선언하여 MainActivity.java 파일을 설정하려면 아래 코드를 사용해 주십시오.

    import io.gamepot.channel.GamePotChannel;
    import io.gamepot.channel.GamePotChannelType;
    import io.gamepot.channel.facebook.GamePotFacebook;
    import io.gamepot.channel.google.signin.GamePotGoogleSignin;
    
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // setup API를 가장 먼저 호출해 주십시오.
            GamePot.getInstance().setup(getApplicationContext());
    
            ...
            // 로그인을 사용하려는 채널별로 addChannel을 호출해 주십시오. Guest 방식은 기본으로 포함됩니다.
            // Google Login 초기화
            GamePotChannel.getInstance().addChannel(this, GamePotChannelType.GOOGLE, new GamePotGoogleSignin());
            // Facebook Login 초기화
            GamePotChannel.getInstance().addChannel(this, GamePotChannelType.FACEBOOK, new GamePotFacebook());
            ...
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            GamePotChannel.getInstance().onActivityResult(this, requestCode, resultCode, data);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            GamePotChannel.getInstance().onDestroy();
        }
    }
    

    로그인 기능

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

    import io.gamepot.channel.GamePotChannel;
    import io.gamepot.channel.GamePotChannelListener;
    import io.gamepot.channel.GamePotChannelType;
    import io.gamepot.channel.GamePotUserInfo;
    import io.gamepot.common.GamePotError;
    
    // 로그인 타입 정의
    // GamePotChannelType.GOOGLE: 구글
    // GamePotChannelType.FACEBOOK: 페이스북
    // GamePotChannelType.NAVER: 네이버
    // GamePotChannelType.LINE: 라인
    // GamePotChannelType.TWITTER: 트위터
    // GamePotChannelType.APPLE: 애플 
    // GamePotChannelType.GUEST: 게스트
    
    // 구글 로그인 버튼을 눌렀을 때 호출
    GamePotChannel.getInstance().login(this, GamePotChannelType.GOOGLE, new GamePotChannelListener<GamePotUserInfo>() {
        @Override
        public void onCancel() {
            // 사용자가 로그인을 취소한 상황
        }
    
        @Override
        public void onSuccess(GamePotUserInfo userinfo) {
            // 로그인 성공. 게임의 로직에 맞게 처리해 주십시오.
            // userinfo.getMemberid() : 회원 고유 아이디
        }
    
        @Override
        public void onFailure(GamePotError error) {
            // 로그인 실패. error.getMessage()를 사용하여 오류 메시지를 표시해 주십시오.
        }
    });
    

    회원 고유 아이디 획득

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

    GamePot.getInstance().getMemberId();
    

    계정별 로그인 기능 사용

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

    • 네이버 로그인
      • build.gradle 설정
      android {
          defaultConfig {
              ...
              resValue "string", "gamepot_naver_clientid", "xxxxxxxx" // Naver 개발자 콘솔에서 획득
              resValue "string", "gamepot_naver_secretid", "xxx" // Naver 개발자 콘솔에서 획득
          }
      }
      
      dependencies {
        ...
        compile(name: 'gamepot-channel-naver', ext: 'aar')
        ...
      }
      
      • MainActivity.java 설정
      import io.gamepot.channel.GamePotChannel;
      import io.gamepot.channel.GamePotChannelType;
      import io.gamepot.channel.naver.GamePotNaver;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
              ...
              GamePotChannel.getInstance().addChannel(this, GamePotChannelType.NAVER, new GamePotNaver());
      }
      
      • 로그인
      GamePotChannel.getInstance().login(this, GamePotChannelType.NAVER, new GamePotAppStatusChannelListener<GamePotUserInfo>() {
        ...
      });
      


    • 라인 로그인
      • build.gradle 설정
      android {
          defaultConfig {
              ...
              resValue "string", "gamepot_line_channelid","00000000" // Line 개발자 콘솔에서 획득
          }
      }
      
      dependencies {
        ...
        compile(name: 'gamepot-channel-line', ext: 'aar')
        compile(name: 'line-sdk-4.0.10', ext: 'aar')
        ...
      }
      
      • MainActivity.java 설정
      import io.gamepot.channel.GamePotChannel;
      import io.gamepot.channel.GamePotChannelType;
      import io.gamepot.channel.line.GamePotLine;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
              ...
              GamePotChannel.getInstance().addChannel(this, GamePotChannelType.LINE, new GamePotLine());
      }
      
      • 로그인
      GamePotChannel.getInstance().login(this, GamePotChannelType.LINE, new GamePotAppStatusChannelListener<GamePotUserInfo>() {
        ...
      });
      



    • 애플 웹 로그인
      • build.gradle 설정
      dependencies {
        ...
        compile(name: 'gamepot-channel-apple-signin', ext: 'aar')
        ...
      }
      
      • MainActivity.java 설정
      import io.gamepot.channel.GamePotChannel;
      import io.gamepot.channel.GamePotChannelType;
      import io.gamepot.channel.apple.signin.GamePotAppleSignin;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
              ...
              GamePotChannel.getInstance().addChannel(this, GamePotChannelType.APPLE, new GamePotAppleSignin());
      }
      
      • 로그인
      GamePotChannel.getInstance().login(this, GamePotChannelType.APPLE, new GamePotAppStatusChannelListener<GamePotUserInfo>() {
        ...
      });
      

    자동 로그인 기능

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

    import io.gamepot.channel.GamePotChannel;
    import io.gamepot.channel.GamePotChannelListener;
    import io.gamepot.channel.GamePotChannelType;
    import io.gamepot.channel.GamePotUserInfo;
    import io.gamepot.common.GamePotError;
    
    // 사용자가 마지막에 로그인했던 정보를 전달하는 API
    final GamePotChannelType lastLoginType = GamePotChannel.getInstance().getLastLoginType();
    
    if(lastLoginType != GamePotChannelType.NONE) {
        // 마지막에 로그인했던 로그인 타입으로 로그인하는 방식입니다.
        GamePotChannel.getInstance().login(this, lastLoginType, new GamePotChannelListener<GamePotUserInfo>() {
            @Override
            public void onCancel() {
                // 사용자가 로그인을 취소한 상황
            }
    
            @Override
            public void onSuccess(GamePotUserInfo info) {
                // 자동 로그인 완료. 게임 로직에 맞게 처리해 주십시오.
            }
    
            @Override
            public void onFailure(GamePotError error) {
                // 자동 로그인 실패. error.getMessage()를 이용해서 오류 메시지를 표시해 주십시오.
            }
        });
    }
    else
    {
        // 처음 게임을 실행했거나 로그아웃한 상태. 로그인을 할 수 있는 로그인 화면으로 이동해 주십시오.
    }
    

    로그아웃 기능

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

    import io.gamepot.channel.GamePotChannel;
    import io.gamepot.common.GamePotCommonListener;
    import io.gamepot.common.GamePotError;
    
    GamePotChannel.getInstance().logout(this, new GamePotCommonListener() {
        @Override
        public void onSuccess() {
            // 로그아웃 완료. 초기 화면으로 이동해 주십시오.
        }
    
        @Override
        public void onFailure(GamePotError error) {
            // 로그아웃 실패. error.getMessage()를 이용해서 오류 메시지를 표시해 주십시오.
        }
    });
    

    회원 탈퇴 기능

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

    import io.gamepot.channel.GamePotChannel;
    import io.gamepot.common.GamePotCommonListener;
    import io.gamepot.common.GamePotError;
    
    GamePotChannel.getInstance().deleteMember(this, new GamePotCommonListener() {
        @Override
        public void onSuccess() {
            // 회원 탈퇴 성공. 초기화면으로 이동해 주십시오.
        }
    
        @Override
        public void onFailure(GamePotError error) {
            // 회원 탈퇴 실패. error.getMessage()를 이용해서 오류 메시지를 표시해 주십시오.
        }
    });
    

    로그인 검증 기능

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

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

    외부 계정 연동

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

    계정 연동 기능

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

    import io.gamepot.channel.GamePotChannel;
    import io.gamepot.channel.GamePotChannelListener;
    import io.gamepot.channel.GamePotChannelType;
    import io.gamepot.channel.GamePotUserInfo;
    import io.gamepot.common.GamePotError;
    
    // 구글 계정에 연동
    // GamePotChannelType.GOOGLE
    // 페이스북 계정에 연동
    // GamePotChannelType.FACEBOOK
    // 네이버 계정에 연동
    // GamePotChannelType.NAVER
    // 라인 계정에 연동
    // GamePotChannelType.LINE
    // 트위터 계정에 연동
    // GamePotChannelType.TWITTER
    // 애플 계정에 연동
    // GamePotChannelType.APPLE
    
    GamePotChannel.getInstance().createLinking(this, GamePotChannelType.GOOGLE, new GamePotChannelListener<GamePotUserInfo>() {
        @Override
        public void onSuccess(GamePotUserInfo userInfo) {
            // 연동 완료. 연동 결과에 대한 메시지를 표시해 주십시오. (예: "계정 연동에 성공했습니다.")
        }
    
        @Override
        public void onCancel() {
            // 사용자가 연동 과정을 취소
        }
    
        @Override
        public void onFailure(GamePotError error) {
            // 연동 실패. error.getMessage()를 이용해서 오류 메시지를 표시해 주십시오.
        }
    });
    

    연동 리스트 확인 기능

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

    import io.gamepot.channel.GamePotChannel;
    import java.util.ArrayList;
    
    // 타입 정의
    // GamePotChannelType.GOOGLE
    // GamePotChannelType.FACEBOOK
    // GamePotChannelType.NAVER
    // GamePotChannelType.LINE
    // GamePotChannelType.TWITTER
    // GamePotChannelType.APPLE
    // 타입에 따른 연동 결과를 반환합니다.
    boolean isLinked = GamePotChannel.getInstance().isLinked(GamePotChannelType.GOOGLE);
    
    // 연동되어 있는 모든 타입에 대해 JSON 형태로 반환합니다.
    // 만약 구글과 페이스북에 연동된 경우 아래와 같이 반환됩니다.
    // [{“provider”:”google”},{“provider”:”facebook”}]
    JSONArray linking = GamePotChannel.getInstance().getLinkedList();
    

    연동 해제 기능

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

    import io.gamepot.channel.GamePotChannel;
    import io.gamepot.channel.GamePotChannelType;
    import io.gamepot.common.GamePotCommonListener;
    import io.gamepot.common.GamePotError;
    
    GamePotChannel.getInstance().deleteLinking(this, GamePotChannelType.GOOGLE, new GamePotCommonListener() {
        @Override
        public void onSuccess() {
            // 연동 해제 완료. 연동 결과에 대한 문구를 노출시켜 주세요. (예: 계정 연동을 해지했습니다.)
        }
    
        @Override
        public void onFailure(GamePotError error) {
            // 연동 해제 실패. error.getMessage()를 이용해서 오류 메시지를 보여주세요.
        }
    });
    

    결제 기능

    게임팟 결제는 소모성 인앱 상품 타입만을 지원하고 있으며 원스토어 인앱 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 ( 구글 스토어 빌드에는 포함되지 않도록 조치 해주세요.)
    

    인앱 구매를 위한 결제 기능을 사용할 수 있습니다. 결제의 결과 값은 Listener 형태로 구현됩니다.

    원스토어의 경우 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>
    

    MainActivity.java 설정

    결제 기능을 사용하기 위해 MainActivity.java 파일을 설정하려면 아래 코드를 사용해 주십시오.

    import io.gamepot.common.GamePot;
    import io.gamepot.common.GamePotPurchaseInfo;
    import io.gamepot.common.GamePotPurchaseListener;
    import io.gamepot.common.GamePotError;
    
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // setup API는 가장 먼저 호출해 주십시오.
            GamePot.getInstance().setup(getApplicationContext());
    
            ...
            GamePot.getInstance().setPurchaseListener(new GamePotPurchaseListener<GamePotPurchaseInfo>() {
                @Override
                public void onSuccess(GamePotPurchaseInfo info) {
                    // 결제 성공. 아이템 지급 요청은 웹훅에 설정된 주소로 server to server로 요청합니다.
                    // 여기에서는 결과에 대한 처리만 수행하고, 실제 아이템은 지급하지 마십시오.
                }
    
                @Override
                public void onFailure(GamePotError error) {
                    // 결제 실패. error.getMessage()를 이용해서 오류 메시지를 표시해 주십시오.
                }
    
                @Override
                public void onCancel() {
                    // 결제 진행 중 사용자가 취소한 경우
                }
            });
            ...
        }
    }
    

    결제 시도 기능

    하나의 결제 API로 구글 플레이스토어와 원스토어 모두에서 결제 시도 기능을 사용할 수 있습니다.

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

    • 일반 결제 시도
    import io.gamepot.common.GamePot;
    
    // productId : 스토어에 등록된 상품 ID
    GamePot.getInstance().purchase("product id");
    


    • 결제 시도 및 영수증 번호를 별도로 관리
    import io.gamepot.common.GamePot;
    
    // productId : 스토어에 등록된 상품 ID
    // uniqueId  : 별도로 관리하는 영수증 번호
    GamePot.getInstance().purchase("product id", "uniqueId");
    


    • 결제 시도, 영수증 번호를 별도로 관리, 캐릭터 정보를 웹훅으로 전달
      원스토어 버전의 경우 uniqueId+serverId+playerId+etc 한 길이가 85byte 미만이 되어야 결제가 가능합니다.
    import io.gamepot.common.GamePot;
    
    // productId : 스토어에 등록된 상품ID
    // uniqueId  : 별도로 관리하는 영수증 번호
    // serverId  : 결제를 진행한 캐릭터의 서버 ID
    // playerId  : 결제를 진행한 캐릭터의 캐릭터 ID
    // etc       : 결제를 진행한 캐릭터의 기타 정보
    GamePot.getInstance().purchase("product id","uniqueId","serverId","playerId","etc");
    

    결제 아이템 리스트 획득 기능

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

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

    import io.gamepot.common.GamePot;
    
    //[case1]
    GamePotPurchaseDetailList details = GamePot.getInstance().getPurchaseDetailList();
    
    //[case2]
    GamePot.getInstance().getPurchaseDetailListAsync(new GamePotListener<GamePotPurchaseDetailList>() {
        @Override
        public void onSuccess(GamePotPurchaseDetailList data) {
            //data : In-app information
        }
    
        @Override
        public void onFailure(GamePotError error) {
            // api error
        }
    });
    
    

    결제 아이템 지급 기능

    결제 스토어의 영수증 내역과 대조하여 검증을 모두 완료한 경우에만 개발사 서버에 지급 요청을 전송하도록 설정할 수 있습니다.

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

    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. ./AndroidManifest.xml 파일에 레벨에 name을 제거 합니다.

       <application
           android:allowBackup="false"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:roundIcon="@mipmap/ic_launcher_round"
           tools:replace="android:allowBackup" >
    
    1. build.gradle 파일에 아래와 같이 설정 합니다.
    resValue "string", "gamepot_store", "google"
    resValue "string", "gamepot_payment", "mycard" // 스토어가 google인 경우만 동작합니다.
    
    1. ../libs 폴더 내에 gamepot-billing-mycard.aar 이 포함 되어 있는지 확인 합니다.

    2. build.gradle 파일 내에 빌드시 라이브러리가 포함될 수 있도록 설정되어 있는지 확인 합니다.

    ex) implementation(name: 'gamepot-billing-mycard', ext: 'aar') 이 포함 되어 있는지 확인 합니다.

    외부 결제 기능

    원스토어 기준 : 원스토어에서 지원하는 인앱 SDK를 사용하지 않는 결제 모듈과 연동하려면 먼저 외부 결제 서비스 연동을 참조하여 설정을 완료한 후 아래의 코드를 사용해 주십시오.

    • 결제 시도
    import io.gamepot.common.GamePot;
    
    // activity : 현재 액티비티
    // product id : 대시보드에 등록한 결제 아이디
    GamePot.getInstance().purchaseThirdPayments(activity, product id);
    
    • 결제 아이템 목록 획득
    import io.gamepot.common.GamePot;
    
    GamePotPurchaseDetailList thirdPaymentsDetailList = GamePot.getInstance().getPurchaseThirdPaymentsDetailList();
    

    SDK 자체 제공 로그인 UI

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

    SDK 자체 제공 로그인 UI 사용

    MainActivity.java 파일을 설정하여 자체 제공 로그인 UI를 사용하려면 아래 코드를 사용해 주십시오.

    import io.gamepot.channel.GamePotChannel;
    import io.gamepot.channel.GamePotChannelListener;
    import io.gamepot.channel.GamePotAppStatusChannelListener;
    import io.gamepot.channel.GamePotChannelType;
    import io.gamepot.channel.GamePotChannelLoginBuilder;
    import io.gamepot.channel.GamePotUserInfo;
    import io.gamepot.common.GamePotError;
    
    String[] channelList = {"google", "facebook", "naver", "line", "twitter", "apple", "guest"};
    GamePotChannelLoginBuilder builder = new GamePotChannelLoginBuilder(channelList);
    
    // 로그인 버튼을 눌렀을 때 호출
    GamePotChannel.getInstance().showLoginWithUI( this, builder, new GamePotAppStatusChannelLoginDialogListener<GamePotUserInfo>() {
        @Override
        public void onExit() {
            // X 버튼 클릭시 처리 
        }
    
        @Override
        public void onNeedUpdate(GamePotAppStatus status) {
            // TODO: 강제 업데이트가 필요한 경우. 아래 API를 호출하면 SDK 자체에서 팝업을 띄울 수 있습니다.
            // TODO: Customizing을 하고자 하는 경우 아래 API를 호출하지 말고 Customizing을 하면 됩니다.
            GamePot.getInstance().showAppStatusPopup(this, status, new GamePotAppCloseListener() {
                @Override
                public void onClose() {
                    // TODO: showAppStatusPopup API를 호출하신 경우 앱을 종료해야 하는 상황에 호출됩니다.
                    // TODO: 종료 프로세스를 처리해주세요.
                    MainActivity.this.finish();
                }
    
                @Override
                public void onNext(Object obj) {
                    // TODO : Dashboard 업데이트 설정에서 권장 설정 시 "다음에 하기" 버튼이 노출 됩니다.
                    // 해당 버튼을 사용자가 선택 시 호출 됩니다.
                    // TODO : obj 정보를 이용하여 로그인 완료 시와 동일하게 처리해주세요.
                    // GamePotUserInfo userInfo = (GamePotUserInfo)obj;
                }
            });
        }
    
        @Override
        public void onMainternance(GamePotAppStatus status) {
            // TODO: 점검 중인 경우. 아래 API를 호출하면 SDK 자체에서 팝업을 띄울 수 있습니다.
            // TODO: Customizing을 하고자 하는 경우 아래 API를 호출하지 말고 Customizing을 하면 됩니다.
            GamePot.getInstance().showAppStatusPopup(this, status, new GamePotAppCloseListener() {
                @Override
                public void onClose() {
                    // TODO: showAppStatusPopup API를 호출하신 경우 앱을 종료해야 하는 상황에 호출됩니다.
                    // TODO: 종료 프로세스를 처리해주세요.
                    MainActivity.this.finish();
                }
            });
        }
    
        @Override
        public void onCancel() {
            // 사용자가 로그인을 취소한 상황.
        }
    
        @Override
        public void onSuccess(GamePotUserInfo userinfo) {
            // 로그인 완료. 게임 로직에 맞게 처리해주세요.
            // userinfo.getMemberid() : 회원 고유 아이디
        }
    
        @Override
        public void onFailure(GamePotError error) {
            // 로그인 실패. error.getMessage()를 이용해서 오류 메시지를 보여주세요.
        }
    });
    

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

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

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

    1. 아래와 같이 rew/drawable 폴더를 각각 생성한 후 각 크기별 이미지 파일을 추가해 주십시오.
      폴더명크기
      res/drawable-mdpi/24x24
      res/drawable-hdpi/36x36
      res/drawable-xhdpi/48x48
      res/drawable-xxhdpi/72x72
      res/drawable-xxxhdpi/96x96
    2. 이미지 파일 이름을 ic_stat_gamepot_small로 변경해 주십시오.

    쿠폰 기능

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

    import io.gamepot.common.GamePot;
    import io.gamepot.common.GamePotError;
    import io.gamepot.common.GamePotListener;
    
    GamePot.getInstance().coupon(/*사용자에게 입력받은 쿠폰*/, new GamePotListener<String>() {
        @Override
        public void onSuccess(String message) {
            // 쿠폰 사용 성공. message값을 팝업으로 표시해 주십시오.
        }
    
        @Override
        public void onFailure(GamePotError error) {
            // 쿠폰 사용 실패. error.getMessage()를 이용해서 오류 메시지를 표시해 주십시오.
        }
    });
    

    아이템 지급

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

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

    푸시 기능

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

    푸시 활성화 및 비활성화

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

    import io.gamepot.common.GamePot;
    import io.gamepot.common.GamePotError;
    import io.gamepot.common.GamePotCommonListener;
    
    // 푸시 수신 On/Off
    GamePot.getInstance().setPushEnable(/*true or false*/, new GamePotCommonListener() {
        @Override
        public void onSuccess() {
        }
    
        @Override
        public void onFailure(GamePotError error) {
        }
    });
    
    // 야간 푸시 수신 On/Off
    GamePot.getInstance().setNightPushEnable(/*true or false*/, new GamePotCommonListener() {
        @Override
        public void onSuccess() {
        }
    
        @Override
        public void onFailure(GamePotError error) {
        }
    });
    
    // 푸시, 야간 푸시를 한번에 설정
    // 로그인 전에 푸시, 야간 푸시 허용 여부를 확인하는 게임인 경우 로그인 후에 아래 코드로 반드시 호출해 주십시오.
    GamePot.getInstance().setPushEnable(/*true or false*/, /*true or false*/, true, new GamePotCommonListener() {
        @Override
        public void onSuccess() {
        }
    
        @Override
        public void onFailure(GamePotError error) {
        }
    });
    

    푸시 상태 확인

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

    import io.gamepot.common.GamePot;
    import org.json.JSONObject;
    
    // enable: 전체 푸시
    // night: 야간 푸시
    // {"enable":true, "night":true}
    JSONObject status = GamePot.getInstance().getPushStatus();
    

    로컬 푸시 기능

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

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

    String date = "2018-09-27 20:00:00";
    GamePotLocalPushBuilder builder = new GamePotLocalPushBuilder(getActivity())
                            .setTitle("로컬 푸시 테스트")
                            .setMessage("로컬 푸시 메시지입니다. " + date)
                            .setDateString(date).build();
    int pushid = GamePot.getInstance().sendLocalPush(builder);
    /* pushid의 return 값은 개발사에서 관리 */
    

    등록한 로컬 푸시 취소

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

    GamePot.getInstance().cancelLocalPush(/*현재 액티비티*/, /*푸시 등록 시 얻은 pushid*/);
    

    공지사항 이미지 표시 기능

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

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

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

    /* showTodayButton : '오늘 하루 보지 않기' 버튼 노출 여부. false인 경우 무조건 노출 */
    boolean showTodayButton = true;
    
    GamePot.getInstance().showNotice(/*현재 액티비티*/, showTodayButton, new GamePotNoticeDialog.onSchemeListener() {
        @Override
        public void onReceive(String scheme) {
            // scheme 처리
        }
    });
    

    특정한 분류의 공지사항 이미지만 표시

    특정한 분류의 공지사항 이미지만 표시되도록 하려면 아래 코드를 사용해 주십시오.

    /* 대시보드 공지사항 >> 분류에서 설정한 분류명 */
    string type = "";
    
    GamePot.getInstance().showEvent(/*현재 액티비티*/, type, new GamePotNoticeDialog.onSchemeListener() {
        @Override
        public void onReceive(String scheme) {
            // scheme 처리
        }
    });
    

    고객지원 기능

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

    고객 문의 기능

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

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

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

    GamePot.getInstance().showCSWebView(/*현재 액티비티*/);
    

    외부 링크 고객 문의

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

    String url = "GAMEPOT에서 발급받은 외부 고객지원 URL";
    
    GamePot.getInstance().showWebView(/*현재 액티비티*/, url, true);
    

    FAQ 기능

    대시보드의 FAQ 메뉴와 연동되는 FAQ 기능을 사용하려면 아래 코드를 사용해 주십시오.

    GamePot.getInstance().showFaq(/*현재 액티비티*/);
    

    약관 및 정책 UI 호출 기능

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

    약관 및 정책 UI를 호출하려면 아래 코드를 사용해 주십시오.

    • 이용약관

      import io.gamepot.common.GamePot;
      
      // activity : 현재 액티비티
      GamePot.getInstance().showTerms(activity);
      
    • 개인정보처리방침

      import io.gamepot.common.GamePot;
      
      // activity : 현재 액티비티
      GamePot.getInstance().showPrivacy(activity);
      
    • 환불정책

      import io.gamepot.common.GamePot;
      
      // activity : 현재 액티비티
      GamePot.getInstance().showRefund(activity);
      

    약관 동의 기능 (GDPR 포함)

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

    약관 동의 자동 호출

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

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

    // 자동으로 표시되는 팝업에는 MATERIAL_BLUE 테마가 적용됩니다.
    // 기본값은 true입니다.
    // false로 설정하면 약관 동의 팝업이 자동으로 표시되지 않습니다.
    GamePot.getInstance().setAutoAgree(true);
    
    // MATERIAL_ORANGE 테마로 커스텀 적용 시
    GamePotAgreeBuilder bulider = new GamePotAgreeBuilder(GamePotAgreeBuilder.THEME.MATERIAL_ORANGE);
    GamePot.getInstance().setAutoAgreeBuilder(bulider);
    
    ...
    
    GamePotChannel.getInstance().login(GamePotChannelType);
    
    ...
    

    수동 약관 동의 호출

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

    • 테마 선택

      // 기본 테마
      GamePotAgreeBuilder.THEME.BLUE
      GamePotAgreeBuilder.THEME.GREEN
      
      //개선 테마
      GamePotAgreeBuilder.THEME.MATERIAL_RED,
      GamePotAgreeBuilder.THEME.MATERIAL_BLUE,
      GamePotAgreeBuilder.THEME.MATERIAL_CYAN,
      GamePotAgreeBuilder.THEME.MATERIAL_ORANGE,
      GamePotAgreeBuilder.THEME.MATERIAL_PURPLE,
      GamePotAgreeBuilder.THEME.MATERIAL_DARKBLUE,
      GamePotAgreeBuilder.THEME.MATERIAL_YELLOW,
      GamePotAgreeBuilder.THEME.MATERIAL_GRAPE,
      GamePotAgreeBuilder.THEME.MATERIAL_GRAY,
      GamePotAgreeBuilder.THEME.MATERIAL_GREEN,
      GamePotAgreeBuilder.THEME.MATERIAL_PEACH,
      
    • 호출

      // 기본 호출(MATERIAL_BLUE 테마 적용)
      GamePot.getInstance().showAgreeDialog(/*activity*/, new GamePotAgreeBuilder(), new GamePotListener<GamePotAgreeInfo>() {
          @Override
          public void onSuccess(GamePotAgreeInfo data) {
              // data.agree: 필수 약관을 모두 동의한 경우 true
              // data.agreePush: 일반 광고성 수신 동의를 체크한 경우 true, 그렇지 않으면 false
              // data.agreeNight: 야간 광고성 수신 동의를 체크한 경우 true, 그렇지 않으면 false
              // agreePush / agreeNight 값은 로그인 완료 후 setPushEnable api를 통해 한번에 설정해주십시오.
          }
      
          @Override
          public void onFailure(GamePotError error) {
              // error.message를 팝업 등으로 표시해 주십시오.
          }
      });
      
      // MATERIAL_ORANGE 테마 적용 시
      GamePotAgreeBuilder bulider = new GamePotAgreeBuilder(GamePotAgreeBuilder.THEME.MATERIAL_ORANGE);
      GamePot.getInstance().showAgreeDialog(/*activity*/, bulider, new GamePotListener<GamePotAgreeInfo>() {
        ....
      }
      

    약관 동의 UI 테마 직접 구성

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

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

    GamePotAgreeBuilder agreeBuilder= new GamePotAgreeBuilder();
    agreeBuilder.setHeaderBackGradient(new int[] {0xFF00050B,0xFF0F1B21});
    agreeBuilder.setHeaderTitleColor(0xFFFF0000);
    agreeBuilder.setHeaderBottomColor(0xFF00FF00);
    // 미사용시 ""로 설정
    agreeBuilder.setHeaderTitle("약관 동의");
    // res/drawable 객체 아이디
    agreeBuilder.setHeaderIconDrawable(R.drawable.ic_stat_gamepot_agree);
    
    agreeBuilder.setContentBackGradient(new int[] { 0xFFFF2432, 0xFF11FF32 });
    agreeBuilder.setContentTitleColor(0xFF0429FF);
    agreeBuilder.setContentCheckColor(0xFFFFADB5);
    agreeBuilder.setContentIconColor(0xFF98FFC6);
    agreeBuilder.setContentShowColor(0xFF98B3FF);
    // res/drawable 객체 아이디
    agreeBuilder.setContentIconDrawable(R.drawable.ic_stat_gamepot_small);
    
    agreeBuilder.setFooterBackGradient(new int[] { 0xFFFFFFFF, 0xFF112432 });
    agreeBuilder.setFooterButtonGradient(new int[] { 0xFF1E3A57, 0xFFFFFFFF });
    agreeBuilder.setFooterButtonOutlineColor(0xFFFF171A);
    agreeBuilder.setFooterTitleColor(0xFFFF00D5);
    agreeBuilder.setFooterTitle("게임 시작하기");
    
    //광고성 수신 동의(일반/야간) 체크 후 게임 시작 시 Toast 메시지(동의 시간) 노출 여부
    agreeBuilder.setShowToastPushStatus(true);
    
    // 광고성 수신 동의(일반/야간) 메시지 수정
    agreeBuilder.setPushToastMsg("Push on");
    agreeBuilder.setNightPushToastMsg("Night Push on");
    
    // 일반 광고성 수신동의 버튼 노출 여부
    agreeBuilder.setShowPush(true);
    
    // 야간 광고성 수신동의 버튼 노출 여부
    agreeBuilder.setShowNightPush(true);
    
    // 일반 광고성 수신동의 링크 버튼 설정(미사용 시 입력하지 않음)
    agreeBuilder.setPushDetailURL("https://...");
    
    // 야간 광고성 수신동의 링크 버튼 설정 (미사용 시 입력하지 않음)
    agreeBuilder.setNightPushDetailURL("https://...");
    
    // 문구 변경
    agreeBuilder.setAllMessage("모두 동의");
    agreeBuilder.setTermMessage("필수) 이용약관");
    agreeBuilder.setPrivacyMessage("필수) 개인정보 취급 방침");
    agreeBuilder.setPushMessage("선택) 일반 푸시 수신 동의");
    agreeBuilder.setNightPushMessage("선택) 야간 푸시 수신 동의");
    
    
    GamePot.getInstance().showAgreeDialog(/*activity*/, agreeBuilder, new GamePotListener<GamePotAgreeInfo>() {
      ....
    }
    
    • 각 변수는 아래 이미지에 표시된 영역에 적용됩니다.
      • AgeView
        game-gamepotandroid_ko
      • EmailView
        gamepot_android_09_1_ko
      • AgreeView
        gamepot_android_09_2_ko

    GDPR 약관 체크리스트 기능

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

    import io.gamepot.common.GamePot;
    
    (List<String>) GamePot.getInstance().getGDPRCheckedList();
    
    //리턴되는 각 파라미터는 대시보드의 다음 설정에 해당합니다.
    gdpr_privacy : 개인정보취급방침
    gdpr_term : 이용약관
    gdpr_gdpr : GDPR 이용약관
    gdpr_push_normal : 이벤트 푸시 수신동의
    gdpr_push_night : 야간 이벤트 푸시 수신동의 (한국만 해당)
    gdpr_adapp_custom : 개인 맞춤광고 보기에 대한 동의 (GDPR 적용 국가)
    gdpr_adapp_nocustom : 개인 맞춤이 아닌 광고 보기에 대한 동의 (GDPR 적용 국가)
    

    점검 및 강제 업데이트 기능

    게임 점검 및 강제 업데이트 기능을 사용할 수 있습니다. 대시보드의 점검 & 업데이트 메뉴에서 각 기능을 활성화하면 동작합니다.

    점검 및 강제 업데이트 기능을 사용하려면 아래 코드를 사용해 주십시오.

    GamePotChannel.getInstance().login(this, GamePotChannelType.GOOGLE, new GamePotAppStatusChannelListener<GamePotUserInfo>() {
        @Override
        public void onNeedUpdate(GamePotAppStatus status) {
            // 강제 업데이트 필요. 아래 API를 호출하면 SDK 자체 팝업을 표시할 수 있습니다.
            // Customizing을 하고자 하는 경우 아래 API를 호출하지 않은 상태에서 Customizing을 수행해 주십시오.
            GamePot.getInstance().showAppStatusPopup(MainActivity.this, status, new GamePotAppCloseListener() {
                @Override
                public void onClose() {
                    // showAppStatusPopup API를 호출한 경우 앱을 종료해야 하는 상황에 호출됩니다.
                    // 종료 프로세스를 처리해 주십시오.
                    MainActivity.this.finish();
                }
    
                @Override
                public void onNext(Object obj) {
                    // 대시보드 업데이트 설정에서 권장 설정 시 "다음에 하기" 버튼이 표시됩니다.
                    // 해당 버튼을 사용자가 선택하면 표시됩니다.
                    // obj 정보를 이용하여 로그인 완료 시와 동일하게 처리해 주십시오.
                    // GamePotUserInfo userInfo = (GamePotUserInfo)obj;
                }
            });
        }
    
        @Override
        public void onMainternance(GamePotAppStatus status) {
            // 점검 중. 아래 API를 호출하면 SDK 자체에서 팝업을 표시할 수 있습니다.
            // Customizing을 하고자 하는 경우아래 API를 호출하지 않은 상태에서 Customizing을 수행해 주십시오.
            GamePot.getInstance().showAppStatusPopup(MainActivity.this, status, new GamePotAppCloseListener() {
                @Override
                public void onClose() {
                    // showAppStatusPopup API를 호출한 경우 앱을 종료해야 하는 상황에 호출됩니다.
                    // 종료 프로세스를 처리해 주십시오.
                    MainActivity.this.finish();
                }
            });
        }
    
        @Override
        public void onCancel() {
            // 사용자가 로그인을 취소한 상황
        }
    
        @Override
        public void onSuccess(GamePotUserInfo userinfo) {
            // 로그인 완료. 게임 로직에 맞게 처리해 주십시오.
        }
    
        @Override
        public void onFailure(GamePotError error) {
            // 로그인 실패. error.getMessage()를 이용하여 오류 메시지를 표시해 주십시오.
        }
    });
    

    원격 구성 기능

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

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

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

    import io.gamepot.common.GamePot;
    
    //key : 매개변수 string
    String str_value = GamePot.getInstance().getConfig(key);
    
    //대시보드에 추가한 모든 매개변수를 json string 형태로 가져옵니다.
    String json_value = GamePot.getInstance().getConfigs();
    

    게임 로그 전송 기능

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

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

    • 예약어 및 코드
      예약어필수 여부타입설명최대 길이
      GamePotSendLogCharacter.NAME필수String캐릭터명128
      GamePotSendLogCharacter.LEVEL선택String레벨128
      GamePotSendLogCharacter.SERVER_ID선택String서버 ID128
      GamePotSendLogCharacter.PLAYER_ID선택String캐릭터 ID128
      GamePotSendLogCharacter.USERDATA선택StringETC128
      import android.text.TextUtils;
      
      import io.gamepot.common.GamePotSendLogCharacter;
      import io.gamepot.common.GamePotSendLog;
      
      String name = "캐릭터명";
      String level = "10";
      String serverid = "svn_001";
      String playerid = "283282191001";
      String userdata = "";
      
      GamePotSendLogCharacter obj = new GamePotSendLogCharacter();
      if(!TextUtils.isEmpty(name))
          obj.put(GamePotSendLogCharacter.NAME, name);
      if(!TextUtils.isEmpty(level))
          obj.put(GamePotSendLogCharacter.LEVEL, level);
      if(!TextUtils.isEmpty(serverid))
          obj.put(GamePotSendLogCharacter.SERVER_ID, serverid);
      if(!TextUtils.isEmpty(playerid))
          obj.put(GamePotSendLogCharacter.PLAYER_ID, playerid);
      if(!TextUtils.isEmpty(playerid))
          obj.put(GamePotSendLogCharacter.USERDATA, userdata);
      
      // result : 로그 전송 성공 true, 그렇지 않으면 false
      boolean result = GamePotSendLog.characterInfo(obj);
      

    AppStatus 확인

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

    import io.gamepot.common.GamePot;
    
    GamePot.getInstance().checkAppStatus(new GamePotAppStatusResultListener() {
        @Override
        public void onSuccess(){
       
        }
        @Override
        public void onFailure(GamePotError error){
    
        }
        @Override
        public void onNeedUpdate(GamePotAppStatus status){
            // 강제 업데이트 필요. 아래 API를 호출하면 SDK 자체 팝업을 표시할 수 있습니다.
            // Customizing을 하고자 하는 경우 아래 API를 호출하지 않은 상태에서 Customizing을 수행해 주십시오.
            GamePot.getInstance().showAppStatusPopup(MainActivity.this, status, new GamePotAppCloseListener() {
                @Override
                public void onClose() {
                    // showAppStatusPopup API를 호출한 경우 앱을 종료해야 하는 상황에 호출됩니다.
                    // 종료 프로세스를 처리해 주십시오.
                    MainActivity.this.finish();
                }
    
                @Override
                public void onNext(Object obj) {
                    // 대시보드 업데이트 설정에서 권장 설정 시 "다음에 하기" 버튼이 표시됩니다.
                    // 해당 버튼을 사용자가 선택하면 표시됩니다.
                    // obj 정보를 이용하여 로그인 완료 시와 동일하게 처리해 주십시오.
                    // GamePotUserInfo userInfo = (GamePotUserInfo)obj;
                }
            });
        }
        @Override
        public void onMainternance(GamePotAppStatus status){
            // 점검 중. 아래 API를 호출하면 SDK 자체에서 팝업을 표시할 수 있습니다.
            // Customizing을 하고자 하는 경우아래 API를 호출하지 않은 상태에서 Customizing을 수행해 주십시오.
            GamePot.getInstance().showAppStatusPopup(MainActivity.this, status, new GamePotAppCloseListener() {
                @Override
                public void onClose() {
                    // showAppStatusPopup API를 호출한 경우 앱을 종료해야 하는 상황에 호출됩니다.
                    // 종료 프로세스를 처리해 주십시오.
                    MainActivity.this.finish();
                }
            });
        }
    });
    

    setUserData설정

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

    import io.gamepot.common.GamePot;
    
    JSONObject jobj = new JSONObject();
    try {
        jobj.put("appversion", "1.0.23");
        jobj.put("server", "s1");
    } catch (JSONException e1) {
        e1.printStackTrace();
    }
    
    GamePot.getInstance().setUserData(jobj, new GamePotCommonListener() {
        @Override
        public void onSuccess() {
            //setUserData 성공
        }
    
        @Override
        public void onFailure(GamePotError error) {
            //setUserData 실패
        }
    });
    

    3rd Party SDK 연동

    GAMEPOT 안드로이드 SDK는 3rd Party SDK와의 연동을 지원합니다.

    3rd Party SDK 로그인 연동

    3rd Party SDK와 연동하여 로그인 기능을 사용하려면 표를 참조하여 아래 코드의 값을 수정한 후 코드를 사용해 주십시오.

    • 파라미터 및 코드
      파라미터명필수 여부타입설명
      activity필수String현재 Activity
      userid필수String사용자 고유 ID
      listener필수GamePotChannelListener / GamePotAppStatusChannelListener요청 결과
      String memberId = "memberid of 3rd party sdk";
      
      GamePotChannel.getInstance().loginByThirdPartySDK(getActivity(), memberId, new GamePotAppStatusChannelListener<GamePotUserInfo>() {
          @Override
          public void onNeedUpdate(GamePotAppStatus status) {
              // 강제 업데이트 필요. 아래 API를 호출하면 SDK 자체 팝업을 표시할 수 있습니다.
              // Customizing을 하고자 하는 경우 아래 API를 호출하지 않은 상태에서 Customizing을 수행해 주십시오.
              GamePot.getInstance().showAppStatusPopup(MainActivity.this, status, new GamePotAppCloseListener() {
                  @Override
                  public void onClose() {
                      // showAppStatusPopup API를 호출한 경우 앱을 종료해야 하는 상황에 호출됩니다.
                      // 종료 프로세스를 처리해 주십시오.
                      MainActivity.this.finish();
                  }
      
                  @Override
                  public void onNext(Object obj) {
                      // 대시보드에서 업데이트 설정을 권장으로 지정했을 경우 "다음에 하기" 버튼이 표시됩니다.
                      // 해당 버튼을 사용자가 선택하면 호출됩니다.
                      // obj 정보를 이용하여 로그인 완료 시와 동일하게 처리해 주십시오.
                      // GamePotUserInfo userInfo = (GamePotUserInfo)obj;
                  }
              });
          }
      
          @Override
          public void onMainternance(GamePotAppStatus status) {
              // 점검 중. 아래 API를 호출하면 SDK 자체에서 팝업을 표시할 수 있습니다.
              // Customizing을 하고자 하는 경우 아래 API를 호출하지 않은 상태에서 Customizing을 수행해 주십시오.
              GamePot.getInstance().showAppStatusPopup(MainActivity.this, status, new GamePotAppCloseListener() {
                  @Override
                  public void onClose() {
                      // showAppStatusPopup API를 호출한 경우 앱을 종료해야 하는 상황에 호출됩니다.
                      // 종료 프로세스를 처리해 주십시오.
                      MainActivity.this.finish();
                  }
              });
          }
      
          @Override
          public void onCancel() {
              // 사용자가 로그인을 취소한 상황
          }
      
          @Override
          public void onSuccess(GamePotUserInfo userinfo) {
              // 로그인 완료. 게임 로직에 맞게 처리해 주십시오.
          }
      
          @Override
          public void onFailure(GamePotError error) {
              // 로그인 실패. error.getMessage()를 이용해서 오류 메시지를 표시해 주십시오.
          }
      });
      

    3rd Party SDK 결제 연동

    3rd Party SDK와 연동하여 결제 기능을 사용하려면 표를 참조하여 아래 코드의 값을 수정한 후 코드를 사용해 주십시오.

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

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

    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.