Unity SDK
    • PDF

    Unity SDK

    • PDF

    Article Summary

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

    システム要件

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

    • 最小スペック: 2018.4.0以降
      (下位バージョンの Unityへの対応が必要な場合は、お問い合わせチャネルにてご確認ください。)
    • v.3.1.0以下のバージョンから最新バージョンにアップデートする場合
      Migrationガイドを参考にして Migrationを行ってください。
    • 2019.3.X以降のバージョンを使用する場合
      GAMEPOT FAQで説明する追加設定事項を必ずご参照ください。
    • 2019.4.X / 2020.3.X / 2021.1.Xバージョンの Unityエディタのユーザーは、2019.4.29f1以降、2020.3.36f1以降、2021.1.16f1以降のバージョンを使用することをお勧めします。(AABバージョンをビルドする際に Unityエディタのバグを修正したバージョン、2020.3.35以下バージョンの場合、Android 31をビルドする際に Bluetoothイヤホンを接続するとアプリのクラッシュが発生するのを修正したバージョン)

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

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

    GAMEPOT SDKでサポートしている言語は以下のとおりです。

    • 韓国語、英語、イタリア語、タイ語、ベトナム語、日本語、中国語(簡体字/繁体字)、インドネシア語、ドイツ語、スペイン語、フランス語

    アプリ実行時にデバイスの言語によって SDK内サポート言語で表記され、サポートされていない言語は英語で表記されます。

    IOSの場合)

    • XCode > localizationに適用したい言語を追加します。
    • ビルド時のバージョンコードは整数形式でユニークに増加する方式にします。

    SDKのインストール

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

    1. 管理者アカウントでダッシュボードにログインします。
    2. SDKのダウンロード > Unityメニューを順にクリックし、ダウンロードをクリックします。
    3. Unityの **Assets > Import Package > Custom Package...**メニューを順にクリックし、GamePotUnityPlugin-xxxx.unitypackageファイルを読み込みます。

    Android環境の設定

    GAMEPOT Unity SDKを使用して Androidベースのゲームを開発するには、必要な環境を設定する必要があります。

    最小スペックの設定

    アプリをインストールおよび実行できる最小スペックを設定するには、以下のコードを使用します。

    minSdkVersion: API 19以降(Kitkat)
    

    Gradleの編集

    Gradleファイルを編集するには、表を参照して以下のコードに値を入力し、コードを使用して設定を変更します。

    • ../Assets/Plugin/Android/mainTemplate.gradleファイルをエディタで開きます。(Unity 2019.3.X以降のバージョンからは launcherTemplate.gradleファイルを編集)
    • Facebookログインを使用しないお客様は、facebook_app_id/fb_login_protocol_scheme値を以下のように任意設定するか、ビルド時に../Assets/Plugins/Android/libs/gamepot-channel-facebook.aarファイルが含まれないように設定します。

    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_schemeFacebookで発行されたアプリ ID
    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 {
            ...
            resValue "string", "gamepot_project_id", "" // required
            resValue "string", "gamepot_store", "google" // required
            resValue "string", "gamepot_app_title","@string/app_name" // required (fcm)
            resValue "string", "gamepot_push_default_channel","Default" // required (fcm)
            resValue "string", "facebook_app_id", "0" // optional (facebook)
            resValue "string", "fb_login_protocol_scheme", "fb0" // optional (facebook)
             resValue "string", "facebook_client_token", "" // Facebookコンソール > アプリ > 設定 > 高度な設定 > クライアントトークン optional (facebook)
            // resValue "string", "gamepot_elsa_projectid", "" // optional (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
        }
        ...
    }
    

    gradleTemplateの編集(Unity 2022.2以降のバージョン)

    Edit > Project Settings > Player > Publishing Settings > Custom Gradle properties Templateをクリックします。

    • このオプションを有効化すると、Assets/Plugins/Android/gradleTemplate.propertiesファイルが作成されます。

    image.png

    gradleTemplate.propertiesファイルに以下の内容を追加してください。

    android.useAndroidX=true
    android.enableJetifier=true

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

    プッシュメッセージの受信時に、通知バーに表示するアイコンを設定できます。別途設定しない場合は、SDKに含まれている基本画像を使用するとともに、ゲームに合ったアイコンを直接設定できます。

    Android Asset Studioを利用して制作すると、自動的にフォルダ別に画像が制作され便利です。

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

    1. 以下のようにプロジェクトパスに res/drawableフォルダをそれぞれ作成し、各サイズの画像ファイルを追加します。

      フォルダ名サイズ
      /Assets/Plugins/Android/GamePotResources/res/drawable-mdpi/24x24
      /Assets/Plugins/Android/GamePotResources/res/drawable-hdpi/36x36
      /Assets/Plugins/Android/GamePotResources/res/drawable-xhdpi/48x48
      /Assets/Plugins/Android/GamePotResources/res/drawable-xxhdpi/72x72
      /Assets/Plugins/Android/GamePotResources/res/drawable-xxxhdpi/96x96

      Unityエンジン202x以後からは、GamePotResources.androidlibフォルダに入れ、mainTemplate.gradleにそのリソースフォルダを追加します。

      ...
          implementation project('GamePotResources.androidlib')
      ...
      
    2. 画像ファイル名を ic_stat_gamepot_smallに変更します。

    Screen Orientationの設定

    ゲームに合わせて Screen Orientationを設定する方法は、以下のとおりです。

    1. /Assets/Plugin/Android/AndroidManifest.xmlファイルを Unityで開きます。
    2. Main Activityに以下のコードを追加し、ゲームに合わせてsensorLandscapeまたはsensorPortraitを値として入力します。
      ...
          <activity android:screenOrientation="sensorLandscape">
            <intent-filter>
              <action android:name="android.intent.action.MAIN" />
                ...
            </intent-filter>
          </activity>
      ...
      

    Android Resolver、Unity Buildの設定

    SDKを使用するには、以下のように Android Resolverおよび Unity Buildを設定します。

    • Android Resolver
      Unityの Assets > Play Services Resolver > Android Resolver > Settingsメニューのうち Use Jetifierを選択します。
      Enable Resolution On Build / Enable Auto-Resolution / Patch gradle Template.properties項目は選択を解除します。

    • Unity Build
      Unityで File > Build Settings > Build Systemメニューを順にクリックし、Gradleを選択します。

    iOS環境の設定

    GAMEPOT Unity SDKを使用して iOSベースのゲームを開発するには、必要な環境を設定する必要があります。

    プロジェクトの構成

    iOS環境を設定するためにプロジェクトを構成する方法は、以下のとおりです。

    1. Google Firebaseコンソールで取得した GoogleService-Info.plistファイルを Unityプロジェクトに追加します。

    2. 表を参照してプロジェクトの GamePotConfig-Info.plistファイルで以下の設定を変更します。
      (Facebookログインを使用しない場合、ビルド時に GamePotFacebook.frameworkが含まれないようにします)

      環境変数説明
      gamepot_project_idGAMEPOTで発行されたプロジェクト ID
      gamepot_facebook_app_idFacebookコンソールで取得したアプリ ID
      gamepot_facebook_display_nameFacebookに表示される名前
      gamepot_facebook_client_token// Facebookコンソール > アプリ > 設定 > 高度な設定 > クライアントトークン
      gamepot_google_app_idGoogleService-InfoファイルのCLIENT_ID
      gamepot_google_url_schemesGoogleService-InfoファイルのREVERSED_CLIENT_ID
      gamepot_elsa_projectidNAVERクラウド ELSA使用時のプロジェクト ID
      gamepot_regionGAMEPOTダッシュボード作成リージョンがシンガポールの場合のみ sgと入力
      gamepot_license_urlGAMEPOTダッシュボード作成リージョンが日本の場合のみ https://gamepot.apigw.ntruss.com/fw/jp-v1を入力
    3. Targetを選択し、Info > Custom iOS Target Propertiesメニューで以下のユーザー権限取得オプションを追加します。(Xcode基準)

      • このユーザー権限は GAMEPOTサポート内のファイルアップロード機能で使用されます。
        NSCameraUsageDescription, NSPhotoLibraryUsageDescription, NSMicrophoneUsageDescription
      • iOS 14バージョンから IDFA値を取得する際に、ユーザーから権限を取得しないと IDFA値を取得できないようになりました。従って、IDFA値を取得する際にユーザーから権限を取得するポップアップを使用する場合は、Targets >> Info >> Custom iOS Target Propertiesに以下のユーザー権限取得オプションを追加してください。(収集する目的と使用先についての説明が必要です)
        NSUserTrackingUsageDescription

    <例> GAMEPOTのサンプル画面
    File > Build Settingsメニューで GamePotSample>Scene>Login, Mainを追加して > Buildしたら、サンプル画面を確認できます。

    初期化

    初期化を実行するには、ゲームを始める際にロードされる最初の画面に使用されるインスタンスに、以下のコードを追加します。

    using GamePotUnity;
    public class GamePotLoginSampleScene : MonoBehaviour {
        void Awake() {
            GamePot.initPlugin();
        }
        void Start () {
            GamePot.setListener(GamePotInterface.csを継承された class);
        }
    
    }
    
    ex)
    public class GamePotSampleListener : MonoBehaviour , IGamePot {
        ....
    }
    

    エラーコードの設定

    エラーコードを設定するには以下のコードを使用します。

    public class NError
    {
        // 不明なエラー
        public static readonly int CODE_UNKNOWN_ERROR           = 0;
        // 初期化に失敗
        public static readonly int CODE_NOT_INITALIZE           = 1;
        // パラメータが正しくない場合
        public static readonly int CODE_INVAILD_PARAM           = 2;
        // メンバー IDデータがない場合
        public static readonly int CODE_MEMBERID_IS_EMPTY       = 3;
        // ログインされていない状態
        public static readonly int CODE_NOT_SIGNIN              = 4;
        // ネットワークモジュールが初期化されなかった場合
        public static readonly int CODE_NETWORK_MODULE_NOT_INIT = 3000;
        // ネットワークコネクションエラーおよびタイムアウトが発生した場合
        public static readonly int CODE_NETWORK_ERROR           = 3001;
        // server-sideで発生するエラー
        public static readonly int CODE_SERVER_ERROR            = 4000;
        // http response codeが成功していない場合
        public static readonly int CODE_SERVER_HTTP_ERROR       = 4001;
        // ネットワークコネクションエラーおよびタイムアウトが発生した場合
        public static readonly int CODE_SERVER_NETWORK_ERROR    = 4002;
        // サーバから取得したデータをパースする際のエラー
        public static readonly int CODE_SERVER_PARSING_ERROR    = 4003;
        // 決済で不明なエラー発生およびストア側からエラーを伝達する場合
        public static readonly int CODE_CHARGE_UNKNOWN_ERROR    = 5000;
        // product idを入力しなかった場合
        public static readonly int CODE_CHARGE_PRODUCTID_EMPTY  = 5001;
        // product idを正しく入力しなかった場合
        public static readonly int CODE_CHARGE_PRODUCTID_WRONG  = 5002;
        // consume時のエラー
        public static readonly int CODE_CHARGE_CONSUME_ERROR    = 5003;
    
        // error Code
        public int code { get; set; }
        // error Message
        public string message { get; set; }
    }
    

    ログインに関連する機能

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

    使用前の設定

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

    Googleログイン環境の設定

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

    1. Google Firebaseコンソールで取得した Android用 google-service.jsonファイルを/Assets/Plugins/Android/パスにコピーします。
    2. APKを構成する際に使用した Keystoreファイルの SHA-1値を Firebaseコンソールに追加します。
    • Googleログインを行う際に、onCancelレスポンスと一緒にログインされない場合は、以下のように解決してください。
      • google-service.jsonファイルを正常に適用したか確認します
      • APKを構成する際に使用した Keystoreと、Firebaseコンソールを登録するために SHA-1値を抽出した Keystoreが同じインスタンスであるかどうかを確認
      • Firebaseコンソールに登録したパッケージ名でビルドしたかどうかを確認

    Facebookログイン環境の設定

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

    1. Facebook for Developersコンソールでアプリタイプを NoneConsumerInstant Gamesのいずれかにしてアプリを作成します。
    2. APKを構成する際に使用した Keystoreのキーハッシュ値を Facebook for Developersコンソールに追加します。
    3. Facebook for Developersコンソールで取得したアプリ IDと関連情報を追加します。
    • Android
      • mainTemplate.gradleを編集(Unity 2019以降のバージョンからは launcherTemplate.gradleで編集)
      ...
      defaultConfig {
          resValue "string", "facebook_app_id", "{アプリ ID}"
          resValue "string", "fb_login_protocol_scheme", "fb{アプリ ID}"
          resValue "string", "facebook_client_token", "" // Facebookコンソール > アプリ > 設定 > 高度な設定 > クライアントトークン optional (facebook)
      }
      ...
      
      


    • iOS
      • GamepotConfig-info.plistファイルの編集
      gamepot_facebook_app_id // Facebookアプリ ID
      gamepot_facebook_display_name // Facebookに表示される名前
      gamepot_facebook_client_token  //  // Facebookコンソール > アプリ > 設定 > 詳細設定 > クライアントトークン 
      
      SourceCodeで確認する場合は以下のように追加
      ...
       <key>gamepot_facebook_app_id</key>
       <string>xxxxxx</string>
       <key>gamepot_facebook_display_name</key>
       <string>xxxxxx</string>
       <key>gamepot_facebook_client_token</key>
       <string>xxxxxx</string>
       ...
      
    1. プロジェクト/Assets/Plugins/IOS/Frameworksパスに以下のフレームワークを追加します。
      • FBSDKLoginKit.xcframework, FBSDKCoreKit_Basics.xcframework, FBSDKCoreKit.xcframework, FBAEMKit.xcframework, FBSDKCoreKit.framework, GamePotFacebook.framework

    Appleログイン環境の設定

    iOS専用 Appleログイン環境を設定するには、プロジェクトで Targetを選択し、Signing & Capabilitiesメニューで Sign In with Apple Capabilityを追加します。

    ゲームセンターログイン環境の設定

    iOS専用ゲームセンターログイン環境を設定する方法は、以下のとおりです。

    1. プロジェクト Assets/Plugins/IOS/etcFrameworks/パスで GamePotGameCenter.frameworkを選択し、Select platforms for pluginリストの iOS設定を選択します。
    2. Xcodeで Targetを選択し、Build Phases > Linked Binary With Librariesメニューに Gamekit.frameworkを追加します。
    3. Signing & Capabilitiesメニューで GameCenter Capabilityを追加します。

    ログイン機能

    開発会社で実装したログイン UIにより、ログインボタンをクリックしたときに動作する SDKログイン機能を使用するには、以下のコードを使用します。

    • 方式1

      GamePot.login(NCommon.LoginType);
      
      // ログインに成功
      public void onLoginSuccess(NUserInfo userInfo)
      {
      }
      // ログインに失敗
      public void onLoginFailure(NError error)
      {
          // error.messageを利用してメッセージを表示します。
      }
      // ログインをキャンセル
      public void onLoginCancel()
      {
          // ユーザーがログインをキャンセル
      }
      // 強制アップデート(ストアバージョンとゲームクライアントバージョンが異なる場合に呼び出す)
      public void onNeedUpdate(NAppStatus status)
      {
          // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
          //ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
          // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
          // GamePot.showAppStatusPopup(status.ToJson());
      }
      // メンテナンス(ダッシュボードでメンテナンスが有効化している場合に呼び出す)
      public void onMainternance(NAppStatus status)
      {
           // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
          //ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
          // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
          // GamePot.showAppStatusPopup(status.ToJson());
      }
      // アプリを終了
      public void onAppClose()
      {
          //強制アップデートやメンテナンス機能をケース2方式で実装する場合は、アプリを強制終了できるため、ここでアプリを終了できるように実装します。
      }
      
    • 方式2

      GamePot.login(NCommon.LoginType.GOOGLE, GamePotCallbackDelegate.CB_Login);
      
      GamePot.login(NCommon.LoginType.GOOGLE, (resultState, userInfo, appStatus, error) => {
          switch (resultState)
          {
              case NCommon.ResultLogin.SUCCESS:
              // login success
              break;
              case NCommon.ResultLogin.CANCELLED:
              // login cancel
              break;
              case NCommon.ResultLogin.FAILED:
              // login fail
              break;
              case NCommon.ResultLogin.NEED_UPDATE:
                  // パラメータで渡された appStatus情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
                  //ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
                  // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
                  // GamePot.showAppStatusPopup(status.ToJson());
              break;
              case NCommon.ResultLogin.MAINTENANCE:
                  // パラメータで渡された appStatus情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
                  //ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
                  // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
                  // GamePot.showAppStatusPopup(status.ToJson());
              break;
              case NCommon.ResultLogin.APP_CLOSE:
                  //強制アップデートやメンテナンス機能をケース2方式で実装する場合は、アプリを強制終了できるため、ここでアプリを終了できるように実装します。
              break;
              default:
              break;
          }
      });
      

    LoginType、NUserInfo、NAppStatusの定義

    ログイン機能の各種パラメータを設定するには、以下のコードを使用します。

    • LoginType
      public enum LoginType
      {
          NONE,
          GOOGLE,
          GOOGLEPLAY,
          FACEBOOK,
          NAVER,
          GAMECENTER,
          TWITTER,
          LINE,
          APPLE,
          GUEST,
          THIRDPARTYSDK
      }
      
    • NUserInfo
      public class NUserInfo
      {
          public string memberid { get; set; }        // ユーザーの固有 ID
          public string name { get; set; }            // 名前
          public string profileUrl { get; set; }      // プロフィール URL(ある場合)
          public string email { get; set; }           // メールアドレス(ある場合)
          public string token { get; set; }           // ユーザーの有効性検証用 Token(Token Authentication APIで使用)
          public string userid { get; set; }          // ソーシャルメディア ID
      }
      
    • NAppStatus
      public class NAppStatus
      {
          public string type { get; set; }        // AppStatusタイプで「maintenance」: メンテナンス、「needupdate」: アップデート
          public string message { get; set; }     // メンテナンス設定: Dashboardで入力したメッセージ
          public string url { get; set; }         // メンテナンス設定: Dashboardで入力した URL
          public string currentAppVersion { get; set; }   // アップデート: 現在の App Version
          public string updateAppVersion { get; set; }    // アップデート: Dashboardで入力した App Version
          public int currentAppVersionCode { get; set; }  // アップデート: 現在の App Code
          public int updateAppVersionCode { get; set; }   // アップデート: Dashboardで入力した App Version code
          public bool isForce { get; set; }           // アップデート: Dashboardで強制アップデート設定時、true
          public string resultPayload { get; set; }   // クライアント SDKから伝達された JSON値で、無視します。
          public double startedAt { get; set; }       // メンテナンス: 開始時間
          public double endedAt { get; set; }         // メンテナンス: 終了時間
      }
      

    IDFA値取得のための権限リクエストポップアップの設定

    iOSプラットフォームでユーザーの IDFA値取得のための権限をリクエストするポップアップを使用するには、以下のコードを使用します。

    //IDFA値取得権限リクエストポップアップを任意で表示できます。
    // 権限を取得した後は、メソッドを呼び出してもポップアップは表示されません。
    
    GamePot.requestTrackingAuthorization((NResultTrackingAuthorizationresultState) =>
    {
       // 取得した NResultTrackingAuthorizationresultStateハンドリング..
    });
    


    • NResultTrackingAuthorizationresultState定義
      public class NResultTrackingAuthorization
      {
          public NCommon.ResultTrackingAuthorization authorization { get; set; }
      }
      
      public enum ResultTrackingAuthorization
      {
          ATTrackingManagerAuthorizationStatusNotDetermined,
          ATTrackingManagerAuthorizationStatusRestricted,
          ATTrackingManagerAuthorizationStatusDenied,
          ATTrackingManagerAuthorizationStatusAuthorized,
          ATTrackingManagerAuthorizationStatusUnknown
      }
      

    会員の固有 IDの取得

    ゲーム会員の固有 ID値を取得するには、以下のコードを使用します。

    GamePot.getMemberId();
    

    アカウント別ログイン機能の使用

    アカウント別のログイン機能を使用するには、以下のコードを使用して設定を適用します。

    NAVERログイン

    NAVERログイン機能を使用するには、NAVER Developersコンソールの APIで NAVER IDでログインを選択してアプリを登録し、以下のコードを使用します。

    • Android
      • mainTemplate.gradleの編集
      ...
      defaultConfig {
          resValue "string", "gamepot_naver_clientid", "abcdefg1234567890"
          resValue "string", "gamepot_naver_secretid", "hijklmn"
      }
      ...
      
      // NAVER Developersコンソールで取得した Client IDを gamepot_naver_clientid値に入力し、Client Secretを gamepot_naver_secretid値に入力します。
          ```
      


    • iOS
      • GamepotConfig-info.plistファイルの編集
      gamepot_naver_clientid // NAVERで使用する client ID
      gamepot_naver_secretid // NAVERで使用する secret ID
      gamepot_naver_urlscheme // NAVERで使用する URL Scheme
      
      SourceCodeで確認する場合は以下のように追加
      ...
       <key>gamepot_naver_clientid</key>
       <string>xxxxxx</string>
       <key>gamepot_naver_secretid</key>
       <string>xxxxxx</string>
       <key>gamepot_naver_urlscheme</key>
       <string>xxxxxx</string>
       ...
      
      • プロジェクト Info > URL Typesメニューに NAVER IDでログイン設定に登録した URL Schemeを追加

    LINEログイン

    LINEログイン機能を使用するには、APKを構成する際に使用したパッケージ名、Keystoreの SHA-1値、URL Scheme値を LINE Developersコンソールに追加し、以下のコードを使用します。

    • Android
      • mainTemplate.gradleの編集
      ...
      defaultConfig {
          resValue "string", "gamepot_line_channelid","xxxxxxx"
      }
      ...
      
      // LINE Developersコンソールで取得した Client IDを gamepot_line_channelid値に入力します。
      


    • iOS
      • GamepotConfig-info.plistファイルの編集
      gamepot_line_channelid // NAVERで使用する client ID
      gamepot_line_url_schemes // Line URL Scheme (line3rdp.{プロジェクトバンドル identifier})
      
      SourceCodeで確認する場合は以下のように追加
      ...
       <key>gamepot_line_channelid</key>
       <string>xxxxxx</string>
       <key>gamepot_line_url_schemes</key>
       <string>xxxxxx</string>
       ...
      

    Appleウェブログイン

    Appleウェブログイン機能を使用するには、ダッシュボードのプロジェクトの設定 > 一般メニューで Apple ID Loginを設定し、プロジェクト/Assets/Plugins/Android/libsパスで gamepot-channel-apple-signin.aarファイルを追加します。

    自動ログイン機能

    会員の最後のログイン情報を伝達する APIで自動ログイン機能を使用するには、以下のコードを使用します。

    NCommon.LoginType type = GamePot.getLastLoginType();
    if(type != NCommon.LoginType.NONE) {
    {
        // 最後にログインしたログインタイプでログインする方式です。
        GamePot.login(type);
    }
    else
    {
        // 初めてゲームを実行したか、ログアウトした状態。ログインできるログイン画面に移動します。
    }
    

    ログアウト機能

    ログアウト機能を使用するには、以下のコードを使用します。

    • 方式1
    GamePot.logout();
    
    // ログアウト成功
    public void onLogoutSuccess()
    {
    }
    
    // ログアウト失敗
    public void onLogoutFailure(NError error)
    {
        // error.messageを利用してメッセージを表示します。
    }
    
    • 方式2
    GamePot.logout(GamePotCallbackDelegate.CB_Common);
    
    GamePot.logout((success, error) => {
       if(success)
       {
           // ログアウト成功
       }
       else
       {
            // ログアウト失敗
            // error.messageを利用してメッセージを表示します。
       }
    });
    
    

    会員退会機能

    会員退会機能を使用するには、以下のコードを使用します。

    • 方式1
    GamePot.deleteMember();
    
    // 会員退会成功
    public void onDeleteMemberSuccess() {
    }
    
    // 会員退会失敗
    public void  onDeleteMemberFailure(NError error) {
        // error.messageを利用してメッセージを表示します。
    }
    
    • 方式2
    GamePot.deleteMember(GamePotCallbackDelegate.CB_Common);
    
    GamePot.deleteMember((success, error) => {
       if(success)
       {
            // 会員退会に成功
       }
       else
       {
            // 会員退会に失敗
            // error.messageを利用してメッセージを表示します。
       }
    });
    

    ログイン検証機能

    ログイン完了後、ログイン情報を開発会社のサーバから GAMEPOTサーバに伝達してログイン検証を行えます。

    詳細は、ログイン検証リクエストをご参照ください。

    外部アカウントとの連携

    一つのゲームアカウントに複数の外部アカウントを連携したり、解除できます。

    アカウント連携機能

    Google、Facebook、NAVERなど様々な外部アカウントとの連携機能を使用するには、以下のコードを使用します。

    • 方式1
    public enum LinkingType
    {
        GOOGLEPLAY,
        GAMECENTER,
        GOOGLE,
        FACEBOOK,
        NAVER,
        TWITTER,
        LINE,
        APPLE
    }
    
    void GamePot.createLinking(NCommon.LinkingType.XXXXX);
    
    // アカウント連携キャンセル
    public void onCreateLinkingCancel() {
        // ユーザーがアカウント連携をキャンセル
    }
    
    // アカウント連携成功
    public void onCreateLinkingSuccess(NUserInfo userInfo) {
    }
    
    // アカウント連携失敗
    public void onCreateLinkingFailure(NError error) {
        // error.messageを利用してメッセージを表示します。
    }
    
    • 方式2
    public enum LinkingType
    {
        GOOGLEPLAY,
        GAMECENTER,
        GOOGLE,
        FACEBOOK,
        NAVER,
        TWITTER,
        LINE,
        APPLE
    }
    
    void GamePot.createLinking(NCommon.LinkingType.XXXXX, GamePotCallbackDelegate.CB_CreateLinking);
    
    GamePot.createLinking(NCommon.LinkingType.XXXXX, (resultState, userInfo, error) => {
          switch (resultState)
        {
            case NCommon.ResultLinking.SUCCESS:
            // アカウント連携に成功
            break;
            case NCommon.ResultLinking.CANCELLED:
            // アカウント連携をキャンセル
            break;
            case NCommon.ResultLinking.FAILED:
            // アカウント連携に失敗
            break;
            default:
            break;
        }
    });
    

    連携リスト確認機能

    アカウントに連携された外部アカウントリストを確認するには、以下のコードを使用します。

    List<NLinkingInfo> linkedList = GamePot.getLinkedList();
    
    //リンク情報の定義
    public class NLinkingInfo
    {
        public LinkingType provider { get; set; }  // google, facebook, naver, apple..
    }
    

    連携解除機能

    外部アカウントとの連携解除機能を使用するには、以下のコードを使用します。

    • 方式1
    void GamePot.deleteLinking(NCommon.LinkingType.XXXXX);
    
    // アカウント連携の解除成功
    public void onDeleteLinkingSuccess() {
    }
    
    // アカウント連携の解除失敗
    public void onDeleteLinkingFailure(NError error) {
        // 連携解除に失敗した場合
        // error.messageを利用してメッセージを表示します。
    }
    
    • 方式2
    void GamePot.deleteLinking(NCommon.LinkingType.XXXXX, GamePotCallbackDelegate.CB_Common);
    
    GamePot.deleteLinking(NCommon.LinkingType.XXXXX, (success, error) => {
        if(success)
        {
           // アカウント連携の解除に成功
        }
       else
       {
            // 連携解除に失敗した場合
            // error.messageを利用してメッセージを表示します。
        }
    });
    

    決済機能

    参考

    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
    • MyCard In-App SDK付き: gamepot-billing-mycard.aar(Google Storeビルドには含まれないようにします)

    In-App購入のための決済機能を使用できます。

    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>
    

    In-App商品の照会機能

    ストアに登録されている商品情報の照会機能を使用するには、以下のコードを使用します。

    ログイン成功後、呼び出しが必要な APIで getPurchaseItems APIの場合、非同期的にストア In-App SDKから受け取った内容を伝える APIのため、呼び出すタイミングによっては空の値で伝達されることがあります。(決済可能な環境基準)

    [Case1]:
    
    NPurchaseItem[] items = GamePot.getPurchaseItems();
    foreach(NPurchaseItem item in items) {
        Debug.Log(item.productId);        // 商品 ID
        Debug.Log(item.price);            // 価格
        Debug.Log(item.title);            // タイトル
        Debug.Log(item.description);    // 説明
    }
    
    [Case2]:
    
    GamePot.getPurchaseDetailListAsync((bool success, NPurchaseItem[] purchaseInfoList, NError error) =>
    {
       // string result = "data is empty!";
        if (success)
        {
             //PurchaseDetailList API Success
            // if (purchaseInfoList != null)
            //     result = purchaseInfoList[0].productId;
            //if (purchaseInfoList.Length > 1)
            //{
            //    for (int i = 1; i < purchaseInfoList.Length; i++)
            //        result += "\n" + purchaseInfoList[i].productId;
            //}
        }
        else
        {
            // APIエラー 
            // result = error.ToJson();
        }
    
    });
    
    
    public class NPurchaseItem
    {
        public string productId { get; set; }   // 商品 ID
        public string type { get; set; }        // 商品タイプ。「inapp」に固定
        public string price { get; set; }       // 価格 googleストア: $0.99、その他のストア: 0.99
        public string price_amount { get; set; }
        public string price_amount_micros { get; set; }
        public string price_currency_code { get; set; } // 通貨コード 例) KRW、USD
        public string price_with_currency { get; set; } // (UIに表示する場合に推奨)通貨と価格を合わせた値。ONE Storeの場合、通貨単位は伝達されません。例) $0.99
        public string title { get; set; }       // 商品名
        public string description { get; set; } // 商品説明
    }
    
    [Case3]:
    
    GamePot.getPurchaseDetailListAsync();
    
    public void onPurchaseDetailListSuccess(NPurchaseItem[] purchaseInfoList)
    {
        //PurchaseDetailList API Success
    }
    
    public void onPurchaseDetailListFailure(NError error)
    {
           // APIエラー 
    }
    

    決済試行機能

    一つの決済 APIで Google Play Storeと APPSTOREの両方で決済試行機能を使用できます。
    (ONE Storeバージョンは、uniqueId+serverId+playerId+etc 1つの長さが85byte未満の場合に決済できます)

    決済試行機能を使用するには、以下のコードを使用します。

    • 方式1

    // productId: ストアに登録されている商品 ID
    // uniqueId: 別途管理する領収証番号
    // serverId: 決済を行ったキャラクターのサーバ ID
    // playerId: 決済を行ったキャラクターのキャラクター ID
    // etc : 決済を行ったキャラクターのその他の情報

    
    GamePot.purchase(string productId);
    
    GamePot.purchase(string productId, string uniqueId);
    
    GamePot.purchase(string productId, string uniqueId, string serverId, string playerId, string etc);
    
    // In-App決済成功
    public void onPurchaseSuccess(NPurchaseInfo purchase) {
    }
    
    // In-App決済失敗
    public void onPurchaseFailure(NError error) {
        // In-App決済に失敗
        // error.messageを利用してメッセージを表示します。
    }
    
    // In-App決済失敗
    public void onPurchaseCancel() {
    }
    
    • 方式2
    // productId: ストアに登録されている商品 ID
    GamePot.purchase(string productId, GamePotCallbackDelegate.CB_Purchase);
    
    GamePot.purchase(string productId, string uniqueId, GamePotCallbackDelegate.CB_Purchase);
    
    GamePot.purchase(string productId, string uniqueId, string serverId, string playerId, string etc, GamePotCallbackDelegate.CB_Purchase);
    
    GamePot.purchase(productId, (resultState, purchaseInfo, error) => {
          switch (resultState)
        {
            case NCommon.ResultPurchase.SUCCESS:
            // purchase success
            break;
            case NCommon.ResultPurchase.CANCELLED:
            // purchase cancel
            break;
            case NCommon.ResultPurchase.FAILED:
            // purchase fail
            break;
            default:
            break;
        }
    });
    

    決済アイテム情報の取得機能

    ストアに伝達する In-App決済アイテム情報の取得機能を使用するには、以下のコードを使用します。

    public class NPurchaseInfo
    {
        public string price { get; set; }               // 決済アイテムの価格
        public string productId { get; set; }           // 決済アイテム ID
        public string currency { get; set; }            // 決済価格通貨(KRW/USD)
        public string orderId { get; set; }             // ストア Order ID
        public string productName { get; set; }         // 決済アイテム名
        public string gamepotOrderId { get; set; }      // GAMEPOTで作成した Order ID(当該値を提供しない) 
        public string uniqueId { get; set; }            // 開発会社で別途管理する領収証 ID
        public string serverId { get; set; }            // 決済を行ったキャラクターのサーバ ID
        public string playerId { get; set; }            // 決済を行ったキャラクターのキャラクター ID
        public string etc { get; set; }                 // 決済を行ったキャラクターのその他の情報
        public string signature { get; set; }           // 決済 Signature
        public string originalJSONData { get; set; }    // 領収証データ
    }
    

    決済アイテムの支給機能

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

    MyCard決済

    MyCardライブラリ: 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. ../Assets/Plugins/Android/AndroidManifest.xmlファイルでレベルの名前を削除します。

      <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
      <application android:icon="@drawable/app_icon"
          android:label="@string/app_name"
          android:allowBackup="false"
          tools:replace="android:allowBackup"
          >
    
    1. ../Assets/Plugins/Android/mainTemplate.gradleファイルに以下のように設定します。
      (Unity 2019.3.X以降のバージョンからは launcherTemplate.gradleファイルを編集)
    resValue "string", "gamepot_store", "google"
    resValue "string", "gamepot_payment", "mycard" // ストアが googleの場合にのみ動作します。
    
    1. ../Assets/Plugins/Android/libsフォルダ内に gamepot-billing-mycard.aarが含まれているか確認します。

    外部決済

    外部決済モジュールと連携するには、まず外部決済とのサービス連携を参照して設定を完了し、以下のコードを使用します。

    • 方式1
    GamePot.purchaseThirdPayments(string productId);
    
    // 返されるデータ形式は getPurchaseItems()と同じです。
    GamePot.getPurchaseThirdPaymentsItems();
    
    • 方式2
    GamePot.purchaseThirdPayments(string productId, GamePotCallbackDelegate.CB_Purchase);
    
    // 返されるデータ形式は getPurchaseItems()と同じです。
    GamePot.purchase(productId, (resultState, purchaseInfo, error) => {
          switch (resultState)
        {
            case NCommon.ResultPurchase.SUCCESS:
            // purchase success
            break;
            case NCommon.ResultPurchase.CANCELLED:
            // purchase cancel
            break;
            case NCommon.ResultPurchase.FAILED:
            // purchase fail
            break;
            default:
            break;
        }
    });
    

    SDK独自提供のログイン UI

    GAMEPOT Unity SDKが提供する完成された形のログイン UIを使用できます。

    SDK独自提供のログイン UIの呼び出し

    GAMEPOT Unity SDKが提供するログイン UIを呼び出すには、以下のコードを使用します。

    • 方式1
    public class NLoginUIInfo
    {
        public NCommon.LoginType[] loginTypes { get; set; }     // 表示する Login UIタイプ(配列)
        public bool showLogo { get; set; }                      // 画像ロゴを表示するかどうか
    }
     NLoginUIInfo info = new NLoginUIInfo();
    
    //呼び出すログインUIタイプ
     info.loginTypes = new NCommon.LoginType[]
     {
         NCommon.LoginType.GOOGLE,
         NCommon.LoginType.FACEBOOK,
         NCommon.LoginType.GUEST
         ...
     };
     info.showLogo = true;
    
    GamePot.showLoginWithUI(info);
    
    //一般ログイン APIレスポンスロジックと同じです。ただし、onLoginCancel / onLoginFailureの場合、Nativeレベルでトーストメッセージで処理されます。
    
    // ログインに成功
    public void onLoginSuccess(NUserInfo userInfo)
    {
    }
    // 強制アップデート(ストアバージョンとゲームクライアントバージョンが異なる場合に呼び出す)
    public void onNeedUpdate(NAppStatus status)
    {
       // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
       //ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
       // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
       // GamePot.showAppStatusPopup(status.ToJson());
    }
    // メンテナンス(ダッシュボードでメンテナンスが有効化している場合に呼び出す)
    public void onMainternance(NAppStatus status)
    {
       // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
       //ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
       // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
       // GamePot.showAppStatusPopup(status.ToJson());
    }
    // アプリを終了
    public void onAppClose()
    {
       //強制アップデートやメンテナンス機能をケース2方式で実装する場合は、アプリを強制終了できるため、ここでアプリを終了できるように実装します。
    }
    
    public void onLoginExit()
    {
       // 独自提供ログイン UIを閉じたとき
    }       
           
    
    • 方式2
    GamePot.showLoginWithUI(NLoginUIInfo, GamePotCallbackDelegate.CB_Login);
    
     GamePot.showLoginWithUI(NLoginUIInfo, (resultState, userInfo, appStatus, error) => {
        switch (resultState)
        {
            case NCommon.ResultLogin.SUCCESS:
              // login success
            break;
            case NCommon.ResultLogin.EXIT:
                // 独自提供ログイン UIを閉じたとき
            break;
             case NCommon.ResultLogin.NEED_UPDATE:
                // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
                //ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
                // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
                // GamePot.showAppStatusPopup(appStatus.ToJson());
            break;
             case NCommon.ResultLogin.MAINTENANCE:
                 // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
                //ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
                // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
                // GamePot.showAppStatusPopup(appStatus.ToJson());
            break;
             case NCommon.ResultLogin.APP_CLOSE:
                //強制アップデートやメンテナンス機能をケース2方式で実装する場合は、アプリを強制終了できるため、ここでアプリを終了できるように実装します。
            break;
            default:
            break;
        }
    });
    

    独自提供のログイン UI画像ロゴの設定

    独自提供のログイン UI上部に表示される画像を設定できます。別途設定しない場合は、SDKに含まれている基本画像を使用し、ゲームに合った画像を直接設定できます。

    Android用画像ロゴの設定

    Android用の独自提供のログイン UI画像を設定する方法は、以下のとおりです。

    1. 以下のように res/drawableフォルダをそれぞれ作成し、各サイズ別の画像ファイルを追加します。
      フォルダ名サイズ
      /Assets/Plugins/Android/GamePotResources/res/drawable-mdpi/78x55
      /Assets/Plugins/Android/GamePotResources/res/drawable-hdpi/116x82
      /Assets/Plugins/Android/GamePotResources/res/drawable-xhdpi/155x110
      /Assets/Plugins/Android/GamePotResources/res/drawable-xxhdpi/232x165
      /Assets/Plugins/Android/GamePotResources/res/drawable-xxxhdpi/310x220
    2. 画像ファイル名を ic_stat_gamepot_login_logo.pngに変更します。

    iOS用画像ロゴの設定

    iOS用独自提供のログイン UI画像を設定するには、設定する画像(推奨サイズ310x220)のファイル名を ic_stat_gamepot_login_logo.pngに変更し、GamePot.bundle内に存在する同じ名前の従来のファイルと取り替えます。

    クーポン機能

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

    • 方式1
    GamePot.coupon(string couponNumber); // クーポン番号
    
    GamePot.coupon(string couponNumber, string userData); // クーポン番号、ユーザー情報
    
    // クーポン使用に成功
    public void onCouponSuccess() {
    }
    
    // クーポン使用に失敗
    public void onCouponFailure(NError error) {
        // error.messageを利用してメッセージを表示します。
    }
    
    • 方式2
    GamePot.coupon(string couponNumber, GamePotCallbackDelegate.CB_Common); // クーポン番号
    
    GamePot.coupon(string couponNumber, string userData, GamePotCallbackDelegate.CB_Common);    // クーポン番号、ユーザー情報
    
    GamePot.coupon(couponNumber, (success, error) => {
       if(success)
       {
           // クーポン使用に成功
       }
       else
       {
            // クーポン使用に失敗
            // error.messageを利用してメッセージを表示します。
       }
    });
    

    アイテムの支給

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

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

    プッシュ通知機能

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

    一般プッシュ通知の設定

    一般プッシュ通知を設定するには、以下のコードを使用します。

    • 方式1
        GamePot.setPushStatus(bool pushEnable);
    
        // プッシュ通知の状態変更に関するサーバ通信に成功
        public void onPushSuccess() {
        }
    
        // プッシュ通知の状態変更に関するサーバ通信に失敗
        public void onPushFailure(NError error) {
    
            // プッシュ通知の状態変更に失敗した場合は、error.messageを利用してメッセージを表示します。
        }
    
    • 方式2
    void GamePot.setPushStatus(bool pushEnable, GamePotCallbackDelegate.CB_Common);
    
        GamePot.setPushStatus(pushEnable, (success, error) => {
            if(success)
            {
                // プッシュ通知の状態変更に関するサーバ通信に成功
            }
           else
           {
                // プッシュ通知の状態変更に失敗。error.messageを利用してメッセージを表示します。
            }
        });
        
    

    夜間プッシュ通知の設定

    夜間プッシュ通知を設定するには、以下のコードを使用します。

    • 方式1
    GamePot.setPushNightStatus(bool nightPushEnable);
    
        // 夜間プッシュ通知の状態変更に関するサーバ通信に成功
        public void onPushNightSuccess() {
        }
    
        // 夜間プッシュ通知の状態変更に関するサーバ通信に失敗
        public void onPushNightFailure(NError error) {
    
            // 夜間プッシュ通知の状態変更に失敗した場合は、error.messageを利用してメッセージを表示します。
        }
    
    • 方式2
        void GamePot.setPushNightStatus(bool nightPushEnable, GamePotCallbackDelegate.CB_Common);
    
        GamePot.setPushNightStatus(nightPushEnable, (success, error) => {
            if(success)
            {
                // 夜間プッシュ通知の状態変更に関するサーバ通信に成功
            }
           else
           {
                // 夜間プッシュ通知の状態変更に失敗。error.messageを利用してメッセージを表示します。
            }
        });
    

    一般/夜間/プッシュ型広告を一度に設定

    ログイン前にプッシュ通知を許可するかどうかを確認するゲームの場合は、ログインの後に以下のコードを呼び出します。

    • 方式1
    GamePot.setPushStatus(bool pushEnable, bool nightPushEnable, bool adPushEnable);
    
    // プッシュ通知の状態変更に関するサーバ通信に成功
    public void onPushStatusSuccess() {
    }
    
    // プッシュ通知の状態変更に関するサーバ通信に失敗
    public void onPushStatusFailure(NError error) {
    
        // プッシュ通知の状態変更に失敗した場合は、error.messageをポップアップなどを利用してユーザーに知らせます。
    }
    
    • 方式2
    void GamePot.setPushStatus(bool pushEnable, bool nightPushEnable, bool adPushEnable, GamePotCallbackDelegate.CB_Common);
    
    GamePot.setPushStatus(pushEnable, nightPushEnable, adPushEnable, (success, error) => {
        if(success)
        {
            // プッシュ通知の状態変更に関するサーバ通信に成功
        }
       else
       {
            // プッシュ通知の状態変更に失敗。error.messageをポップアップなどを利用してユーザーに知らせます。
        }
    });
    

    プッシュ通知の状態確認

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

    NPushInfo pushInfo = GamePot.getPushStatus();
    
    // pushInfo.enableプッシュ通知の On/Off
    // pushInfo.night夜間のプッシュ通知の On/Off
    

    画像プッシュ通知機能

    iOSアプリで通知画像を受信して処理できるように通知サービス拡張プログラムを追加する方法は、以下のとおりです。

    1. プロジェクトで TargetメニューをクリックしてNotification Service Extension選択し、Nextをクリックします。
    2. Project Nameを入力し、Finishをクリックします。
    3. 作成された Notification Service Extensionモジュールの NotificationService.hファイルを以下のように編集します。
      // GamePot/GamePotNotificationServiceExtension.hを Import
      // #import <UserNotifications/UserNotifications.h>
      #import <GamePot/GamePotNotificationServiceExtension.h
      // UNNotificationServiceExtensionの代わりに GamePotNotificationServiceExtensionを継承
      // @interface NotificationService : UNNotificationServiceExtension
      @interface NotificationService : GamePotNotificationServiceExtension
      @end
      
    4. 作成された Notification Service Extensionモジュールの NotificationService.mファイルを以下のように編集します。
      ...
      
      - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
          // self.contentHandler = contentHandler;
          // self.bestAttemptContent = [request.content mutableCopy];
          // Modify the notification content here...
          // self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
          // self.contentHandler(self.bestAttemptContent);
          [super didReceiveNotificationRequest:request withContentHandler:contentHandler];
      }
      
      ...
      
    5. 作成された Notification Service Extensionモジュールで Targets > Build Phases > Link Binary With Librariesメニューを順にクリックし、GamePot.frameworkを追加します。

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

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

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

    int pushId = GamePot.sendLocalPush(DateTime.Parse("2018-01-01 00:00:00"), "title", "content");
    
    // pushidの return値は開発会社で管理 
    

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

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

    GamePot.cancelLocalPush(/*プッシュ登録の際に取得した pushId*/);
    

    お知らせの画像表示機能

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

    • サイズ: 720x1200(Portrait)、1280x640(Landscape)
    • 容量: 250KB以下

    ダッシュボードの案内事項メニューにアップロードした画像が表示されるようにするには、以下のコードを使用します。

    GamePot.showNotice(bool Flag = true);
    
    // true: 「今日は表示しない」を適用
    // false: 「今日は表示しない」とは関係なしに強制表示
    
    GamePot.showEvent(string Type)
    
    // Type: ダッシュボードのお知らせ > 分類メニューで設定した分類名に該当する画像のみ表示
    
    public void onReceiveScheme(string scheme)
    {
        // GAMEPOTダッシュボードで設定した scheme値を伝達
    }
    

    カスタマーサポート機能

    ダッシュボードと連携し、問い合わせ、ポリシーおよび規約 UIの呼び出し、同意の収集などの機能を使用できます。

    問い合わせ機能

    会員が問い合わせを送信すると、担当者が返答できる問い合わせ機能を使用できます。ダッシュボードのサポート > お問い合わせメニューと連携されます。

    問い合わせ UIは、デバイスの言語に応じて韓国語、英語、日本語、中国語体字および繁体字のうち一つの言語に変更されます。その他のデバイスの言語の場合は、英語に変更されます。

    ダッシュボードと連携して問い合わせ機能を使用するには、以下のコードを使用します。

    GamePot.showCSWebView();
    

    外部リンクの問い合わせ

    外部リンクでログインしていない顧客も問い合わせを登録できるようにするには、以下のコードを使用します。

    //URL: GAMEPOTから発行された外部カスタマーサポート URL
    
    GamePot.showWebView(string url);
    

    規約およびポリシー UIの呼び出し機能

    ダッシュボードのサポートメニューで作成した各種規約やポリシーを UIで呼び出しできます。

    規約およびポリシー UIを呼び出すには、以下のコードを使用します。

    • 利用規約

      GamePot.showTerms();
      
    • 個人情報の取扱方針

      GamePot.showPrivacy();
      
    • 払い戻しポリシー

      GamePot.showRefund();
      

    規約同意機能(GDPRを含む)

    提供されるポップアップ UI機能を使用し、ダッシュボードで作成した各種ポリシーや規約への同意を収集できます。GDPRポリシーへの同意も収集できます。

    規約同意の自動呼び出し

    GAMEPOT Unity SDKバージョン v3.3.0以降を使用する場合は、会員がログインする際に自動的に規約同意のポップアップが表示されます。

    ログインの際に規約同意を自動的に呼び出すかどうかを変更するには、以下のコードを使用します。

    // デフォルト値は true
    //自動ポップアップ時、MATERIAL_BLUEテーマを適用 
    // falseに設定すると、ログイン時に規約同意のポップアップが表示されません。
    GamePot.setAutoAgree(true);
    
    // MATERIAL_ORANGEテーマをカスタム適用時
    NAgreeInfo bulider = new NAgreeInfo(); 
    bulider.theme = "MATERIAL_ORANGE";
    GamePot.setAutoAgreeBuilder(bulider);
    
    ...
    
    GamePot.login(NCommon.LoginType);
    
    ...
    

    規約同意の手動呼び出し

    規約同意の呼び出しを手動で行うには、以下のコードを使用します。

    • テーマの選択

      // 基本テーマ
      BLUE
      GREEN
      
      // 改善テーマ
      MATERIAL_RED,
      MATERIAL_BLUE,
      MATERIAL_CYAN,
      MATERIAL_ORANGE,
      MATERIAL_PURPLE,
      MATERIAL_DARKBLUE,
      MATERIAL_YELLOW,
      MATERIAL_GRAPE,
      MATERIAL_GRAY,
      MATERIAL_GREEN,
      MATERIAL_PEACH,
      
    • 呼び出し - 方法1

       //基本呼び出し(MATERIAL_BLUEテーマを適用)
      GamePot.showAgreeDialog();
      
      // その他のテーマを適用する場合
      NAgreeInfo info = new NAgreeInfo();
      info.theme = "MATERIAL_RED";
      GamePot.showAgreeDialog(info);
      // 規約に同意した場合
      public void onAgreeDialogSuccess(NAgreeResultInfo info)
      {
          // info.agree: 規約の必須事項にすべて同意した場合、true
          // info.agreePush: 一般プッシュ型広告の通知を許可した場合は true、そうでない場合は false
          // info.agreeNight: 夜間プッシュ型広告の通知を許可した場合は true、そうでない場合は false
          // agreePush / agreeNight値はログインを完了してから setPushStatus APIを通じて一度に設定してください。
      }
      
      // エラー発生
      public void onAgreeDialogFailure(NError error)
      {
          // error.messageを利用してメッセージを表示します。
      }
      
    • 呼び出し - 方法2

            //基本呼び出し(BLUEテーマを適用)
        showAgreeDialog(GamePotCallbackDelegate.CB_ShowAgree);
    
        // その他のテーマを適用する場合
        NAgreeInfo info = new NAgreeInfo();
        info.theme = "MATERIAL_RED";
        GamePot.showAgreeDialog(info,GamePotCallbackDelegate.CB_ShowAgree);
        
        GamePot.showAgreeDialog( info, (success, NAgreeResultInfo agreeInfo, NError error) => {
           if(success)
           {
                // 規約に同意した場合
                // info.agree: 規約の必須事項にすべて同意した場合、true
                 // info.agreePush: 一般プッシュ型広告の通知を許可した場合は true、そうでない場合は false
                 // info.agreeNight: 夜間プッシュ型広告の通知を許可した場合は true、そうでない場合は false
                 // agreePush / agreeNight値はログインを完了してから setPushStatus APIを通じて一度に設定してください。
           }
           else
           {
                // エラー発生
                // error.messageを利用してメッセージを表示します。
           }
        });
    

    規約同意 UIテーマの直接構成

    SDKで提供するテーマを使う代わりに、直接構成した規約同意 UIのテーマを使用できます。

    規約同意 UIのテーマを直接構成して使用するには、規約同意を呼び出す前に、以下のコードを使ってテーマを構成します。

    NAgreeInfo info = new NAgreeInfo();
    info.theme = "MATERIAL_RED";
    info.headerBackGradient = new string[] { "0xFF00050B", "0xFF0F1B21" };
    info.headerTitleColor = "0xFFFF0000";
    info.headerBottomColor = "0xFF00FF00";
    // 未使用時は""に設定
    info.headerTitle = "規約同意";
    // Android: res/drawableオブジェクト ID(ファイル名)
    // iOS: assetオブジェクト ID(ファイル名)
    info.headerIconDrawable = "ic_stat_gamepot_agree";
    
    info.contentBackGradient = new string[] { "0xFFFF2432", "0xFF11FF32" };
    info.contentIconColor = "0xFF0429FF";
    info.contentCheckColor = "0xFFFFADB5";
    info.contentTitleColor = "0xFF98FFC6";
    info.contentShowColor = "0xFF98B3FF";
    // Android: res/drawableオブジェクト ID(ファイル名)
    // iOS: assetオブジェクト ID(ファイル名)
    info.contentIconDrawable = "ic_stat_gamepot_small";
    
    info.footerBackGradient = new string[] { "0xFFFFFFFF", "0xFF112432" };
    info.footerButtonGradient = new string[] { "0xFF1E3A57", "0xFFFFFFFF" };
    info.footerButtonOutlineColor = "0xFFFF171A";
    info.footerTitleColor = "0xFFFF00D5";
    info.footerTitle = "ゲームを始める";
    
    // 一般プッシュ型広告通知許可ボタンを表示するかどうか
    info.showPush = true;
    
    // 夜間プッシュ型広告通知許可ボタンを表示するかどうか
    info.showNightPush = true;
    
    // 一般プッシュ型広告通知許可リンクボタンの設定(使用しない場合、入力しない)
    info.pushDetailURL = "https://...";
    
    // 夜間プッシュ型広告通知許可リンクボタンの設定(使用しない場合、入力しない)
    info.nightPushDetailURL = "https://...";
    
    // 文言を変更
    info.allMessage = "すべて同意";
    info.termMessage = "必須) 利用規約";
    info.privacyMessage = "必須) 個人情報の取扱方針";
    info.pushMessage = "任意) 一般プッシュ通知を許可";
    info.nightPushMessage = "任意) 夜間プッシュ通知を許可";
    
    
    //プッシュ型広告通知許可(一般/夜間)にチェックを入れた場合、ゲームを始める際のToastメッセージ(同意時間)表示の有無
    GamePot.setShowToastPushStatus(true);
    GamePot.showAgreeDialog(info);
    
    //規約ポップアップ内の年齢制限関連のオプション有効化の有無(基本無効化/有効化する場合、GAMEPOTダッシュボード > サポート > 設定> GDPR > メール認証項目記入は必須)
    info.ageCertificationShow = false;  // true: 年齢制限を有効化 false: 無効化
    
    • それぞれの変数は、以下の画像に表示された領域に適用されます。
      • AgeView
        game-gamepotandroid_ko
      • EmailView
        gamepot_unity_15_1_ko
      • AgreeView
        gamepot_unity_15_2_ko

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

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

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

    決済キャンセルを悪用するユーザーに対する再決済ポップアップ機能

    ダッシュボードの決済キャンセルメニューで、Google決済キャンセルを悪用するユーザーを自動的に利用停止するように設定した場合は、その悪用するユーザーに対して SDKで提供する再決済ポップアップ UIが表示されます。その UIを通じて決済をキャンセルしたアイテムを再決済すると、利用停止が自動的に解除されます。

    基本的に提供される決済キャンセルを悪用するユーザーに対する再決済ポップアップのメッセージを変更して使用するには、以下のコードを使用します。

    
    NVoidInfo info = new NVoidInfo();
    
    //テーマの種類
    MATERIAL_RED,
    MATERIAL_BLUE,
    MATERIAL_CYAN,
    MATERIAL_ORANGE,
    MATERIAL_PURPLE,
    MATERIAL_DARKBLUE,
    MATERIAL_YELLOW,
    MATERIAL_GRAPE,
    MATERIAL_GRAY,
    MATERIAL_GREEN,
    MATERIAL_PEACH
    
    //テーマの変更
    info.theme = "MATERIAL_ORANGE";
    
    // 文言を変更
    info.headerTitle = "Header Title Section!";
    
    info.descHTML = "descHTML Section!";
    
    info.listHeaderTitle = "listHeaderTitle Section!";
    
    info.footerTitle = "footerTitle Section!";
    
    GamePot.setVoidBuilder(info);
    

    Remote Config機能

    ダッシュボードのゲーム > Remote Configメニューに登録したサーバのパラメータ値を取得できます。パラメータ値を取得して SDKで使用すると、ゲームをアップデートせずに各要素を変更または制御できます。

    取得したパラメータはログイン時にロードされ、その後から呼び出すことができます。

    Remote Config機能を使用するには、以下のコードを使用します。

    //「Test_01」: パラメータ string
    var str_value = GamePot.getConfig("test_01");
    
    //ダッシュボードに追加したすべてのパラメータをJSON string形式で取得します。
    var json_value = GamePot.getConfigs();
    

    ゲームログの転送機能

    ゲームログを呼び出してダッシュボードのゲーム > プレイヤーメニューで確認できます。

    ゲームログの転送機能を使用するには、表を参照して以下のコードに予約語を入力し、コードを呼び出します。

    • 予約語およびコード
      予約語必須タイプ説明最大長さ
      GamePotSendLogCharacter.NAME必須Stringキャラクター名128
      GamePotSendLogCharacter.LEVEL任意Stringレベル128
      GamePotSendLogCharacter.SERVER_ID任意Stringサーバ ID128
      GamePotSendLogCharacter.PLAYER_ID任意Stringキャラクター ID128
      GamePotSendLogCharacter.USERDATA任意StringETC128
      String name = "キャラクター名";
      String level = "10";
      String serverid = "svn_001";
      String playerid = "283282191001";
      String userdata = "";
      
      GamePotSendLogCharacter characterLog = new GamePotSendLogCharacter();
      characterLog.put(GamePotSendLogCharacter.NAME, name);
      characterLog.put(GamePotSendLogCharacter.PLAYER_ID, playerid);
      characterLog.put(GamePotSendLogCharacter.LEVEL, level);
      characterLog.put(GamePotSendLogCharacter.SERVER_ID, serverid);
      characterLog.put(GamePotSendLogCharacter.USERDATA, userdata);
      
      Boolean result = GamePot.characterInfo(characterLog);
      
      // 結果値 true: 検証に成功。ログが GAMEPOTサーバに転送されます。
      // 結果値 false: 検証に失敗。logcatを確認します。
      

    AppStatusの確認

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

    public enum ResultCheckAppStatus
    {
        SUCCESS,
        FAILED,
        NEED_UPDATE,
        MAINTENANCE
    }
    
    GamePot.checkAppStatus((NCommon.ResultCheckAppStatus resultState , NAppStatus appStatus, NError error) =>
    {
        switch(resultState)
        {
            case NCommon.ResultCheckAppStatus.SUCCESS:
            // メンテナンス / アップデート関連の設定がされていない状態
            break;
    
            case NCommon.ResultCheckAppStatus.FAILED:
            // Handling error
            break;
    
            case NCommon.ResultCheckAppStatus.NEED_UPDATE:
            // アップデート
            // Handling appStatus
             // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
            //ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
            // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
            // GamePot.showAppStatusPopup(appStatus.ToJson());
            break;
    
            case NCommon.ResultCheckAppStatus.MAINTENANCE:
            // メンテナンス
            // Handling appStatus
            // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
            //ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
            // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
            // GamePot.showAppStatusPopup(appStatus.ToJson());
            break;
            
            default:
            break;
        }
    });
    

    setUserDataの設定

    ログイン後、当該会員に追加情報を入れる場合に使用します。
    キーの最大数は50個に制限
    値の最大長さは1024バイトに制限
    これらの情報は会員の詳細項目でのみ確認できます。

    • 方式1
    JSONNode _json = new JSONObject();
    _json.Add("appversion", "1.0.23");
    _json.Add("server", "s1");
    string json = _json.ToString();
    GamePot.setUserData(_json);
    
    // setUserDataに成功
    public void onSetUserDataSuccess() {
    
    }
    
    // setUserDataに失敗
    public void onSetUserDataFailure(NError error) {
    
    }
    
    • 方式2
    void setUserData(JSONNode userData, GamePotCallbackDelegate.CB_SetUserData cbSetUserData);
    
    JSONNode _json = new JSONObject();
    _json.Add("appversion", "1.0.23");
    _json.Add("server", "s1");
    string json = _json.ToString();
    
    GamePot.setUserData(_json, (success,  error) => {
        if(success)
        {
            // setUserDataに成功
        }
       else
       {
            // setUserDataに失敗
        }
    });
    

    3rd Party SDK連携

    GAMEPOT Unity SDKは3rd Party SDKとの連携に対応しています。

    3rd Party SDKログイン連携

    3rd Party SDKと連携してログイン機能を使用するには、表を参照して以下のコードにパラメータ値を入力し、コードを使用します。

    • パラメータおよびコード

      • 自動ログインに対応しないため、毎回呼び出す必要があります。
      パラメータ名必須タイプ説明
      userid必須Stringユーザーの固有 ID
      値に「:」(コロン)は使用不可
      String userid = "memberid of 3rd party sdk";
      
      GamePot.loginByThirdPartySDK("userid");
      

    3rd Party SDK決済連携

    3rd Party SDKと連携して決済機能を使用するには、表を参照して以下のコードにパラメータ値を入力し、コードを使用します。

    • パラメータおよびコード
      パラメータ名必須タイプ説明
      productid必須Stringダッシュボードに登録されているアイテム ID
      transactionid必須String決済領収証番号(GPA-xxx-xxxx-xxxx)
      store必須決済ストア(google, apple, one, galaxy)
      currency任意String通貨(KRW、USD)
      price任意double決済アイテム金額
      paymentid任意String決済 ID
      一般的には store_idと同じ
      uniqueid任意String開発会社で使用する固有 ID
      String productId = "purchase_001";
      String transactionId = "GPA-xxx-xxxx-xxxx";
      String currency = "KRW";
      double price = 1200;
      String paymentId = "google";
      String uniqueId = "developer unique id";
      
      sendPurchaseByThirdPartySDK(string productId, string transactionId, string currency, double price, string store, string paymentId, string uniqueId);
      

    Firebase SDK連携時の注意事項

    Firebase SDKと正常に連携させるには、初回の連携を含めてパッケージ名が変更されるたびに Assets > External Dependency Manager > Android Resolver > Settingsメニューで Patch mainTemplate.gradleオプションを選択解除し、Resolveを行う必要があります。

    Firebaseのライブラリが Unityエディタに入力されたパッケージ名でリパッケージングされる際に、パッケージ名が正しくないとアプリはインストールされません。この場合、パッケージ名を正しく変更する必要があります。

    パッケージ名を確認・変更するには、以下のコードを使用します。

    // Resolve作業後、com.google.firebase.firebase-common-[Firebaseライブラリバージョン].aar内
    AndroidManifest.xmlで android:authorities値がバージョンに合ったパッケージ名形式([パッケージ名].firebaseinitprovider)になっているか確認します。
    
    <provider>
                android:name="com.google.firebase.provider.FirebaseInitProvider"
                android:exported="false"
                android:authorities=“[アプリのパッケージ名].firebaseinitprovider"
    

    Native環境でプロジェクトを編集

    GAMEPOT Unity SDKの使用中に Native環境でプロジェクトを編集する場合は、MainActivityである io.gamepot.unity.plugin.GamePotSDKActivityの Classを継承して別途処理する MainActivityを作成する必要があります。

    GAMEPOT Unity SDKを使用して Native環境でプロジェクトを編集する方法は、以下のとおりです。サンプルファイルに基づいて説明します。

    1. ダウンロードした例題プロジェクトの/app/libsパスにある例題ブリッジファイルをプロジェクトの gamepot-bridge.aarファイル削除します。
    2. 現在プロジェクトの gamepot-bridge.aarファイルをダウンロードした例題プロジェクトの/app/libsパスに追加します。
    3. ビルドの実行後に作成された.aarファイルをプロジェクトパスの/Android/libsパスに追加します。
    4. 以下のコードを使用し、MainActivityが取り替えられるように AndroidManifest.xmlを編集します。
      従来:
              <activity android:theme="@style/UnityThemeSelector"
                  android:name="io.gamepot.unity.plugin.GamePotSDKActivity"
      
      変更: 
                  android:name="io.gamepot.unity.plugin.Game.GameActivity"   //サンプル基準: ビルド時に継承したアクティビティに変更
      

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

    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.