- 印刷する
- PDF
Android SDK
- 印刷する
- PDF
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でプロジェクトを構成する方法は、次の通りです。
- GAMEPOT SDKのダウンロード > Androidからダウンロードリンクをクリックします。
- Android Studioを実行し、ゲームプロジェクトを開きます。
- ダウンロードした AOS SDKファイルの圧縮を展開し、libsフォルダ内のすべてのファイルをゲームプロジェクトの libsフォルダにコピーします。
build.gradleの編集
build.gradleファイルを編集する方法は、次の通りです。
以下のコードを使用してプロジェクト rootフォルダの build.gradleファイルを編集します。
buildscript { repositories { ... google() jcenter() mavenCentral() maven { url "https://jitpack.io" } maven { url "https://jcenter.bintray.com" } } dependencies { ... classpath 'com.google.gms:google-services:4.3.10' } } allprojects { repositories { ... google() jcenter() mavenCentral() maven { url "https://jitpack.io" } maven { url "https://jcenter.bintray.com" } } }
表を参照して以下のコード値を変更し、コードを使用してアプリフォルダの 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を参照)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: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: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 '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: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>
<!--Galaxy 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();
}
ログインに関連する機能
Google、Facebook、NAVERなど様々なログイン SDK機能を統合して GAMEPOT Android SDKで使用できます。
使用前の設定
ログインに関連する SDK機能を使用するには、必要なコンソールの設定を完了し、ログインに関連するコードを宣言する必要があります。
Google Firebaseコンソールの設定
ログイン機能を使用するために Google Firebaseコンソールを設定するには、APKを構成する際に使った Keystoreファイルの SHA-1値を Firebaseコンソールに追加します。
Facebookコンソールの設定
ログイン機能を使用するために Facebookコンソールを設定する方法は、次の通りです。
- 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: 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<GamePotUserInfo>() {
@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ログイン
- 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>() { ... });
- LINEログイン
- 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>() { ... });
- Appleウェブログイン
- 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サーバに伝達してログイン検証を行えます。
詳細は、ログイン検証リクエストをご参照ください。
外部アカウントとの連携
一つのゲームアカウントに複数の外部アカウントを連携したり、解除できます。
アカウント連携機能
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<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形式で返します。
// 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の場合、以下の手順が必要です。
- 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) {
// 決済成功。アイテム支給のリクエストは、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<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
MyCardと連携させるための FacServiceID / KEYの値は、MyCard側に確認してからダッシュボードで設定してください。
ダッシュボード >> 決済 >> IAPストアタイプ: Google項目 > 価格の追加 > 通貨(例: 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ファイル内にビルドする際にライブラリが含められるように設定されているか確認します。
例) implementation(name: 'gamepot-billing-mycard', ext: 'aar')が含まれているか確認します。
外部決済機能
ONE Store基準: ONE Storeでサポートする In-App SDKを使用しない決済モジュールと連携するには、まず外部決済とのサービス連携を参照して設定を完了し、以下のコードを使用します。
- 決済試行
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<GamePotUserInfo>() {
@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()を利用してエラーメッセージを表示します。
}
});
独自提供のログイン 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) {
// クーポン使用に成功。メッセージ値をポップアップで表示します。
}
@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)
- 容量: 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<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オブジェクト 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<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独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の 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()を利用してエラーメッセージを表示します。
}
});
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<GamePotUserInfo>() { @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()を利用してエラーメッセージを表示します。 } });
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);