---
title: "Android SDK"
slug: "game-gamepotandroid"
tags: ["GAMEPOT"]
updated: 2026-09-17T09:23:32Z
published: 2026-09-17T09:23:32Z
canonical: "guide.ncloud-docs.com/game-gamepotandroid"
stale: true
---
> ## Documentation Index
> Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt
> Use this file to discover all available pages before exploring further.
# Android SDK
Classic/VPC環境で利用できます。
Androidの OS用ゲーム開発のための GAMEPOT Android SDKの使用方法について説明します。SDKをインストールして環境を構成することで、ゲームとダッシュボードを連携できます。
## システム要件
Androidの OS用 GAMEPOT SDKを使用するためのシステム要件は、次の通りです。
- 最小スペック: API 21以降、Gradle 3.3.3または3.4.3以降
- 開発環境: Android Studio
## SDKのインストールと環境の構成
GAMEPOT Android SDKをインストールして環境を構成し、GAMEPOTのダッシュボードとゲームを連携してゲーム開発に必要な機能を使用できます。
### SDKのインストール
GAMEPOT Android SDKをインストールし、Android Studioでプロジェクトを構成する方法は、次の通りです。
1. [GAMEPOT SDKのダウンロード > Android](/docs/ja/game-gamepot-gamepotsdk-android)からダウンロードリンクをクリックします。
2. Android Studioを実行し、ゲームプロジェクトを開きます。
3. ダウンロードした AOS SDKファイルの圧縮を展開し、libsフォルダ内のすべてのファイルをゲームプロジェクトの libsフォルダにコピーします。
### build.gradleの編集
build.gradleファイルを編集する方法は、次の通りです。
1. 以下のコードを使用してプロジェクト 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" }
}
}
```
2. 表を参照して以下のコード値を変更し、コードを使用してアプリフォルダの 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` | Facebookで発行されたアプリ ID |
| `fb_login_protocol_scheme` | fb[Facebookで発行されたアプリ ID] 例) fb101010 |
| `facebook_client_token` | Facebookコンソール > アプリ設定 > 高度な設定 > クライアントトークン |
| `gamepot_elsa_projectid` | NAVERクラウド ELSAサービスを使用する場合、ELSAプロジェクト IDを入力 ([Effective Log Search & Analytics](https://www.ncloud.com/product/analytics/elsa)を参照) |
| `gamepot_region` | GAMEPOTダッシュボード作成リージョンがシンガポールの場合のみ sgと入力 |
| `gamepot_license_url` | GAMEPOTダッシュボード作成リージョンが日本の場合のみ 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", "[Facebookクライアントトークン]" // Facebookコンソール > アプリ設定 > 高度な設定 > クライアントトークン
// 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:2.1.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:4.13.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'
```
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を設定して一般的にゲームに使われる設定値を追加するには、以下のコードを使用します。
```
```
### プッシュ通知アイコンの設定
プッシュ通知メッセージの受信時に、通知バーに表示するアイコンを設定できます。別途設定しない場合は、SDKに含まれている基本画像を使用するとともに、ゲームに合ったアイコンを直接設定できます。 [Android Asset Studio](http://romannurik.github.io/AndroidAssetStudio/icons-notification.html#source.type=clipart&source.clipart=ac_unit&source.space.trim=1&source.space.pad=0&name=ic_stat_gamepot_small)を利用して制作すると、自動的にフォルダ別に画像が制作され便利です。
プッシュ通知アイコンを設定する方法は、次の通りです。
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();
}
```
## ログインに関連する機能
Google、Facebook、NAVERなど様々なログイン SDK機能を統合して GAMEPOT Android SDKで使用できます。
### 使用前の設定
ログインに関連する SDK機能を使用するには、必要なコンソールの設定を完了し、ログインに関連するコードを宣言する必要があります。
#### Google Firebaseコンソールの設定
ログイン機能を使用するために Google Firebaseコンソールを設定するには、APKを構成する際に使った Keystoreファイルの SHA-1値を Firebaseコンソールに追加します。
#### Facebookコンソールの設定
ログイン機能を使用するために Facebookコンソールを設定する方法は、次の通りです。
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: Google
// GamePotChannelType.FACEBOOK: Facebook
// GamePotChannelType.NAVER: NAVER
// GamePotChannelType.LINE: LINE
// GamePotChannelType.TWITTER: Twitter
// GamePotChannelType.APPLE: Apple
// GamePotChannelType.GUEST: ゲスト
// Googleのログインボタンを押した時の呼び出し
GamePotChannel.getInstance().login(this, GamePotChannelType.GOOGLE, new GamePotChannelListener() {
@Override
public void onCancel() {
// ユーザーがログインをキャンセルした状態
}
@Override
public void onSuccess(GamePotUserInfo userinfo) {
// ログインに成功。ゲームのロジックに合わせて処理します。
// userinfo.getMemberid(): 会員の固有 ID
}
@Override
public void onFailure(GamePotError error) {
// ログインに失敗。error.getMessage()を利用してエラーメッセージを表示します。
}
});
```
#### 会員の固有 IDの取得
ゲーム会員の固有 ID値を取得するには、以下のコードを使用します。
```
GamePot.getInstance().getMemberId();
```
#### アカウント別ログイン機能の使用
アカウント別のログイン機能を使用するには、以下のコードを使用して設定を適用します。
- **NAVERログイン**
```
android {
defaultConfig {
...
resValue "string", "gamepot_naver_clientid", "xxxxxxxx" // NAVER開発者コンソールで取得
resValue "string", "gamepot_naver_secretid", "xxx" // NAVER開発者コンソールで取得
}
}
dependencies {
...
compile(name: 'gamepot-channel-naver', ext: 'aar')
...
}
```
```
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() {
...
});
```
- build.gradleの設定
- MainActivity.javaの設定
- ログイン
- **LINEログイン**
```
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')
...
}
```
```
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() {
...
});
```
- build.gradleの設定
- MainActivity.javaの設定
- ログイン
- **Appleウェブログイン**
```
dependencies {
...
compile(name: 'gamepot-channel-apple-signin', ext: 'aar')
...
}
```
```
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() {
...
});
```
- build.gradleの設定
- MainActivity.javaの設定
- ログイン
### 自動ログイン機能
会員の最後のログイン情報を伝達する 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() {
@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サーバに伝達してログイン検証を行えます。
詳細は、[ログイン検証リクエスト](/docs/ja/game-gamepotserver#%EB%A1%9C%EA%B7%B8%EC%9D%B8%EA%B2%80%EC%A6%9D%EC%9A%94%EC%B2%AD)をご参照ください。
## 外部アカウントとの連携
一つのゲームアカウントに複数の外部アカウントを連携したり、解除できます。
### アカウント連携機能
Google、Facebook、NAVERなど様々な外部アカウントとの連携機能を使用するには、以下のコードを使用します。
```
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;
// Googleアカウントと連携
// GamePotChannelType.GOOGLE
// Facebookアカウントと連携
// GamePotChannelType.FACEBOOK
// NAVERアカウントと連携
// GamePotChannelType.NAVER
// LINEアカウントと連携
// GamePotChannelType.LINE
// Twitterアカウントと連携
// GamePotChannelType.TWITTER
// Appleアカウントと連携
// GamePotChannelType.APPLE
GamePotChannel.getInstance().createLinking(this, GamePotChannelType.GOOGLE, new GamePotChannelListener() {
@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形式で返却します。
// Googleや Facebookと連携されている場合は、以下のように返されます。
// [{“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()を利用してエラーメッセージを表示します。
}
});
```
## 決済機能
```
GAMEPOT決済は消耗品の In-App商品タイプのみサポートしています。また、ONE Store In-App SDKは V21バージョンのみサポートしています。
ONE Store In-App SDK付き: gamepot-billing-onestore.aar
GALAXY Store In-App SDK付き: gamepot-billing-galaxystore.aar
MyCard In-App SDK付き: gamepot-billing-mycard.aar (Google Storeビルドには含まれないようにします)
```
In-App購入のための決済機能を使用できます。決済の結果値は Listenerの形で実装されます。
ONE Storeの場合、以下の手順が必要です。
1. build.gradle (:project)内に以下の文言を追加します。
```
allprojects {
repositories {
...
mavenCentral()
maven { url 'https://repo.onestore.co.kr/repository/onestore-sdk-public' }
...
}
}
```
1. build.gradle (:app)内に以下の文言を追加します。
```
dependencies {
...
implementation(name: 'gamepot-billing-onestore', ext: 'aar')
implementation 'com.onestorecorp.sdk:sdk-iap:21.01.00'
...
}
```
1. AndroidManifest.xmlファイル内に以下の文言を追加します。
```
```
### 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() {
@Override
public void onSuccess(GamePotPurchaseInfo info) {
// 決済に成功。アイテム支給のリクエストは、Webフックに設定されたアドレスで server to serverにリクエストします。
// ここでは結果に対する処理のみ行い、実際のアイテム支給は行わないでください。
}
@Override
public void onFailure(GamePotError error) {
// 決済に失敗。error.getMessage()を利用してエラーメッセージを表示します。
}
@Override
public void onCancel() {
// 決済処理中にユーザーがキャンセルした場合
}
});
...
}
}
```
### 決済試行機能
一つの決済 APIでGoogle Play Storeと ONE Storeの両方で決済試行機能を使用できます。
決済試行機能を使用するには、以下のコードを使用します。
- 一般決済の実行
```
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");
```
- 決済試行、領収証番号を別途管理、キャラクター情報を Webフックに伝達
ONE Storeバージョンは、uniqueId+serverId+playerId+etc 1つの長さが85byte未満の場合に決済できます。
```
import io.gamepot.common.GamePot;
// productId: ストアに登録されている商品 ID
// uniqueId: 別途管理する領収証番号
// serverId: 決済を行ったキャラクターのサーバ ID
// playerId: 決済を行ったキャラクターのキャラクター ID
// etc : 決済を行ったキャラクターのその他の情報
GamePot.getInstance().purchase("product id","uniqueId","serverId","playerId","etc");
```
### 決済アイテムリストの取得機能
ストアに伝達する In-App決済アイテムリストの取得機能を使用するには、以下のコードを使用します。
ログイン成功後に呼び出しが必要な APIで、getPurchaseDetailList APIの場合、 非同期的にストア In-App SDKから受け取った内容を伝える APIのため、呼び出すタイミングによっては空の値で伝達されることがあります。(決済可能な環境基準)
```
import io.gamepot.common.GamePot;
//[case1]
GamePotPurchaseDetailList details = GamePot.getInstance().getPurchaseDetailList();
//[case2]
GamePot.getInstance().getPurchaseDetailListAsync(new GamePotListener() {
@Override
public void onSuccess(GamePotPurchaseDetailList data) {
//data : In-app information
}
@Override
public void onFailure(GamePotError error) {
// api error
}
});
```
### 決済アイテムの支給機能
決済ストアの領収書の内訳と対照して検証をすべて完了した場合のみ、開発会社のサーバに支給リクエストを転送するように設定できます。
詳細は、[アイテム支給のリクエスト](/docs/ja/game-gamepotserver#%EC%95%84%EC%9D%B4%ED%85%9C%EC%A7%80%EA%B8%89%EC%9A%94%EC%B2%AD)をご参照ください。
### MyCard決済
MyCardライブラリ: [gamepot-billing-mycard.aar](https://xyuditqzezxs1008973.cdn.ntruss.com/patch/gamepot-billing-mycard.aar)
参考
MyCardと連携させるための FacServiceID / KEYの値は、MyCard側に確認してからダッシュボードで設定してください。
1. ダッシュボード >> 決済 >> IAPストアタイプ: Google項目 > 価格の追加 > 通貨(例: 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を削除します。
```
```
1. build.gradleファイルに以下のように設定します。
```
resValue "string", "gamepot_store", "google"
resValue "string", "gamepot_payment", "mycard" // ストアが googleの場合にのみ動作します。
```
1. ../libsフォルダ内に gamepot-billing-mycard.aarが含まれているか確認します。
2. build.gradleファイル内にビルドする際にライブラリが含められるように設定されているか確認します。
例) implementation(name: 'gamepot-billing-mycard', ext: 'aar')が含まれているか確認します。
### 外部決済機能
ONE Store基準: ONE Storeでサポートする In-App SDKを使用しない決済モジュールと連携するには、まず[外部決済とのサービス連携](/docs/ja/game-gamepot-projectmgmt#%EC%99%B8%EB%B6%80%EA%B2%B0%EC%A0%9C%EC%84%9C%EB%B9%84%EC%8A%A4%EC%97%B0%EB%8F%99)を参照して設定を完了し、以下のコードを使用します。
- **決済試行**
```
import io.gamepot.common.GamePot;
// activity: 現在のアクティビティ
// product id: ダッシュボードに登録した決済 ID
GamePot.getInstance().purchaseThirdPayments(activity, product id);
```
- **決済アイテムリストの取得**
```
import io.gamepot.common.GamePot;
GamePotPurchaseDetailList thirdPaymentsDetailList = GamePot.getInstance().getPurchaseThirdPaymentsDetailList();
```
## SDK独自提供のログイン UI
GAMEPOT Android 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() {
@Override
public void onExit() {
// Xボタンのクリック時に処理
}
@Override
public void onNeedUpdate(GamePotAppStatus status) {
// TODO: 強制アップデートが必要な場合。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
// TODO: カスタマイズしたい場合は、以下の APIを呼び出さずにカスタマイズしてください。
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: ダッシュボードアップデートの設定で推奨を選択すると、「後でする」ボタンが表示されます。
// このボタンをユーザーが選択すると呼び出されます。
// TODO: obj情報を用いてログイン完了時と同様に処理してください。
// GamePotUserInfo userInfo = (GamePotUserInfo)obj;
}
});
}
@Override
public void onMainternance(GamePotAppStatus status) {
// TODO: メンテナンス中の場合。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
// TODO: カスタマイズしたい場合は、以下の APIを呼び出さずにカスタマイズしてください。
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(): 会員の固有 ID
}
@Override
public void onFailure(GamePotError error) {
// ログインに失敗。error.getMessage()を利用してエラーメッセージを表示します。
}
@Override
public void onGameServiceConflict(GamePotUserInfo conflictUserInfo) {
// GPGSアカウント連携を使用する場合に発生する可能性のあるイベントです。
}
});
```
### 独自提供のログイン 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() {
@Override
public void onSuccess(String message) {
// クーポン使用に成功。メッセージ値をポップアップで表示します。
}
@Override
public void onFailure(GamePotError error) {
// クーポン使用に失敗。error.getMessage()を利用してエラーメッセージを表示します。
}
});
```
### アイテムの支給
クーポン使用に成功すると、開発会社のサーバにアイテム支給をリクエストします。
詳細は、[アイテム支給のリクエスト](/docs/ja/game-gamepotserver#%EC%95%84%EC%9D%B4%ED%85%9C%EC%A7%80%EA%B8%89%EC%9A%94%EC%B2%AD)をご参照ください。
## プッシュ通知機能
一般プッシュ通知、夜間プッシュ通知、プッシュ型広告の通知機能を有効化または無効化することができます。 プッシュ型広告設定は、プッシュ通知機能を使用する場合に trueにします。(プッシュ型広告の値が falseの場合、一般/夜間プッシュの設定に関係なくプッシュは届きません)
### プッシュ権限のリクエスト
Android 13バージョン以降では、プッシュ通知の受信のためにランタイム権限のリクエストおよび許可が必要です。 ランタイムプッシュ権限をリクエストするには、以下のコードをご使用ください。
```
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.core.content.ContextCompat;
private final ActivityResultLauncher requestPermissionLauncher =
registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
});
private void askNotificationPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
PackageManager.PERMISSION_GRANTED) {
// already granted
} else {
// request the permission
requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
}
}
}
// onCreateでの呼び出し例
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GamePot.getInstance().setup(getApplicationContext());
// プッシュ権限のリクエスト
askNotificationPermission();
}
```
### プッシュ通知の有効化および無効化
プッシュ通知を受信するかどうかを変更するには、以下のコードをご使用ください。
```
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)
- 容量: 250KB以下
ダッシュボードの**お知らせ**メニューにアップロードした画像が表示されるようにするには、以下のコードを使用します。
```
/* 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 Android 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() {
@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() {
....
}
```
#### 約款同意 UIテーマの直接構成
SDKで提供するテーマを使う代わりに、直接構成した約款同意 UIのテーマを使用できます。
約款同意 UIのテーマを直接構成して使用するには、約款同意を呼び出す前に、以下のコードを使ってテーマを構成します。
```
GamePotAgreeBuilder agreeBuilder= new GamePotAgreeBuilder();
agreeBuilder.setHeaderBackGradient(new int[] {0xFF00050B,0xFF0F1B21});
agreeBuilder.setHeaderTitleColor(0xFFFF0000);
agreeBuilder.setHeaderBottomColor(0xFF00FF00);
// 未使用時は""に設定
agreeBuilder.setHeaderTitle("約款同意");
// res/drawableオブジェクト ID
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オブジェクト ID
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() {
....
}
```
- それぞれの変数は、以下の画像に表示された領域に適用されます。
- **AgeView**

- **EmailView**

- **AgreeView**

#### GDPR約款のチェックリスト機能
ダッシュボードで有効化した GDPRの約款項目をリストの形で取得するには、以下のコードを使用します。
```
import io.gamepot.common.GamePot;
(List) 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() {
@Override
public void onNeedUpdate(GamePotAppStatus status) {
// 強制アップデートが必要。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
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独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
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()を利用してエラーメッセージを表示します。
}
@Override
public void onGameServiceConflict(GamePotUserInfo conflictUserInfo) {
// GPGSアカウント連携を使用する場合に発生する可能性のあるイベントです。
}
});
```
## Remote Config機能
ダッシュボードの **ゲーム > Remote Config** メニューに登録したサーバのパラメータ値を取得できます。パラメータ値を取得して SDKで使用すると、ゲームをアップデートせずに各要素を変更または制御できます。
取得したパラメータはログイン時にロードされ、その後から呼び出すことができます。
Remote Config機能を使用するには、以下のコードを使用します。
```
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独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
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独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
GamePot.getInstance().showAppStatusPopup(MainActivity.this, status, new GamePotAppCloseListener() {
@Override
public void onClose() {
// showAppStatusPopup APIを呼び出した場合、アプリを終了しなければならない状況で呼び出されます。
// 終了プロセスを処理します。
MainActivity.this.finish();
}
});
}
});
```
### setUserDataの設定
ログイン後、当該会員に追加情報を入れる場合に使用します。 キーの最大数は50個に制限 値の最大長さは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 Android SDKは、3rd Party SDKとの連携に対応しています。
### 3rd Party SDKログイン連携
3rd Party SDKと連携してログイン機能を使用するには、表を参照して以下のコード値を変更し、コードを使用します。
- **パラメータおよびコード**
| パラメータ名 | 必須の有無 | タイプ | 説明 |
| --- | --- | --- | --- |
| `activity` | 必須 | `String` | 現在のアクティビティ |
| `userid` | 必須 | `String` | ユーザーの固有 ID |
| `listener` | 必須 | `GamePotChannelListener / GamePotAppStatusChannelListener` | リクエストの結果 |
```
String memberId = "memberid of 3rd party sdk";
GamePotChannel.getInstance().loginByThirdPartySDK(getActivity(), memberId, new GamePotAppStatusChannelListener() {
@Override
public void onNeedUpdate(GamePotAppStatus status) {
// 強制アップデートが必要。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
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独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
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()を利用してエラーメッセージを表示します。
}
@Override
public void onGameServiceConflict(GamePotUserInfo conflictUserInfo) {
// GPGSアカウント連携を使用する場合に発生する可能性のあるイベントです。
}
});
```
### 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());
}
```