- 印刷する
- PDF
Unreal SDK
- 印刷する
- PDF
Classic/VPC環境で利用できます。
Unrealでゲームを開発するためのGAMEPOT Unreal SDKの使用方法について説明します。SDKをインストールして環境を構成することで、ゲームとダッシュボードを連携できます。
Unreal用GAMEPOT SDKを使用するためのシステム要件は、以下のとおりです。
- 最小スペック:Unreal 4.26以上
SDKのインストール及び環境の構成
GAMEPOT Unreal SDKをインストールして環境を構成し、GAMEPOTのダッシュボードとゲームを連携してゲーム開発に必要な機能を使用できます。
SDKのインストール
GAMEPOT Unreal SDKをインストールし、Unrealでプロジェクトを構成する方法は、以下のとおりです。
- 管理者アカウントでダッシュボードにログインします。
- 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 Facebookコンソールで取得したprotocol scheme fb[app_id] 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 注意! ゲームポットダッシュボードの作成リージョンがシンガポールの場合のみ、sgを入力 gamepot_license_url 注意! ゲームポットダッシュボードの作成リージョンが日本の場合にのみ、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) } ... } </insert> </buildGradleAdditions>
プッシュ通知アイコンの設定
プッシュメッセージの受信時に、通知バーに表示するアイコンを設定できます。別途設定しない場合は、SDKに含まれている基本画像を使用するとともに、ゲームに合ったアイコンを直接設定できます。
プッシュ通知アイコンを設定する方法は、以下のとおりです。
- 以下のようにプロジェクトパスに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 |
- 画像ファイル名をic_stat_gamepot_smallに変更します。
iOS 環境設定
GAMEPOT Unreal SDKを使用してiOSベースのゲームを開発するには、必要な環境を設定する必要があります。
ビルド時のバージョンコードは、整数型でユニークに増加する方法で進行してください。
プロジェクトの構成
iOS環境を設定するためにプロジェクトを構成する方法は、以下のとおりです。
Google Firebaseコンソールで取得したGoogleService-Info.plistファイルをUnrealプロジェクトに追加します。
表を参照してプロジェクトの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スキーム(line3rdp.{プロジェクトバンドルID}) |
gamepot_twitter_consumerkey | Twitter Consumer Key |
gamepot_twitter_consumersecret | Twitter Consumer Secret |
gamepot_elsa_projectid | NAVERクラウドELSA使用時のプロジェクトID |
gamepot_region | 注意! ゲームポットダッシュボードの作成リージョンがシンガポールの場合のみ、sgを入力 |
gamepot_license_url | 注意! ゲームポットダッシュボードの作成リージョンが日本の場合にのみ、https://gamepot.apigw.ntruss.com/fw/jp-v1 を入力 |
- プロジェクトの設定の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>
- iOS 14以上のバージョンで、ユーザーからIDFAの取得権限をリクエストするポップアップを使用する場合
<key>NSUserTrackingUsageDescription</key>
<string>$(PRODUCT_NAME) This identifier will collect IDFA for advertising purposes.</string>
- 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; // 不明なエラー
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; // 決済で不明なエラー発生及びストア側からエラーを伝達する場合
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コンソールを設定する方法は、以下のとおりです。
Google Firebaseコンソールで取得したAndroid用google-service.jsonファイルを$S(PluginDir)/ThirdParty/Android/パスにコピーします。
APKを構成する際に使用したKeystoreファイルのSHA-1値をFirebaseコンソールに追加します。
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>
- Googleログインを行う際に、onCancelレスポンスと一緒にログインされない場合は、以下のように解決してください。
- google-service.jsonファイルを正常に適用したかどうかを確認
- APKを構成する際に使用したKeystoreと、Firebaseコンソールを登録するためにSHA-1値を抽出したKeystoreが同じインスタンスであるかどうかを確認
- Firebaseコンソールに登録したパッケージ名でビルドしたかどうかを確認
Facebookログイン環境の設定
ログイン機能を使用するためにFacebookコンソールを設定する方法は、以下のとおりです。
Facebook for DevelopersコンソールでアプリタイプをNoneまたはConsumerまたはGamingにしてアプリを作成します。
APKを構成する際に使用したKeystoreのキーハッシュ値をFacebook for Developersコンソールに追加します。
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>
- プロジェクトGamepotConfig-info.plistファイルに以下のコードを追加します。
gamepot_facebook_app_id// Facebook開発者コンソールで取得したアプリID
SourceCodeで確認する場合は以下のように追加
...
<key>gamepot_facebook_app_id</key>
<string>xxxxxx</string>
...
- 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パスにgamepot-channel-naver.aarファイルを追加
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で使用するURLスキーム
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スキーム(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ログインを設定し、以下のコードを使用します。
- 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商品の照会機能
ストアに登録されている商品情報の照会機能を使用するには、以下のコードを使用します。
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
TArray<FNPurchaseItem> itemList = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getPurchaseItems();
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の場合、通貨単位は伝達されません。ex) $0.99
UPROPERTY()
FString price_currency_code; // 通貨コード ex)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; // 決済アイテム名
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
}
決済アイテムの支給機能
決済ストアの領収書の内訳と対照して検証をすべて完了した場合のみ、開発会社のサーバに支給リクエストを転送するように設定できます。
詳しい説明は、アイテム支給のリクエストをご参照ください。
My Card決済
My Cardと連携させるためのFacServiceID / KEYの値は、My Card側に確認してからダッシュボードで設定してください。
ダッシュボード >> 決済 >> IAPのストアタイプ:Google項目 > 価格の追加 > 追加(ex. TWD)/価格情報を入力し、保存します。
ダッシュボード >> プロジェクトの設定 >> 外部決済項目にMy Cardを追加し、そのFacService ID / Sign Keyが正常に入力されたのか確認します。
決済は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);
My Cardの使用中の決済アイテムの呼び出し形式は、以下のAPIを使用してください。
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable()) TArray<FNPurchaseItem> itemList = FGamePotSDKPluginModule::GetSharedGamePotSdk()->getPurchaseThirdPaymentsItems();
- $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画像を設定する方法は、以下のとおりです。
- 以下のようにパスに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 |
- 画像ファイル名を 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; // プッシュ型広告を許可するかどうか
}
ローカルプッシュ通知機能
プッシュメッセージサーバを介さずにデバイスで独自にプッシュ通知を表示できます。
プッシュ通知を登録して所定時間にローカルプッシュ通知が表示されるようにするには、以下のコードを使用します。
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
int pushId = FGamePotSDKPluginModule::GetSharedGamePotSdk()->sendLocalPush(FString date, FString title, FString message);
// date : (Format - timestamp "yyyy-MM-dd HH:mm:ss")
// ex > DateTime.Parse("2018-01-01 00:00:00")
// title : "title"
// message : "content"
// pushidのreturn値は開発会社で管理
登録したローカルプッシュ通知をキャンセル
ローカルプッシュ通知を登録する際に取得したpushid
値を使って既に登録されているプッシュ通知をキャンセルするには、以下のコードを使用してください。
if (FGamePotSDKPluginModule::IsGamePotSdkAvailable())
bool success = FGamePotSDKPluginModule::GetSharedGamePotSdk()->cancelLocalPush(int /*プッシュ登録の際に取得したpushId*/);
お知らせの画像表示機能
ダッシュボードのお知らせメニューにアップロードした画像が表示されるように設定できます。推奨画像サイズは、以下のとおりです。
- サイズ: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のテーマを変更して呼び出すには、以下のコードを使用します。
// Case 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; }
それぞれの変数は、以下の画像に表示された領域に適用されます。
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); }