Android SDK
    • PDF

    Android SDK

    • PDF

    Article Summary

    Classic/VPC環境で利用できます。

    Androidの OS用ゲーム開発のための GAMEPOT Android SDKの使用方法について説明します。 SDKをインストールして環境を構成することで、ゲームとダッシュボードを連携できます。

    システム要件

    Androidの OS用 GAMEPOT SDKを使用するためのシステム要件は、以下のとおりです。

    • 最小スペック: API 19(Kitkat)以降、gradle 3.3.3または3.4.3. 以降
    • 開発環境: Android Studio

    SDKのインストールと環境の構成

    GAMEPOT Android SDKをインストールして環境を構成し、GAMEPOTのダッシュボードとゲームを連携してゲーム開発に必要な機能を使用できます。

    SDKのインストール

    GAMEPOT Android SDKをインストールし、Android Studioでプロジェクトを構成する方法は、以下のとおりです。

    1. 管理者アカウントでダッシュボードにログインします。
    2. SDKのダウンロード > Androidメニューを順にクリックし、ダウンロードをクリックします。
    3. Android Studioを実行し、ゲームプロジェクトを開きます。
    4. ダウンロードした AOS SDKファイルの圧縮を展開し、libsフォルダ内のすべてのファイルをゲームプロジェクトの libsフォルダにコピーします。

    build.gradleの編集

    build.gradleファイルを編集する方法は、以下のとおりです。

    1. 以下のコードを使用してプロジェクト rootフォルダの build.gradleファイルを編集します。

      buildscript {
      
          repositories {
              ...
              google()
              jcenter()
              maven { url "https://jitpack.io" }
              maven { url "https://jcenter.bintray.com" }
          }
          dependencies {
             ...
              classpath 'com.google.gms:google-services:4.2.0'
          }
      }
      
      allprojects {
          repositories {
              ...
              google()
              jcenter()
              maven { url "https://jitpack.io" }
              maven { url "https://jcenter.bintray.com" }
          }
      }
      
    2. 表を参照して以下のコード値を変更し、コードを使用してアプリフォルダの build.gradleファイルを編集します。
      gamepot_payment値は空欄を基本とします。

      説明
      gamepot_project_idGAMEPOTで発行されたプロジェクト ID
      (ダッシュボードプロジェクトの設定 > 一般メニューで確認)
      gamepot_storeストア値googleone、またはgalaxyを入力
      gamepot_app_titleアプリのタイトル(FCM)
      gamepot_push_default_channel変更禁止(登録されている基本チャネル名)
      facebook_app_idFacebookで発行されたアプリ ID
      fb_login_protocol_schemefb[Facebookで発行されたアプリ ID] 例) fb101010
      facebook_client_tokenFacebookコンソール > アプリ > 設定 > 高度な設定 > クライアントトークン
      gamepot_elsa_projectidNAVERクラウド ELSAサービスを使用する場合、ELSAプロジェクト IDを入力
      (Effective Log Search & Analyticsを参照)
      gamepot_regionGAMEPOTダッシュボード作成リージョンがシンガポールの場合のみ sgと入力
      gamepot_license_urlGAMEPOTダッシュボード作成リージョンが日本の場合のみ 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:1.0.0-alpha2'
       implementation 'com.apollographql.apollo:apollo-android-support:1.0.0-alpha2'
       implementation 'com.android.billingclient:billing:5.0.0'
       implementation 'com.google.firebase:firebase-crashlytics-buildtools:2.9.1'
       implementation 'com.github.bumptech.glide:glide:3.7.0'
       implementation 'com.romandanylyk:pageindicatorview:1.0.3'
       implementation 'androidx.sqlite:sqlite-framework:2.0.1'
       implementation 'com.cookpad.puree:puree:4.1.6'
       implementation 'com.google.firebase:firebase-core:18.0.1'
       implementation 'com.google.firebase:firebase-messaging:23.1.2'
       implementation 'com.google.firebase:firebase-iid:21.1.0'
       implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
       // GamePot common [END]
      
       implementation(name: 'gamepot-channel-base', ext: 'aar')
       // GamePot facebook [START]
       implementation(name: 'gamepot-channel-facebook', ext: 'aar')
       implementation 'com.facebook.android:facebook-android-sdk:13.2.0'
       // GamePot facebook [END]
      
       // GamePot google sigin [START]
       implementation(name: 'gamepot-channel-google-signin', ext: 'aar')
       implementation "com.google.android.gms:play-services-auth:19.0.0"
       // GamePot google sigin [END]
      }
      
      // ADD THIS AT THE BOTTOM
      apply plugin: 'com.google.gms.google-services'
      
    3. Google Developer Centerで取得した google-service.jsonファイルを appフォルダにコピーします。

    4. Android Studioを更新します。

    更新に失敗した場合

    更新を行ったとき、案内メッセージが表示されて失敗する場合は、以下のように解決します。

    • メッセージ: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'. It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html
      説明: compile設定は現在サポートされていないので、プロジェクトコードでcompileが入力された部分をimplementationに変更します。

    • メッセージ: No matching client found for package name '[packagename]'
      説明: アプリのパッケージ名と google-service.jsonファイルに宣言されたパッケージ名が一致するように変更します。

    AndroidManifest.xmlの設定

    AndroidManifest.xmlを設定して一般的にゲームに使われる設定値を追加するには、以下のコードを使用します。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">
    
        <!--タブレットなど電話機能のないデバイスでも、ストアからダウンロードできるように設定-->
        <uses-feature android:name="android.hardware.telephony" android:required="false" />
        <!--マイクが付いてないデバイスでも、ボイスチャットに対応するゲームをストアからダウンロードできるように設定-->
        <uses-feature android:name="android.hardware.microphone" android:required="false" />
    
        <!--allowBackupを必ず falseに設定します。falseに設定すると、ゲームが再インストールされたとき、自動的に shared preference値を復旧しません。-->
        <application
            android:name="androidx.multidex.MultiDexApplication"
            android:allowBackup="false"
            tools:replace="android:allowBackup">
    
            <!--resizeableActivity: アプリを画面分割で見る機能を無効化-->
            <activity
                android:resizeableActivity="false">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <!--Galaxy S8のようなスクリーンに対応-->
            <meta-data android:name="android.max_aspect" android:value="2.1" />
    
        </application>
    </manifest>
    

    プッシュ通知アイコンの設定

    プッシュメッセージの受信時に、通知バーに表示するアイコンを設定できます。 別途設定しない場合は、SDKに含まれている基本画像を使用するとともに、ゲームに合ったアイコンを直接設定できます。
    Android Asset Studioを利用して制作すると、自動的にフォルダ別に画像が制作され便利です。

    プッシュ通知アイコンを設定する方法は、以下のとおりです。

    1. 以下のようにプロジェクトパスに res/drawableフォルダをそれぞれ作成し、各サイズの画像ファイルを追加します。
      フォルダ名サイズ
      res/drawable-mdpi/24x24
      res/drawable-hdpi/36x36
      res/drawable-xhdpi/48x48
      res/drawable-xxhdpi/72x72
      res/drawable-xxxhdpi/96x96
    2. 画像ファイル名を ic_stat_gamepot_smallに変更します。

    初期化

    初期化を実行するには、MainActivity.javaファイルで以下のコードを使用します。

    import io.gamepot.common.GamePot;
    import io.gamepot.common.GamePotLocale;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // GAMEPOTの初期化。contextに必ず application contextを入力します。
        // setup APIは、他の APIに先立って最初に呼び出します。
        GamePot.getInstance().setup(getApplicationContext());
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        GamePot.getInstance().onActivityResult(requestCode, resultCode, data);
    }
    
    @Override
    protected void onStart() {
        super.onStart();
        GamePotChat.getInstance().start();
        GamePot.getInstance().onStart(this);
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        GamePotChat.getInstance().stop();
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        GamePot.getInstance().onDestroy();
    }
    

    ログインに関連する機能

    Google、Facebook、NAVERなど様々なログイン SDK機能を統合して GAMEPOT Android SDKで使用できます。

    使用前の設定

    ログインに関連する SDK機能を使用するには、必要なコンソールの設定を完了し、ログインに関連するコードを宣言する必要があります。

    Google Firebaseコンソールの設定

    ログイン機能を使用するために Google Firebaseコンソールを設定するには、APKを構成する際に使った Keystoreファイルの SHA-1値を Firebaseコンソールに追加します。

    Facebookコンソールの設定

    ログイン機能を使用するために Facebookコンソールを設定する方法は、以下のとおりです。

    1. Facebook for Developersコンソールでアプリタイプを NoneConsumerGamingのいずれかにしてアプリを作成します。
    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<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、sdk-auth-1.0.2.aar、sdk-base-1.0.3.aar、sdk-iap-21.00.00.aar
    GALAXY Store In-App SDK付き: gamepot-billing-galaxystore.aar
    My Card In-App SDK付き: gamepot-billing-mycard.aar (Google Storeビルドには含まれないようにします)
    

    In-App購入のための決済機能を使用できます。 決済の結果値は Listenerの形で実装されます。

    ONE Storeの場合、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
        }
    });
    
    

    決済アイテムの支給機能

    決済ストアの領収書の内訳と対照して検証をすべて完了した場合のみ、開発会社のサーバに支給リクエストを転送するように設定できます。

    詳細は、アイテム支給のリクエストをご参照ください。

    My Card決済

    MyCardライブラリ: gamepot-billing-mycard.aar

    参考

    My Cardと連携させるための FacServiceID / KEYの値は、My Card側に確認してからダッシュボードで設定してください。

    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を削除します。

       <application
           android:allowBackup="false"
           android:icon="@mipmap/ic_launcher"
           android:label="@string/app_name"
           android:roundIcon="@mipmap/ic_launcher_round"
           tools:replace="android:allowBackup" >
    
    1. build.gradleファイルに以下のように設定します。
    resValue "string", "gamepot_store", "google"
    resValue "string", "gamepot_payment", "mycard" // ストアが googleの場合にのみ動作します。
    
    1. ../libsフォルダ内に gamepot-billing-mycard.aarが含まれているか確認します。

    2. build.gradleファイル内にビルドする際にライブラリが含められるように設定されているか確認します。

    例) 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画像を設定する方法は、以下のとおりです。

    1. 以下のように rew/drawableフォルダをそれぞれ作成し、各サイズの画像ファイルを追加します。
      フォルダ名サイズ
      res/drawable-mdpi/24x24
      res/drawable-hdpi/36x36
      res/drawable-xhdpi/48x48
      res/drawable-xxhdpi/72x72
      res/drawable-xxxhdpi/96x96
    2. 画像ファイル名を ic_stat_gamepot_smallに変更します。

    クーポン機能

    ユーザーがクーポンを入力すると使用処理する機能を使うには、以下のコードを使用します。

    import io.gamepot.common.GamePot;
    import io.gamepot.common.GamePotError;
    import io.gamepot.common.GamePotListener;
    
    GamePot.getInstance().coupon(/*ユーザーが入力したクーポン*/, new GamePotListener<String>() {
        @Override
        public void onSuccess(String message) {
            // クーポン使用に成功。メッセージ値をポップアップで表示します。
        }
    
        @Override
        public void onFailure(GamePotError error) {
            // クーポン使用に失敗。error.getMessage()を利用してエラーメッセージを表示します。
        }
    });
    

    アイテムの支給

    クーポン使用に成功すると、開発会社のサーバにアイテム支給をリクエストします。

    詳細は、アイテム支給のリクエストをご参照ください。

    プッシュ通知機能

    一般プッシュ通知、夜間プッシュ通知、広告型プッシュの通知機能を有効化または無効化し、ローカルプッシュ通知機能を使用できます。
    広告型プッシュ設定は、プッシュ通知機能を使用する場合に trueにします。(広告型プッシュの値が falseの場合、一般/夜間プッシュの設定に関係なくプッシュは届きません)

    プッシュ通知の有効化および無効化

    プッシュ通知機能を使用するには、以下のコードを使用します。

    import io.gamepot.common.GamePot;
    import io.gamepot.common.GamePotError;
    import io.gamepot.common.GamePotCommonListener;
    
    // プッシュ通知 On/Off
    GamePot.getInstance().setPushEnable(/*true or false*/, new GamePotCommonListener() {
        @Override
        public void onSuccess() {
        }
    
        @Override
        public void onFailure(GamePotError error) {
        }
    });
    
    // 夜間プッシュ通知 On/Off
    GamePot.getInstance().setNightPushEnable(/*true or false*/, new GamePotCommonListener() {
        @Override
        public void onSuccess() {
        }
    
        @Override
        public void onFailure(GamePotError error) {
        }
    });
    
    // プッシュ、夜間プッシュ通知を一度に設定
    // ログイン前にプッシュ、夜間プッシュ通知を許可するかどうかを確認するゲームの場合は、ログインの後に以下のコードを必ず呼び出します。
    GamePot.getInstance().setPushEnable(/*true or false*/, /*true or false*/, true, new GamePotCommonListener() {
        @Override
        public void onSuccess() {
        }
    
        @Override
        public void onFailure(GamePotError error) {
        }
    });
    

    プッシュ通知の状態確認

    現在のプッシュ通知の状態を確認するには、以下のコードを使用します。

    import io.gamepot.common.GamePot;
    import org.json.JSONObject;
    
    // enable: 全体プッシュ通知
    // night: 夜間プッシュ通知
    // {"enable":true, "night":true}
    JSONObject status = GamePot.getInstance().getPushStatus();
    

    ローカルプッシュ通知機能

    プッシュメッセージサーバを介さずにデバイスで独自にプッシュ通知を表示できます。

    プッシュ通知を登録して所定時間にローカルプッシュ通知が表示されるようにするには、以下のコードを使用します。

    String date = "2018-09-27 20:00:00";
    GamePotLocalPushBuilder builder = new GamePotLocalPushBuilder(getActivity())
                            .setTitle("ローカルプッシュ通知テスト")
                            .setMessage("ローカルプッシュ通知のメッセージです。 " + date)
                            .setDateString(date).build();
    int pushid = GamePot.getInstance().sendLocalPush(builder);
    /* pushidの return値は開発会社で管理 */
    

    登録したローカルプッシュ通知のキャンセル

    ローカルプッシュ通知を登録する際に取得したpushid値を使って既に登録されているプッシュ通知をキャンセルするには、以下のコードを使用します。

    GamePot.getInstance().cancelLocalPush(/*現在のアクティビティ*/, /*プッシュ通知の登録の際に取得した pushid*/);
    

    お知らせの画像表示機能

    ダッシュボードのお知らせメニューにアップロードした画像が表示されるように設定できます。 推奨画像サイズは、以下のとおりです。

    • サイズ: 720x1200(Portrait)、1280x640(Landscape)
    • 容量: 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
        game-gamepotandroid_ko
      • EmailView
        gamepot_android_09_1_ko
      • AgreeView
        gamepot_android_09_2_ko

    GDPR規約チェックリスト機能

    ダッシュボードで有効化した GDPRの規約項目をリストの形で取得するには、以下のコードを使用します。

    import io.gamepot.common.GamePot;
    
    (List<String>) GamePot.getInstance().getGDPRCheckedList();
    
    //返される各パラメータは、ダッシュボードの以下の設定に該当します。
    gdpr_privacy: 個人情報の取扱方針
    gdpr_term: 利用規約
    gdpr_gdpr: GDPRの利用規約
    gdpr_push_normal: イベントプッシュ受信に同意
    gdpr_push_night: 夜間イベントプッシュ受信に同意(韓国のみ対象)
    gdpr_adapp_custom: パーソナライズド広告を見るに同意 (GDPR適用国)
    gdpr_adapp_nocustom: 非パーソナライズド広告を見るに同意 (GDPR適用国)
    

    メンテナンスおよび強制アップデート機能

    ゲームのメンテナンスおよび強制アップデート機能を使用できます。 ダッシュボードのメンテナンス&アップデートメニューで各機能を有効にすると動作します。

    メンテナンスおよび強制アップデート機能を使用するには、以下のコードを使用します。

    GamePotChannel.getInstance().login(this, GamePotChannelType.GOOGLE, new GamePotAppStatusChannelListener<GamePotUserInfo>() {
        @Override
        public void onNeedUpdate(GamePotAppStatus status) {
            // 強制アップデートが必要。 以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
            // カスタマイズしたい場合は、以下の 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サーバ ID128
      GamePotSendLogCharacter.PLAYER_ID任意Stringキャラクター ID128
      GamePotSendLogCharacter.USERDATA任意StringETC128
      import android.text.TextUtils;
      
      import io.gamepot.common.GamePotSendLogCharacter;
      import io.gamepot.common.GamePotSendLog;
      
      String name = "キャラクター名";
      String level = "10";
      String serverid = "svn_001";
      String playerid = "283282191001";
      String userdata = "";
      
      GamePotSendLogCharacter obj = new GamePotSendLogCharacter();
      if(!TextUtils.isEmpty(name))
          obj.put(GamePotSendLogCharacter.NAME, name);
      if(!TextUtils.isEmpty(level))
          obj.put(GamePotSendLogCharacter.LEVEL, level);
      if(!TextUtils.isEmpty(serverid))
          obj.put(GamePotSendLogCharacter.SERVER_ID, serverid);
      if(!TextUtils.isEmpty(playerid))
          obj.put(GamePotSendLogCharacter.PLAYER_ID, playerid);
      if(!TextUtils.isEmpty(playerid))
          obj.put(GamePotSendLogCharacter.USERDATA, userdata);
      
      // result: ログ送信に成功すると true、そうでないと false
      boolean result = GamePotSendLog.characterInfo(obj);
      

    AppStatusの確認

    現在クライアントの AppStatusを確認するには、以下のコードを使用します。 (ログイン前のメンテナンス / アップデートの状態確認)

    import io.gamepot.common.GamePot;
    
    GamePot.getInstance().checkAppStatus(new GamePotAppStatusResultListener() {
        @Override
        public void onSuccess(){
       
        }
        @Override
        public void onFailure(GamePotError error){
    
        }
        @Override
        public void onNeedUpdate(GamePotAppStatus status){
            // 強制アップデートが必要。 以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
            // カスタマイズしたい場合は、以下の 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);
      

    この記事は役に立ちましたか?

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