- 인쇄
- PDF
안드로이드 SDK
- 인쇄
- PDF
Classic/VPC 환경에서 이용 가능합니다.
안드로이드 운영 체제용 게임 개발을 위한 GAMEPOT 안드로이드 SDK 사용법에 대해 설명합니다. SDK를 설치하고 환경을 구성함으로써 게임과 대시보드를 연동할 수 있습니다.
요구 사양
안드로이드 운영 체제용 GAMEPOT SDK를 사용하기 위한 요구 사양은 다음과 같습니다.
- 최소 사양: API 21 이상, gradle 3.3.3 또는 3.4.3 이상
- 개발 환경: Android Studio
SDK 설치 및 환경 구성
GAMEPOT 안드로이드 SDK를 설치한 후 환경을 구성하여 GAMEPOT 대시보드와 게임을 연동하고 게임 개발에 필요한 기능을 사용할 수 있습니다.
SDK 설치
GAMEPOT 안드로이드 SDK를 설치하고 Android Studio에서 프로젝트를 구성하는 방법은 다음과 같습니다.
- GAMEPOT SDK 다운로드 > Android에서 다운로드 링크를 클릭해 주십시오.
- Android Studio를 실행한 후 게임 프로젝트를 열어 주십시오.
- 다운로드한 AOS SDK 파일의 압축을 해제한 후 libs 폴더 내의 모든 파일을 게임 프로젝트의 libs 폴더로 복사해 주십시오.
build.gradle 수정
build.gradle 파일을 수정하는 방법은 다음과 같습니다.
아래 코드를 사용하여 프로젝트 root 폴더의 build.gradle 파일을 수정해 주십시오.
buildscript { repositories { ... google() mavenCentral() maven { url "https://jitpack.io" } } dependencies { ... classpath 'com.google.gms:google-services:4.3.14' } } allprojects { repositories { ... google() mavenCentral() maven { url "https://jitpack.io" } } }
표를 참조하여 아래 코드의 값을 수정한 후 코드를 사용하여 app 폴더의 build.gradle 파일을 수정해 주십시오.
gamepot_payment 값은 빈칸을 기본으로 합니다.값 설명 gamepot_project_id
GAMEPOT에서 발급받은 프로젝트 ID
(대시보드 프로젝트 설정 > 일반 메뉴에서 확인)gamepot_store
스토어 값 google
,one
, 또는galaxy
입력gamepot_app_title
앱 제목(FCM) gamepot_push_default_channel
변경 금지(등록된 기본 채널 이름) facebook_app_id
페이스북에서 발급받은 앱 ID fb_login_protocol_scheme
fb[페이스북에서 발급받은 앱 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 '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:2.5.14' implementation 'com.apollographql.apollo:apollo-android-support:2.5.14' implementation 'com.android.billingclient:billing:7.0.0' implementation 'com.google.firebase:firebase-crashlytics-buildtools:2.9.1' implementation 'com.github.bumptech.glide:glide:3.7.0' implementation 'androidx.sqlite:sqlite-framework:2.0.1' 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" implementation 'pub.devrel:easypermissions:3.0.0' implementation(name: 'pageindicatorview-1.0.3', ext: 'aar') implementation(name: 'puree-4.1.6', ext: 'aar') 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:14.1.1' // 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'
Google Developer Center에서 획득한 google-service.json 파일을 app 폴더 하위에 복사해 주십시오.
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를 이용해 제작하면 자동으로 폴더별로 이미지가 제작되어 편리합니다.
푸시 알림 아이콘을 설정하는 방법은 다음과 같습니다.
- 아래와 같이 프로젝트 경로에 res/drawable 폴더를 각각 생성한 후 각 크기별 이미지 파일을 추가해 주십시오.
폴더명 크기 res/drawable-mdpi/ 24x24 res/drawable-hdpi/ 36x36 res/drawable-xhdpi/ 48x48 res/drawable-xxhdpi/ 72x72 res/drawable-xxxhdpi/ 96x96 - 이미지 파일 이름을 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 콘솔에 추가해 주십시오.
페이스북 콘솔 설정
로그인 기능을 사용하기 위해 페이스북 콘솔을 설정하는 방법은 다음과 같습니다.
- Facebook for Developers 콘솔에서 앱 유형을 None 또는 Consumer 또는 Gaming으로 선택한 후 앱을 생성해 주십시오.
- 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 포함: gamepot-billing-galaxystore.aar
마이카드 인앱 SDK 포함 : gamepot-billing-mycard.aar ( 구글 스토어 빌드에는 포함되지 않도록 조치 해주세요.)
인앱 구매를 위한 결제 기능을 사용할 수 있습니다. 결제의 결과 값은 Listener 형태로 구현됩니다.
원스토어의 경우 아래 과정이 필요합니다.
- build.gradle (:project) 내 하기 문구를 추가해 주십시오.
allprojects {
repositories {
...
mavenCentral()
maven { url 'https://repo.onestore.co.kr/repository/onestore-sdk-public' }
...
}
}
- build.gradle (:app) 내 하기 문구를 추가해 주십시오.
dependencies {
...
implementation(name: 'gamepot-billing-onestore', ext: 'aar')
implementation 'com.onestorecorp.sdk:sdk-iap:21.01.00'
...
}
- 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 값은 마이카드 측을 통해 확인 후 대시보드에 설정 해주세요.
대시보드 >> 결제 >> IAP의 스토어 타입:Google 항목 > 가격추가 > 통화(ex. TWD)/가격 정보를 기입후 저장해주세요.
대시보드 >> 프로젝트 설정 >> 외부결제 항목에 MyCard를 추가하고 해당 FacService ID / Sign Key 가 정상적으로 입력되어 있는지 확인해주세요.
결제는 SDK의 아래 코드를 호출 합니다.
GamePot.getInstance().purchase("product id");
- MyCard 사용 중 결제 아이템 호출 형태는 기존 GamePot.getInstance().getPurchaseDetailList(); 호출 시 에러발생 됩니다.
이를 대체하여 GamePot.getInstance().getPurchaseThirdPaymentsDetailList();을 호출 해주세요.
- MyCard 사용 중 결제 아이템 호출 형태는 기존 GamePot.getInstance().getPurchaseDetailList(); 호출 시 에러발생 됩니다.
./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" >
- build.gradle 파일에 아래와 같이 설정 합니다.
resValue "string", "gamepot_store", "google"
resValue "string", "gamepot_payment", "mycard" // 스토어가 google인 경우만 동작합니다.
../libs 폴더 내에 gamepot-billing-mycard.aar 이 포함 되어 있는지 확인 합니다.
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 이미지를 설정하는 방법은 다음과 같습니다.
- 아래와 같이 rew/drawable 폴더를 각각 생성한 후 각 크기별 이미지 파일을 추가해 주십시오.
폴더명 크기 res/drawable-mdpi/ 24x24 res/drawable-hdpi/ 36x36 res/drawable-xhdpi/ 48x48 res/drawable-xxhdpi/ 72x72 res/drawable-xxxhdpi/ 96x96 - 이미지 파일 이름을 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();
공지사항 이미지 표시 기능
대시보드의 공지사항 메뉴에 업로드한 이미지가 표시되도록 설정할 수 있습니다. 권장 이미지 크기는 아래와 같습니다.
- 크기: 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
- EmailView
- AgreeView
- AgeView
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
서버 ID 128 GamePotSendLogCharacter.PLAYER_ID
선택 String
캐릭터 ID 128 GamePotSendLogCharacter.USERDATA
선택 String
ETC 128 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);
ELSA 로그 수집
ELSA 와 연동하여 로그를 수집 기능을 사용하려면 아래 코드를 호출해 주십시오.
// initialize
GamePotLogger.init(Application application);
// debug
GamePotLogger.d(String errorCode, String message)
// info
GamePotLogger.i(String errorCode, String message)
// warn
GamePotLogger.w(String errorCode, String message)
// error
GamePotLogger.e(String errorCode, String message)
아래는 호출 예시입니다.
@Override
public void onFailure(GamePotError error) {
GamePotLogger.e(Integer.toString(error.getCode()), error.getMessage());
}