Unreal SDK

Prev Next

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

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

Unreal用GAMEPOT SDKを使用するためのシステム要件は、次の通りです。

  • 最小スペック: Unreal 4.26以降

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

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

SDKのインストール

GAMEPOT Unreal SDKをインストールし、Unrealでプロジェクトを構成する方法は、次の通りです。

  1. GAMEPOT SDKのダウンロード > Unrealからダウンロードリンクをクリックします。

Android環境の設定

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

最小スペックの設定

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

minSdkVersion: API 19以降(Kitkat)

GamePot_Android_UPL.xmlの編集

Android環境を設定するために GamePot_Android_UPL.xmlファイルを変更するには、ダウンロードした$S(PluginDir)/GamePot_Android_UPL.xmlを Unrealで開き、表を参照してコードの入力値を変更します。

  • (optional) 値を使用しない場合は、その行を削除します。

    説明
    gamepot_project_id GAMEPOTで発行されたプロジェクト ID
    gamepot_store ストア値(googleまたはoneまたはgalaxy)
    gamepot_app_title アプリのタイトル(FCM)
    gamepot_push_default_channel 登録されている基本チャンネル名なので、変更しないでください。
    facebook_app_id Facebookコンソールで取得したアプリID
    fb_login_protocol_scheme fb[Facebookで発行されたアプリ ID] 例) fb101010
    gamepot_naver_clientid NAVER開発者コンソールで取得
    gamepot_naver_secretid NAVER開発者コンソールで取得
    gamepot_line_channelid LINE開発者コンソールで取得
    gamepot_twitter_consumerkey Twitter開発者コンソールで取得
    gamepot_twitter_consumersecret Twitter開発者コンソールで取得
    gamepot_elsa_projectid NAVERクラウド ELSA使用時のプロジェクト ID
    gamepot_region GAMEPOTダッシュボード作成リージョンがシンガポールの場合のみ sgと入力
    gamepot_license_url GAMEPOTダッシュボード作成リージョンが日本の場合のみ https://gamepot.apigw.ntruss.com/fw/jp-v1を入力
    <buildGradleAdditions>
        <insert>
    ...
    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", ""                                           // optional (Facebook)
             resValue "string", "fb_login_protocol_scheme", ""                           // optional (Facebook)
             resValue "string", "gamepot_naver_clientid", ""                               // optional (NAVER開発者コンソールで取得)
             resValue "string", "gamepot_naver_secretid", ""                              // optional (NAVER開発者コンソールで取得)
             resValue "string", "gamepot_line_channelid",""                               // optional (LINE開発者コンソールで取得)
             resValue "string", "gamepot_twitter_consumerkey", ""                   // optional (Twitter開発者コンソールで取得)
             resValue "string", "gamepot_twitter_consumersecret", ""               // optional (Twitter開発者コンソールで取得)
             resValue "string", "gamepot_elsa_projectid", ""                              // optional (NAVERクラウド ELSAプロジェクト ID
             resValue "string", "gamepot_region", "" // Caution! Only if the gamepot region is Singapore , value as sg
        }
        ...
    }
      </insert>
    </buildGradleAdditions>
    

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

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

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

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

    フォルダ名 サイズ
    $S(PluginDir)/ThirdParty/Android/GamePotResources/res/drawable-mdpi/ 24x24
    $S(PluginDir)/ThirdParty/Android/GamePotResources/res/drawable-hdpi/ 36x36
    $S(PluginDir)/ThirdParty/Android/GamePotResources/res/drawable-xhdpi/ 48x48
    $S(PluginDir)/ThirdParty/Android/GamePotResources/res/drawable-xxhdpi/ 72x72
    $S(PluginDir)/ThirdParty/Android/GamePotResources/res/drawable-xxxhdpi/ 96x96
  2. 画像ファイル名を ic_stat_gamepot_smallに変更します。

iOS環境の設定

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

ビルド時のバージョンコードは、整数形式でユニークに増加する方式にします。

プロジェクトの構成

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

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

  2. 表を参照してプロジェクトの GamePotConfig-Info.plistファイルで以下の設定を変更します。

    環境変数 説明
    gamepot_project_id GAMEPOTで発行されたプロジェクト ID
    gamepot_facebook_app_id Facebookで取得したアプリ ID
    gamepot_facebook_display_name Facebookに表示される名前
    gamepot_google_app_id GoogleService-InfoファイルのCLIENT_ID
    gamepot_google_url_schemes GoogleService-InfoファイルのREVERSED_CLIENT_ID
    gamepot_naver_clientid NAVER Client ID
    gamepot_naver_secretid NAVER Secret ID
    gamepot_naver_urlscheme NAVER URL Scheme
    gamepot_line_channelid LINE Channel ID
    gamepot_line_url_schemes LINE URL Scheme (line3rdp.{プロジェクトバンドル ID})
    gamepot_twitter_consumerkey Twitter Consumer Key
    gamepot_twitter_consumersecret Twitter Consumer Secret
    gamepot_elsa_projectid NAVERクラウド ELSA使用時のプロジェクト ID
    gamepot_region GAMEPOTダッシュボード作成リージョンがシンガポールの場合のみ sgと入力
    gamepot_license_url GAMEPOTダッシュボード作成リージョンが日本の場合のみ https://gamepot.apigw.ntruss.com/fw/jp-v1を入力
  3. プロジェクト設定の iOS > Extra Plist Data > Additional Plist Data メニューで、以下のユーザー権限取得オプションを追加します。

    • GAMEPOTのお問い合わせ UIの使用時に必要な権限
    <key>NSCameraUsageDescription</key>
    <string>$(PRODUCT_NAME) camera use.</string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string>$(PRODUCT_NAME) photo library use.</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>$(PRODUCT_NAME) Microphone use.</string>        
    
    • ユーザーからの IDFA取得権限をリクエストするポップアップを使用する場合
    <key>NSUserTrackingUsageDescription</key>
    <string>$(PRODUCT_NAME) This identifier will collect IDFA for advertising purposes.</string>
    
  4. GamePotResources.embeddedframeworkを.zipで圧縮して
    $S(PluginDir)/ThirdParty/iOS/GamePotResources.embeddedframework.zipのパスに追加し、ビルドを行います。

初期化

初期化を実行するには、ゲームを始める際にロードされる最初の画面に使用されるインスタンスに、以下のコードを追加します。各サンプルファイルに基づいて説明します。

  • 初期化の例1 - ASampleGameModeBase.h
    
    #include "GamePotSDKPluginModule.h"
    
    //(当該レベルで使用される)GAMEPOT APIに対する、Callback Event Listener宣言
    UCLASS()
    class GAMEPOTSDKSAMPLE_API ASampleGameModeBase : public AGameModeBase
    {
        ...   
       void OnLoginSuccess(FNUserInfo NUserInfo);
       void OnLoginCancel();
       void OnLoginFailure(FNError NError);
       void OnLoginMaintenance(FNAppStatus NAppStatus);
       void OnLoginNeedUpdate(FNAppStatus NAppStatus);
       void OnLoginExit();
       ...
    };
    


  • 初期化の例2 - ASampleGameModeBase.cpp
    #include "ASampleGameModeBase.h"
    
    void ASampleGameModeBase::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage)
    {
        AGameModeBase::InitGame(MapName, Options, ErrorMessage);
    
         //(headerで宣言した Event Listenerを)GamePotPluginModuleの Callback Event Listenerにバインド
         if (FGamePotSDKPluginModule::IsAvailable())
         {
             FGamePotSDKPluginModule::OnSdkLoginSuccess.AddUObject(this, &ASampleGameModeBase::OnLoginSuccess);
             FGamePotSDKPluginModule::OnSdkLoginCancel.AddUObject(this, &ASampleGameModeBase::OnLoginCancel);
             FGamePotSDKPluginModule::OnSdkLoginFailure.AddUObject(this, &ASampleGameModeBase::OnLoginFailure);
             FGamePotSDKPluginModule::OnSdkLoginMaintenance.AddUObject(this, &ASampleGameModeBase::OnLoginMaintenance);
             FGamePotSDKPluginModule::OnSdkLoginNeedUpdate.AddUObject(this, &ASampleGameModeBase::OnLoginNeedUpdate);
             FGamePotSDKPluginModule::OnSdkLoginExit.AddUObject(this, &ASampleGameModeBase::OnLoginExit);
    
             FGamePotSDKPluginModule::OnSdkLogoutSuccess.AddUObject(this, &ASampleGameModeBase::OnLogoutSuccess);
             FGamePotSDKPluginModule::OnSdkLogoutFailure.AddUObject(this, &ASampleGameModeBase::OnLogoutFailure);   
            ...
         }
    }
    
    void ASampleGameModeBase::OnLoginSuccess(FNUserInfo NUserInfo)
    {
        // Handling NUserInfo..
    }
    
    void ASampleGameModeBase::OnLoginCancel()
    {
    }
    
    void ASampleGameModeBase::OnLoginFailure(FNError NError)
    {
        // Handling NError Info..
    }
    


  • バインドEvent Listenerリスト
      // Loginに成功
        FOnSdkLoginSuccess OnSdkLoginSuccess(FNUserInfo NUserInfo);     
        // Loginをキャンセル            
        FOnSdkLoginCancel OnSdkLoginCancel(); 
        // Loginに失敗                                     
        FOnSdkLoginFailure OnSdkLoginFailure(FNError NError);   
        // Login(メンテナンス)                   
        FOnSdkLoginMaintenance OnSdkLoginMaintenance(FNAppStatus NAppStatus);
        // Login(アップデート)      
        FOnSdkLoginNeedUpdate OnSdkLoginNeedUpdate(FNAppStatus NAppStatus);   
        // Login UI Close(showLoginWithUIを使用時)     
        FOnSdkLoginExit OnSdkLoginExit();         
        // (メンテナンス、アップデート時)アプリを終了                                      
        FOnSdkAppClose OnSdkAppClose();   
    
        // Logoutに成功                                                                          
        FOnSdkLogoutSuccess OnSdkLogoutSuccess();   
        // Logoutに失敗                               
        FOnSdkLogoutFailure OnSdkLogoutFailure(FNError NError);      
    
        // showWebviewを閉じる          
        FOnWebviewClose OnSdkWebviewClose(FString msg);
    
        // purchaseに成功
        FOnSdkPurchaseSuccess OnSdkPurchaseSuccess(FNPurchaseInfo NPurchaseInfo);
        // purchaseをキャンセル
        FOnSdkPurchaseCancel OnSdkPurchaseCancel();
        // purchaseに失敗
        FOnSdkPurchaseFailure OnSdkPurchaseFailure(FNError NError);  
    
        // getPurchaseDetailListAsyncに成功
        FOnSdkPurchaseDetailListSuccess OnSdkPurchaseDetailListSuccess(TArray<FNPurchaseItem> Items);
        // getPurchaseDetailListAsyncに失敗
        FOnSdkPurchaseDetailListFailure OnSdkPurchaseDetailListFailure(FNError NError);
    
        // createLinkingに成功
        FOnSdkCreateLinkingSuccess OnSdkCreateLinkingSuccess(FNUserInfo NUserInfo);
        // createLinkingをキャンセル
        FOnSdkCreateLinkingCancel OnSdkCreateLinkingCancel();
        // createLinkingに失敗
        FOnSdkCreateLinkingFailure OnSdkCreateLinkingFailure(FNError NError);
    
        // deleteLinkingに成功
        FOnSdkDeleteLinkingSuccess OnSdkDeleteLinkingSuccess();
        // deleteLinkingに失敗
        FOnSdkDeleteLinkingFailure OnSdkDeleteLinkingFailure(FNError NError);
    
        // お知らせの画像(showNotice、showEvent)をクリックすると schemeコールバックが実行される
        FOnSdkReceiveScheme OnSdkReceiveScheme(FString scheme);
    
        // deleteMemberに成功
        FOnSdkDeleteMemberSuccess OnSdkDeleteMemberSuccess();
        // deleteMemberに失敗
        FOnSdkDeleteMemberFailure OnSdkDeleteMemberFailure(FNError NError);
    
        // coupon(使用)に成功
        FOnSdkCouponSuccess OnSdkCouponSuccess(FString msg);
        // coupon(使用)に失敗
        FOnSdkCouponFailure OnSdkCouponFailure(FNError NError);
    
        // showAgreeDialog(約款に同意したかどうか)更新に成功
        FOnAgreeDialogSuccess OnSdkAgreeDialogSuccess(FNAgreeResultInfo NAgreeResultInfo);
        // showAgreeDialog(約款に同意したかどうか)更新に失敗
        FOnAgreeDialogFailure OnSdkAgreeDialogFailure(FNError NError);
    
        // setPushに成功
        FOnPushSuccess OnSdkPushSuccess();
        // setPushAdStatusに成功
        FOnPushAdSuccess OnSdkPushAdSuccess();
        // setPushNightStatusに成功
        FOnPushNightSuccess OnSdkPushNightSuccess();
        // setPushStatusに成功
        FOnPushStatusSuccess OnSdkPushStatusSuccess();
    
        // setPushに失敗
        FOnPushFailure OnSdkPushFailure(FNError NError);
        // setPushAdStatusに失敗
        FOnPushAdFailure OnSdkPushAdFailure(FNError NError);
        // setPushNightStatusに失敗
        FOnPushNightFailure OnSdkPushNightFailure(FNError NError);
        // setPushStatusに失敗
        FOnPushStatusFailure OnSdkPushStatusFailure(FNError NError);
    

エラーコードの設定

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

USTRUCT()
struct FNError
{
    //Detail Error code
    static const int CODE_UNKNOWN_ERROR = 0;                    // 不明な Error
    static const int CODE_NOT_INITALIZE = 1;                    // 初期化に失敗
    static const int CODE_INVAILD_PARAM = 2;                    // 無効なパラメータの場合
    static const int CODE_MEMBERID_IS_EMPTY = 3;                    // メンバー IDデータがない場合
    static const int CODE_NOT_SIGNIN = 4;                    // ログインしていない状態
    static const int CODE_NETWORK_MODULE_NOT_INIT = 3000;                 // ネットワークモジュールが初期化されていない場合
    static const int CODE_NETWORK_ERROR = 3001;                 // ネットワーク接続エラーとタイムアウト発生時
    static const int CODE_SERVER_ERROR = 4000;                 // server-sideで発生するエラー
    static const int CODE_SERVER_HTTP_ERROR = 4001;                 // http response codeが成功でない場合
    static const int CODE_SERVER_NETWORK_ERROR = 4002;                 // ネットワーク接続エラーとタイムアウト発生時
    static const int CODE_SERVER_PARSING_ERROR = 4003;                 // サーバから取得したデータをパースする際のエラー
    static const int CODE_CHARGE_UNKNOWN_ERROR = 5000;                 // 決済で不明なエラーが発生したか、ストアから Errorが渡された場合
    static const int CODE_CHARGE_PRODUCTID_EMPTY = 5001;                 // product idを入力していない場合
    static const int CODE_CHARGE_PRODUCTID_WRONG = 5002;                 // 正しくない product idを入力した場合
    static const int CODE_CHARGE_CONSUME_ERROR = 5003;                 // consume時のエラー

    UPROPERTY()
    int code;               // error Code

    UPROPERTY()
    FString message;        // error Message
}

ログインに関連する機能

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

使用前の設定

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

Googleログイン環境の設定

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

  1. Google Firebaseコンソールで取得した Android用 google-service.jsonファイルを$S(PluginDir)/ThirdParty/Android/パスにコピーします。
  2. APKを構成する際に使用した Keystoreファイルの SHA-1値を Firebaseコンソールに追加します。
  • Googleログインを行う際に、onCancelレスポンスと一緒にログインされない場合は、以下のように解決してください。
    • google-service.jsonファイルを正常に適用したか確認します
    • APKを構成する際に使用した Keystoreと、Firebaseコンソールを登録するために SHA-1値を抽出した Keystoreが同じインスタンスであるかどうかを確認
    • Firebaseコンソールに登録したパッケージ名でビルドしたかどうかを確認
  1. AdditionalPlistDataに Google関連の CFBundleURLSchemes値を追加
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>GoogleService-Info.plistファイル内の REVERSED_CLIENT_ID値 例) com.googleusercontent.apps.XXXXXXXXX</string>
</array>
...
</dict>

Facebookログイン環境の設定

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

  1. Facebook for Developersコンソールでアプリタイプを NoneConsumerGamingのいずれかにしてアプリを作成します。

  2. APKを構成する際に使用した Keystoreのキーハッシュ値を Facebook for Developersコンソールに追加します。

  3. Facebook for Developersコンソールで取得したアプリ IDを以下のコードに入力し、コードを Android用 GamePot_Android_UPL.xmlファイルに追加します。

    ...
    <resourceCopies>
            <copyFile src="$S(PluginDir)/ThirdParty/Android/libs/gamepot-channel-facebook.aar" dst="$S(BuildDir)/libs/gamepot-channel-facebook.aar" />
    </resourceCopies>
    ...
    
    ...
    <buildGradleAdditions>
        <insert>
    
            ...
            dependencies {
                ...
                implementation(name: 'gamepot-channel-facebook', ext: 'aar')
                ...
            }
    
            ...
    
            defaultConfig {
                resValue "string", "facebook_app_id", "1234567890"
                resValue "string", "fb_login_protocol_scheme", "fb1234567890"
            }
            ...
    
        </insert>
    </buildGradleAdditions>
    
    ...
    
    <gameActivityImportAdditions>
      <insert>
        import io.gamepot.channel.facebook.GamePotFacebook;
      </insert>
    </gameActivityImportAdditions>
    
    
  4. プロジェクトGamepotConfig-info.plistファイルに以下のコードを追加します。

    gamepot_facebook_app_id // Facebook開発者コンソールで取得したアプリ ID
    

    SourceCodeで確認する場合は以下のように追加

    ...
     <key>gamepot_facebook_app_id</key>
     <string>xxxxxx</string>
     ...
    
  5. AdditionalPlistDataに facebook関連の CFBundleURLSchemesと LSApplicationQueriesSchemesの値を追加

<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>fb[Facebookアプリの ID] 例) fb100001</string>
</array>
...
</dict>
…..
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fb-messenger-share-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
……
</array>

Appleログイン環境の設定

iOS専用の Appleログイン環境を設定するには、プロジェクトで Configパスにある DefaultEngine.iniファイル内の/Script/IOSRuntimeSettings.IOSRuntimeSettings項目にbEnableSignInWithAppleSupport=Trueフラッグ値を追加します。

ログイン機能

開発会社で実装したログイン UIにより、ログインボタンをクリックしたときに動作する SDKログイン機能を使用するには、以下のコードを使用します。ユーザー情報確認用のMemberIdが作成され、作成された情報はFNUserInfoに保存されて返されます。


if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
FGamePotSDKPluginModule::GetSharedGamePotSdk()->Login(ENLoginType::Type loginType);

void ASampleGameModeBase::OnLoginSuccess(FNUserInfo NUserInfo)
{
    // ログインに成功
}

void ASampleGameModeBase::OnLoginCancel()
{
    // ログインをキャンセル
}

void ASampleGameModeBase::OnLoginFailure(FNError NError)
{
   // ログインに失敗
    // NError.messageを利用してメッセージを表示します。
}

// メンテナンス(ダッシュボードでメンテナンス機能が有効になっている場合に呼び出す)
void ASampleGameModeBase::OnLoginMaintenance(FNAppStatus NAppStatus)
{
   // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
    // ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
    // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
    IGamePotSdk* ptr = FGamePotSDKPluginModule::GetSharedGamePotSdk();
    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        ptr->showAppStatusPopup(NAppStatus.ToJsonString());
}

// 強制アップデート(ストアバージョンとクライアントバージョンが異なる場合に呼び出す)
void ASampleGameModeBase::OnLoginNeedUpdate(FNAppStatus NAppStatus)
{
     // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
    // ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
    // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用
    IGamePotSdk* ptr = FGamePotSDKPluginModule::GetSharedGamePotSdk();
    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        ptr->showAppStatusPopup(NAppStatus.ToJsonString());
}

void ASampleGameModeBase::OnLoginExit()
{
   // 強制アップデートやメンテナンス機能をケース2方式で実装する場合は、アプリを強制終了できるため、ここでアプリを終了できるように実装します。
}

void ASampleGameModeBase::OnAppClose()
{
    // アプリを終了
    // 強制アップデートやメンテナンス機能をケース2方式で実装する場合は、アプリを強制終了できるため、ここでアプリを終了できるように実装します。
}

LoginType、NUserInfo、NAppStatusの定義

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

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

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

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

   if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->requestTrackingAuthorization();

    void ASampleGameModeBase::OnSdkResultTrackingAuthorization(FNResultTrackingAuthorization info) {
        // info.authorization (FString)
        //        ATTrackingManagerAuthorizationStatusNotDetermined,
        //        ATTrackingManagerAuthorizationStatusRestricted,
        //        ATTrackingManagerAuthorizationStatusDenied,
        //        ATTrackingManagerAuthorizationStatusAuthorized,
        //        ATTrackingManagerAuthorizationStatusUnknown
    }
    
    // IDFAの取得権限をリクエストするポップアップを任意にで表示できます。権限を取得した後は、メソッドを呼び出してもポップアップは表示されません。


  • ポップアップリクエスト時点の変更

iOSプラットフォームの IDFA値の取得権限をリクエストするポップアップは、ログイン APIを呼び出す際にリクエストされます。そのポップアップリクエストをログインの際に呼び出したくない場合、$S(PluginDir)/Private/iOS/IOSGamePotSdk.cppファイルで以下のように関数を変更します。

void FIOSGamePotSdk::Login(ENLoginType::Type _loginType)
{
    //ログインの前に明示的に IDFAポップアップを表示 <-- 必要に応じてコメント処理する
    FIOSGamePotSdk::requestTrackingAuthorization();
    ...

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

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

NAVERログイン

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

  • Android

    • GamePot_Android_UPL.xmlの編集
    ...
    <resourceCopies>
            <copyFile src="$S(PluginDir)/ThirdParty/Android/libs/gamepot-channel-naver.aar" dst="$S(BuildDir)/libs/gamepot-channel-naver.aar" />
    </resourceCopies>
    
    ...
    
    <buildGradleAdditions>
        <insert>
    
            ...
            dependencies {
                ...
                implementation(name: 'gamepot-channel-naver', ext: 'aar')
                ...
            }
    
            ...
    
            defaultConfig {
                resValue "string", "gamepot_naver_clientid", "abcdefg1234567890"
                resValue "string", "gamepot_naver_secretid", "hijklmn"
            }
            ...
    
        </insert>
    </buildGradleAdditions>
    
    ...
    
    <gameActivityImportAdditions>
      <insert>
        import io.gamepot.channel.naver.GamePotNaver;
      </insert>
    </gameActivityImportAdditions>
    
    ...
    
    • NAVER開発者コンソールから取得した Client IDをgamepot_naver_clientidに入力し、Client Secretはgamepot_naver_secretidに入力
    • プロジェクト$S(PluginDir)ThirdParty/Android/libsパスに ggamepot-channel-naver.aarrファイルを追加


  • iOS
    • GamePotSDKPlugin.Build.csファイルの変更
    ...
    
    public GamePotSDKPlugin(ReadOnlyTargetRules Target) : base(Target)
    {
        ...
               else if (Target.Platform == UnrealTargetPlatform.IOS)
            {
                    PublicAdditionalFrameworks.Add(
                    new Framework(
                        "GamePotNaver",
                        ModuleDirectory+"/ThirdParty/iOS/GamePotNaver.framework"
                    )
                );
    
                    PublicAdditionalFrameworks.Add(
                    new Framework(
                        "NaverThirdPartyLogin",
                        ModuleDirectory+"/ThirdParty/iOS/NaverThirdPartyLogin.framework"
                    )
            }
        ...
    }
    ...
    
    • GamePotConfig-info.plistファイルの変更
     gamepot_naver_clientid // NAVERで使用する client ID
     gamepot_naver_secretid // NAVERで使用する secret ID
     gamepot_naver_urlscheme // NAVERで使用する urlscheme
    
    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>
    ...
    

AdditionalPlistDataに NAVER関連の CFBundleURLSchemesと LSApplicationQueriesSchemesの値を追加

<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>NAVERコンソール上に設定した IOS Schemes値</string>
</array>
...
</dict>
…..
<key>LSApplicationQueriesSchemes</key>
<array>
<string>naversearchapp</string>
<string>naversearchthirdlogin</string>
<string>navercafe</string>
……
</array>

LINEログイン

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

  • Android

    • GamePot_Android_UPL.xmlの編集
    ...
    <resourceCopies>
        <copyFile src="$S(PluginDir)/ThirdParty/Android/libs/gamepot-channel-line.aar" dst="$S(BuildDir)/libs/gamepot-channel-line.aar" />
        <copyFile src="$S(PluginDir)/ThirdParty/Android/libs/line-sdk-4.0.10.aar" dst="$S(BuildDir)/libs/line-sdk-4.0.10.aar" />
    </resourceCopies>
    
    ...
    
    <buildGradleAdditions>
        <insert>
    
            ...
            dependencies {
                ...
                implementation(name: 'gamepot-channel-line', ext: 'aar')
                implementation(name: 'line-sdk-4.0.10', ext: 'aar')
                ...
            }
    
            ...
    
            defaultConfig {
                resValue "string", "gamepot_line_channelid","xxxxxxx"
            }
            ...
    
        </insert>
    </buildGradleAdditions>
    
    ...
    
    <gameActivityImportAdditions>
      <insert>
        import io.gamepot.channel.line.GamePotLine;
      </insert>
    </gameActivityImportAdditions>
    
    ...
    
    • プロジェクト$S(PluginDir)/ThirdParty/Android/libsパスに gamepot-channel-line.aarファイルと line-sdk-4.0.10.aarファイルを追加

  • iOS

    • GamePotSDKPlugin.Build.csファイルの変更
    ...
    
    public GamePotSDKPlugin(ReadOnlyTargetRules Target) : base(Target)
    {
        ...
               else if (Target.Platform == UnrealTargetPlatform.IOS)
            {
                    PublicAdditionalFrameworks.Add(
                    new Framework(
                        "GamePotLine",
                        ModuleDirectory+"/ThirdParty/iOS/GamePotLine.framework"
                    )
                );
    
                PublicAdditionalFrameworks.Add(
                    new Framework(
                        "LineSDK",
                        ModuleDirectory+"/ThirdParty/iOS/LineSDK.framework"
                    )
                );
    
                PublicAdditionalFrameworks.Add(
                    new Framework(
                        "LineSDKObjC",
                        ModuleDirectory+"/ThirdParty/iOS/LineSDKObjC.framework"
                    )
                );
            }
        ...
    }
    ...
    
    • 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>
    ...
    

    AdditionalPlistDataに LINE関連の CFBundleURLSchemesと LSApplicationQueriesSchemesの値を追加

<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>line3rdp.{プロジェクトバンドル identifier}<</string>
</array>
...
</dict>
…..
<key>LSApplicationQueriesSchemes</key>
<array>
<string>lineauth2</string>
……
</array>

Appleウェブログイン

Appleウェブログイン機能を使用するには、ダッシュボードの プロジェクトの設定 > 一般 メニューで Apple ID Loginを設定し、以下のコードを使用します。

  • GamePot_Android_UPL.xmlの編集
...
<resourceCopies>
        <copyFile src="$S(PluginDir)/ThirdParty/Android/libs/gamepot-channel-apple-signin.aar" dst="$S(BuildDir)/libs/gamepot-channel-apple-signin.aar" />
</resourceCopies>

...

<buildGradleAdditions>
    <insert>

        ...
        dependencies {
            ...
            implementation(name: 'gamepot-channel-apple-signin', ext: 'aar')
            ...
        }

        ...

    </insert>
</buildGradleAdditions>

...

<gameActivityImportAdditions>
  <insert>
    import io.gamepot.channel.naver.GamePotAppleSignin;
  </insert>
</gameActivityImportAdditions>

...
  • プロジェクト$S(PluginDir)/ThirdParty/Android/libsパスに gamepot-channel-apple-signin.aarファイルを追加

自動ログイン機能

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

ENLoginType::Type loginType =  FGamePotSDKPluginModule::GetSharedGamePotSdk()->getLastLoginType();

if(loginType != ENLoginType::NONE) {
{
    // 最後にログインしたログインタイプでログインする方式です。
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->Login(loginType);
}
else
{
    // 初めてゲームを実行したか、ログアウトした状態。ログインできるログイン画面に移動します。
}

ログアウト機能

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

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->Logout();
    
void ASampleGameModeBase::OnLogoutSuccess()
{
}

void ASampleGameModeBase::OnLogoutFailure(FNError NError)
{
    // ログアウトに失敗。NError.messageを利用してメッセージを表示します。
}

会員退会機能

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


if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->deleteMember();
    
/// 会員退会に成功
void ASampleGameModeBase::OnDeleteMemberSuccess()
{

}

void ASampleGameModeBase::OnDeleteMemberFailure(FNError NError)
{
   // 会員退会に失敗。NError.messageを利用してメッセージを表示します。
}

ログイン検証機能

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

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

外部アカウントとの連携

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

アカウント連携機能

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

UENUM()
namespace ENLinkingType
{
    enum Type
    {
        NONE,
        GOOGLEPLAY,
        GAMECENTER,
        GOOGLE,
        FACEBOOK,
        NAVER,
        TWITTER,
        LINE,
        APPLE,
        THIRDPARTYSDK
    };
}

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->createLinking(ENLinkingType::Type linkingType);
    
void ASampleGameModeBase::OnCreateLinkingSuccess(FNUserInfo NUserInfo) {
        // アカウント連携に成功
}

void ASampleGameModeBase::OnCreateLinkingCancel() {
        // ユーザーがアカウント連携をキャンセルした場合

}
void ASampleGameModeBase::OnCreateLinkingFailure(FNError NError) {
        // アカウント連携に失敗。NError.messageを利用してメッセージを表示します。
}

連携リスト確認機能

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

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
     TArray<FNLinkingInfo> linkedList = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getLinkedList();


//リンク情報の定義
USTRUCT()
struct FNLinkingInfo
{
    UPROPERTY()
    ENLinkingType::Type provider;      // アカウント連携情報(google、facebook、naver、apple..)
}
}

連携解除機能

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


if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->deleteLinking(ENLinkingType::Type linkType);
    
void ASampleGameModeBase::OnDeleteLinkingSuccess() {
/// アカウント連携の解除に成功
}

void ASampleGameModeBase::OnDeleteLinkingFailure(FNError NError) {
    /// アカウント連携の解除に失敗。NError.messageを利用してメッセージを表示します。
}

決済機能

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

In-App商品の照会機能

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

[Case1]

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    TArray<FNPurchaseItem> itemList = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getPurchaseItems();


[Case2]

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->getPurchaseDetailListAsync();
    
// getPurchaseDetailListAsyncに成功
void ASampleGameModeBase::OnSdkPurchaseDetailListSuccess(TArray<FNPurchaseItem> Items)
{
}

// getPurchaseDetailListAsyncに失敗
void ASampleGameModeBase::OnSdkPurchaseDetailListFailure(FNError NError)
{
    
}



USTRUCT()
struct FNPurchaseItem
{
    UPROPERTY()
    FString productId;              // 商品 ID    

    UPROPERTY()
    FString type;                   // 商品タイプ。「inapp」に固定

    UPROPERTY()
    FString price;                  // 価格 googleストア: $0.99、その他のストア: 0.99   

    UPROPERTY()
    FString price_amount;           

    UPROPERTY()
    FString price_amount_micros;    // (UIに表示する場合に推奨)通貨と価格を合わせた値。 ONE Storeの場合、通貨単位は伝達されません。例) $0.99

    UPROPERTY()
    FString price_currency_code; // 通貨コード 例) KRW、USD

    UPROPERTY()
    FString price_with_currency;

    UPROPERTY()
    FString title;                   // 商品名       

    UPROPERTY()
    FString description;            // 商品の説明
}

決済試行機能

一つの決済 APIで Google Play Storeと APPSTOREの両方で決済試行機能を使用できます。

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

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

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->purchase(FString productId, FString uniqueId, FString serverId, FString playerId, FString etc);
    
    /// In-App決済に成功
 void ASampleGameModeBase::OnPurchaseSuccess(FNPurchaseInfo NPurchaseInfo)
 {
 }

/// In-App決済をキャンセル
 void ASampleGameModeBase::OnPurchaseCancel()
 {
 }

/// In-App決済に失敗
 void ASampleGameModeBase::OnPurchaseFailure(FNError NError)
 {
       // NError.messageを利用してメッセージを表示します。
 }

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

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


USTRUCT()
struct FNPurchaseInfo
{
    UPROPERTY()
    FString price;                         // 決済アイテムの価格    
    UPROPERTY()
    FString productId;                  // 決済アイテム ID   
    UPROPERTY()
    FString currency;                    // 決済価格通貨(KRW/USD) 
    UPROPERTY()
    FString orderId;                      // ストア Order ID    
    UPROPERTY()
    FString productName;            // 決済アイテム ID 
    UPROPERTY()
    FString gamepotOrderId;         // GAMEPOTで作成した order id    
    UPROPERTY()
    FString uniqueId;                    // 開発会社で別途管理する領収証 ID  
    UPROPERTY()
    FString serverId;                    // 決済を行ったキャラクターのサーバ ID   
    UPROPERTY()
    FString playerId;                    // 決済を行ったキャラクターのキャラクター ID
    UPROPERTY()
    FString etc;                         // 決済を行ったキャラクターのその他の情報  
    UPROPERTY()
    FString signature;                  // ストア signature     
    UPROPERTY()
    FString originalJSONData;   // 領収証 Data
}

決済アイテムの支給機能

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

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

MyCard決済

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

  1. ダッシュボード > 決済 > IAPストアタイプ: Google項目 > 価格の追加 > 通貨(例: TWD)/価格情報を入力し、保存します。

  2. ダッシュボード > プロジェクトの設定 > 外部決済項目に MyCardを追加し、その FacService ID / Sign Keyが正常に入力されたのか確認します。

  3. 決済は SDKの以下のコードを呼び出します。

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

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->purchase(FString productId, FString uniqueId, FString serverId, FString playerId, FString etc);

  • MyCard使用中の決済アイテムの呼び出し形式は、以下の APIを使用してください。
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
 TArray<FNPurchaseItem> itemList = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getPurchaseThirdPaymentsItems();
  1. $S(PluginDir)/GamePot_Android_UPL.xmlファイルをエディタで開きます。

...
    <resourceCopies>
    ...
    <copyFile src="$S(PluginDir)/ThirdParty/Android/libs/gamepot-billing-mycard.aar" dst="$S(BuildDir)/libs/gamepot-billing-mycard.aar" />
    ....
    
  <buildGradleAdditions>
  ...
       dependencies {
      ...
      implementation(name: 'gamepot-billing-mycard', ext: 'aar')
      ...
      
      defaultConfig {
      ...
      resValue "string", "gamepot_store", "google"
      resValue "string", "gamepot_payment", "mycard" // ストアが googleの場合にのみ動作します。

5 ../ThirdParty/Android/libs/gamepot-billing-mycard.aarフォルダ内に gamepot-billing-mycard.aarが含まれているか確認します。

外部決済

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

// productId: マーケットに登録されている商品 ID
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->purchaseThirdPayments(FString productId);


// 商品情報リストを呼び出すためのAPI
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    TArray<FNPurchaseItem> itemList = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getPurchaseThirdPaymentsItems();

SDK独自提供のログイン UI

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

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

GAMEPOT Unreal SDKが提供するログインUIを呼び出すには、以下のコードを使用してください。

USTRUCT()
struct FNLoginUIInfo
{
    //画像ロゴ挿入の有無
    UPROPERTY()
    bool showLogo;

    //UIで表示するLogin Type
    UPROPERTY()
    TArray<ENLoginType::Type> loginTypes;  //google, facebook...
}

//呼び出すログイン UIタイプ
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->showLoginWithUI(FNLoginUIInfo NLoginUIInfo);
    
void ASampleGameModeBase::OnLoginSuccess(FNUserInfo NUserInfo)
{
    // ログインに成功
}

void ASampleGameModeBase::OnLoginCancel()
{
    // ログインをキャンセル
}

void ASampleGameModeBase::OnLoginFailure(FNError NError)
{
   // ログインに失敗。error.messageを利用してメッセージを表示します。
}

// メンテナンス(ダッシュボードでメンテナンスが有効化している場合に呼び出す)
void ASampleGameModeBase::OnLoginMaintenance(FNAppStatus NAppStatus)
{
   // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
    // ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
    // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用

    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->showAppStatusPopup(NAppStatus.ToJsonString());
}

// 強制アップデート(ストアバージョンとクライアントバージョンが異なる場合に呼び出す)
void ASampleGameModeBase::OnLoginNeedUpdate(FNAppStatus NAppStatus)
{
     // パラメータで渡された status情報に基づいてポップアップを作って表示します。以下の二つの方式のうち一つを選択してポップアップを構成します。
    // ケース1: 開発会社で直接 UIを実装したゲーム内ポップアップを使用
    // ケース2: 以下のコードを呼び出して SDK独自のポップアップを使用

    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->showAppStatusPopup(NAppStatus.ToJsonString());
}

void ASampleGameModeBase::OnLoginExit()
{
    // TODO: Login UIを終了する場合、
}

void ASampleGameModeBase::OnAppClose()
{
    // アプリを終了
    // 強制アップデートやメンテナンス機能をケース2方式で実装する場合は、アプリを強制終了できるため、ここでアプリを終了できるように実装します。

}

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

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

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

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

クーポン機能

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

   if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    {
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->coupon(FString couponNumber); // クーポン番号

        FGamePotSDKPluginModule::GetSharedGamePotSdk()->coupon(FString couponNumber, FString userData); // クーポン番号、ユーザー情報
    }
    
void ASampleGameModeBase::OnCouponSuccess(FString msg)
{
    /// クーポン使用に成功
}

void ASampleGameModeBase::OnCouponFailure(FNError NError)
{
      // クーポン使用に失敗。error.messageを使用してメッセージを表示します。
}

アイテムの支給

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

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

プッシュ通知機能

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

一般プッシュ通知の設定

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

    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->setPushStatus(bool pushEnable); 
        
void ASampleGameModeBase::OnPushSuccess()
{
    /// プッシュ通知の状態変更に関するサーバ通信に成功
}

void ASampleGameModeBase::OnPushFailure(FNError NError)
{
        // プッシュ通知の状態変更に失敗。error.messageを利用してメッセージを表示します。
}

夜間プッシュ通知の設定

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

    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->setPushNightStatus(bool nightPushEnable); 

void ASampleGameModeBase::OnPushNightSuccess()
{
    /// 夜間プッシュ通知の状態変更に関するサーバ通信成功
}

void ASampleGameModeBase::OnPushNightFailure(FNError NError)
{
        // 夜間プッシュ通知の状態変更に失敗。error.messageを利用してメッセージを表示します。
}

プッシュ型広告の設定

プッシュ型広告を設定するには、以下のコードを使用します。

    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->setPushADStatus(bool adPushEnable); 

void ASampleGameModeBase::OnPushAdSuccess()
{
    /// プッシュ型広告の状態変更に関するサーバ通信成功
}

void ASampleGameModeBase::OnPushFailure(FNError NError)
{
        // プッシュ型広告の状態変更に失敗。error.messageを利用してメッセージを表示します。
}

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

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

    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->setPushStatus(bool pushEnable, bool nightPushEnable, bool adPushEnable); 
 
void ASampleGameModeBase::OnPushStatusSuccess()
{
    /// プッシュ通知の状態変更に関するサーバ通信に成功
}

void ASampleGameModeBase::OnPushStatusFailure(FNError NError)
{
        // プッシュ通知の状態変更に失敗。error.messageを利用してメッセージを表示します。
}

プッシュ通知の状態確認

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

    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FNPushInfo NPushInfo = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getPushStatus(); 
        
USTRUCT()
struct FNPushInfo
{
    UPROPERTY()
    bool enable;       // 一般プッシュ通知を許可するかどうか               

    UPROPERTY()
    bool night;         // 夜間プッシュ通知を許可するかどうか

    UPROPERTY()
    bool ad;            // プッシュ型広告を許可するかどうか
}

お知らせの画像表示機能

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

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

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


if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->showNotice(bool showToday = true); 

// true: 「今日は表示しない」を適用
// false: 「今日は表示しない」とは関係なしに強制表示

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->showEvent(FString Type); 

// Type: ダッシュボードのお知らせ > 分類メニューで設定した分類名に該当する画像のみ表示

 void ASampleGameModeBase::OnReceiveScheme(FString scheme)
 {
      // GAMEPOTダッシュボードで設定した scheme値を伝達
 }

カスタマーサポート機能

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

問い合わせ機能

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

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

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

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->showCSWebView(); 

外部リンクの問い合わせ

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

// URL: GAMEPOTから発行された外部カスタマーサポート URL
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->showWebView(FString url); 

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

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

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

  • 利用約款

    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->showTerms(); 
    
  • 個人情報の取扱方針

    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->showPrivacy(); 
    
  • 払い戻しポリシー

    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->showRefund(); 
    

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

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

約款同意UIの呼び出し

提供される約款同意 UIのテーマを変更して呼び出すには、以下のコードを使用します。

// ケース1)基本呼び出し(BLUEテーマを適用)
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->showAgreeDialog(); 

// ケース2)その他のテーマを適用時
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
{
    // - 基本テーマ
    // BLUE
    // GREEN
    
    //  - 改善テーマ
    // MATERIAL_RED,
    // MATERIAL_BLUE,
    // MATERIAL_CYAN,
    // MATERIAL_ORANGE,
    // MATERIAL_PURPLE,
    // MATERIAL_DARKBLUE,
    // MATERIAL_YELLOW,
    // MATERIAL_GRAPE,
    // MATERIAL_GRAY,
    // MATERIAL_GREEN,
    // MATERIAL_PEACH,

    FNAgreeInfo info;
    info.theme = "MATERIAL_RED";
    info.headerTitle = TEXT("title");
    info.headerBackGradient = "{ 0xFF00050B, 0xFF0F1B21 }";
    info.headerBottomColor = "0xFFFF0000";
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->showAgreeDialog(info.ToJsonString()); 
}

// 約款に同意した場合
void ASampleGameModeBase::OnAgreeDialogSuccess(FNAgreeResultInfo NAgreeResultInfo)
{
       // NAgreeResultInfo.agree: 約款の必須事項にすべて同意した場合、true
        // NAgreeResultInfo.agreePush: (一般)プッシュ通知を許可した場合は true、そうでない場合は false
        // NAgreeResultInfo.agreeNight: 夜間プッシュ通知を許可した場合は true、そうでない場合はfalse
        // agreePush / agreeNight値はログインを完了してから setPushStatus APIを通じて一度に設定します。
}

void ASampleGameModeBase::OnAgreeDialogFailure(FNError NError)
{
    // エラー発生
}
  • NAgreeInfoの定義
    USTRUCT()
    struct FNAgreeInfo
    {    
        // 基本テーマ
        UPROPERTY()
        FString theme;
    
        // タイトル
        // 背景カラー(gradient)
        UPROPERTY()
        TArray<FString> headerBackGradient;
    
        // タイトル領域の下段ラインのカラー
        UPROPERTY()
        FString headerBottomColor;
    
        // アイコン画像のファイル名(aos - drawable / ios - bundle)
        UPROPERTY()
        FString headerIconDrawable;
    
        // 名前
        UPROPERTY()
        FString headerTitle;
    
        // タイトルカラー
        UPROPERTY()
        FString headerTitleColor;
    
        // コンテンツ
        // 背景カラー(gradient)
        UPROPERTY()
        TArray<FString> contentBackGradient;
    
        // アイコン画像のファイル名(aos - drawable / ios - bundle)
        UPROPERTY()
        FString contentIconDrawable;
    
        // アイコンのカラー
        UPROPERTY()
        FString contentIconColor;
    
        // チェックボタンのカラー
        UPROPERTY()
        FString contentCheckColor;
    
        // チェック内容のカラー
        UPROPERTY()
        FString contentTitleColor;
    
        // 見るフレーズのカラー
        UPROPERTY()
        FString contentShowColor;
    
        // 下段(ゲーム開始)
        // 背景カラー(gradient)
        UPROPERTY()
        TArray<FString> footerBackGradient;
    
        // ゲーム開始ボタンの背景カラー(gradient)
        UPROPERTY()
        TArray<FString> footerButtonGradient;
    
        // ゲーム開始ボタンのフレームカラー
        UPROPERTY()
        TArray<FString> footerButtonOutlineColor;
    
        // ゲーム開始フレーズ
        UPROPERTY()
        TArray<FString> footerTitle;
    
        // ゲーム開始フレーズのカラー
        UPROPERTY()
        TArray<FString> footerTitleColor;
    
        //一般プッシュの表示有無
        UPROPERTY()
        bool showPush;
    
        // 夜間プッシュの表示有無
        UPROPERTY()
        bool showNightPush;
    
        // 「すべて同意」フレーズ変更時
        UPROPERTY()
        FString allMessage;
    
        // 「サービス利用約款」フレーズ変更時
        UPROPERTY()
        FString termMessage;
    
        // 「個人情報の取扱方針」フレーズ変更時
        UPROPERTY()
        FString privacyMessage;
    
        // 「一般プッシュ」フレーズ変更時
        UPROPERTY()
        FString pushMessage;
    
        // 「夜間プッシュ」フレーズ変更時
        UPROPERTY()
        FString nightPushMessage;
    
        UPROPERTY()
        FString pushDetailURL;
    
        UPROPERTY()
        FString nightPushDetailURL;
    }
    


  • それぞれの変数は、以下の画像に表示された領域に適用されます。
    gamepot_unreal_002_ko

GDPR約款のチェックリスト機能

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

//返されるデータ形式は FStringタイプで、string[]の形式です。例> "[ gdpr_privacy, gdpr_term ]"
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FString gdpr_list = FGamePotSDKPluginModule::GetSharedGamePotSdk()->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を通じて決済をキャンセルしたアイテムを再決済すると、利用停止が自動的に解除されます。

決済キャンセルを悪用するユーザーに対する再決済ポップアップ機能を使用するには、以下のコードを使用します。

    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    {
        //テーマの種類
        // MATERIAL_RED,
        // MATERIAL_BLUE,
        // MATERIAL_CYAN,
        // MATERIAL_ORANGE,
        // MATERIAL_PURPLE,
        // MATERIAL_DARKBLUE,
        // MATERIAL_YELLOW,
        // MATERIAL_GRAPE,
        // MATERIAL_GRAY,
        // MATERIAL_GREEN,
        // MATERIAL_PEACH
        
        NVoidInfo info;
        info.theme = "MATERIAL_RED";
        FGamePotSDKPluginModule::GetSharedGamePotSdk()->setVoidBuilder(info.ToJsonString());
    }
  • NVoidInfoの定義
USTRUCT()
struct FNVoidInfo
{
    // 基本テーマ
    UPROPERTY()
    FString theme;
    
    // 背景カラー(gradient)
    UPROPERTY()
    TArray<FString> headerBackGradient;
    
    // 名前
    UPROPERTY()
    FString headerTitle;
    
    // タイトルカラー
    UPROPERTY()
    FString headerTitleColor;
    
    UPROPERTY()
    TArray<FString> contentBackGradient;
    
    UPROPERTY()
    TArray<FString> listHeaderBackGradient;  
    
    UPROPERTY()
    FString listHeaderTitleColor;
    
    UPROPERTY()
    TArray<FString> listContentBackGradient;
    
    UPROPERTY()
    FString listContentTitleColor;
   
   // 背景カラー(gradient)
    UPROPERTY()
    TArray<FString> footerBackGradient;
    
    // ボタンの背景カラー(gradient)
    UPROPERTY()
    TArray<FString> footerButtonGradient;
    
    UPROPERTY()
    FString footerTitleColor;
    
    UPROPERTY()
    FString descHTML;
    
    UPROPERTY()
    FString descColor;
    
    UPROPERTY()
    FString listHeaderTitle;
    
    UPROPERTY()
    FString footerTitle;
}

Remote Config機能

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

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

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

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
{
    //"test_01": パラメータ FString
    FString value = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getConfig("test_01"); 

    //ダッシュボードに追加したすべてのパラメータを JSON string形式で取得します。
    FString json_value = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getConfigs();
}

ゲームログの転送機能

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

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

  • 予約語およびコード
    予約語 必須の有無 タイプ 説明 最大長さ
    FNSendLogCharacter.NAME 必須 FString キャラクター名 128
    FNSendLogCharacter.LEVEL 任意 FString レベル 128
    FNSendLogCharacter.SERVER_ID 任意 FString サーバ ID 128
    FNSendLogCharacter.PLAYER_ID 任意 FString キャラクター ID 128
    FNSendLogCharacter.USERDATA 任意 FString その他の情報 128
    USTRUCT()
    struct FNSendLogCharacter
    {
        UPROPERTY()
        FString NAME;
    
        UPROPERTY()
        FString PLAYER_ID;
    
        UPROPERTY()
        FString SERVER_ID;
    
        UPROPERTY()
        FString LEVEL;
    
        UPROPERTY()
        FString USERDATA;
    }
    
    
    if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    {
        FNSendLogCharacter info;
        info.NAME = TEXT("tester");
        info.PLAYER_ID = TEXT("player_id");
    
        bool result = FGamePotSDKPluginModule::GetSharedGamePotSdk()->characterInfo(info.ToJsonString());
    
        // 結果値 true: 検証に成功。ログが GAMEPOTサーバに転送されます。
        // 結果値 false: 検証に失敗。logcatを確認します。
    }
    

setUserDataの設定

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

ex)
TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject);
JsonObject->SetStringField("appversion", "1.0.23");
JsonObject->SetStringField("server", "s1");

if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
    FGamePotSDKPluginModule::GetSharedGamePotSdk()->setUserData(JsonObject);


void AGamePotSampleGameModeBase_Main::OnSetUserDataSuccess()
{
// 成功
}
void AGamePotSampleGameModeBase_Main::OnSetUserDataFailure(FNError NError)
{
// 失敗
}

3rd Party SDK連携

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

3rd Party SDKログイン連携

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

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

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

3rd Party SDKとの決済連携

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

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