Classic/VPC環境で利用できます。
iOS用ゲーム開発のための GAMEPOT iOS SDKの使用方法について説明します。SDKをインストールして環境を構成することで、ゲームとダッシュボードを連携できます。
システム要件
iOS用 GAMEPOT SDKを使用するためのシステム要件は、次の通りです。
- 最小スペック: iOS 10.0以降
- 開発環境: Xcode
SDKのインストールと環境の構成
GAMEPOT iOS SDKをインストールして環境を構成し、GAMEPOTのダッシュボードとゲームを連携してゲーム開発に必要な機能を使用できます。
GAMEPOT SDKでサポートしている言語は次の通りです。
- 英語、イタリア語、タイ語、ベトナム語、日本語、中国語(簡体/繁体)、インドネシア語、ドイツ語、スペイン語、フランス語、韓国語
アプリ実行時にデバイスの言語によって SDK内サポート言語で表記され、サポートされていない言語は英語で表記されます。
xcode > localizationに適用を希望する言語を追加します。
ビルド時のバージョンコードは、整数形式でユニークに増加する方式にします。
SDKのインストール
GAMEPOT iOS SDKをインストールし、Xcodeでプロジェクトを構成する方法は、次の通りです。
- GAMEPOT SDKのダウンロード > iOSからダウンロードリンクをクリックします。
- Xcodeを実行し、ゲームプロジェクトを開きます。
- ダウンロードした SDKファイルの圧縮を展開し、作成したプロジェクトのフォルダにドラッグ&ドロップします。
Dependenciesおよび Bundle Resourceの追加
SDKを使用するためにサービス別に適した Dependenciesおよび Bundle Resourceを Xcodeに追加するには、以下の表をご参照ください。
| Service | Framework | Dependencies | Bundle Resource |
|---|---|---|---|
| 基本(Base) | AFNetworking.framework FirebaseAnalytics.framework FirebaseCore.framework FirebaseCoreDiagnostics.framework FirebaseInstanceID.framework FirebaseMessaging.framework FirebaseNanoPB.framework GamePot.framework GoogleToolboxForMac.framework nanopb.framework Protobuf.framework |
libz.tbd WebKit.framework UserNotifications.framework |
GamePot.bundle |
| ログイン(Login) | Base GamePotChannel.framework Google Sign In GamePotGoogleSignIn.framework GoogleSignIn.framework GoogleSignInDependencies.framework FBAEMKit.xcframework FBSDKCoreKit_Basics.xcframework FBSDKCoreKit.xcframework FBSDKLoginKit.xcframework GamePotFacebook.framework LINE GamePotLine.framework LineSDK.framework LineSDKObjC.framework NAVER GamePotNaver.framework NaverThirdPartyLogin.framework |
Google Sign In AuthenticationServices.framework LocalAuthentication.framework SafariServices.framework LINE SafariServices.framework |
Google Sign In GoogleSignIn.bundle |
| GameCenter | GamePotGameCenter.framework | ||
| AppleID | GamePotApple.framework |
Information Property Listの追加と設定
SDKを使用するには、Information Propertyを Xcodeに追加して設定する必要があります。
GAMEPOT iOS SDKは Google Firebaseを使用するため、SDKの基本設定値を含む Information Property Listだけでなく、Firebaseコンソールで取得した Information Property Listをプロジェクトに一緒に追加する必要があります。
Information Property Listを追加して設定する方法は、次の通りです。
-
ダウンロードした SDKファイルに含まれた GamePotConfig-Info.plistファイルをプロジェクトに追加します。
- そのファイルが存在しない場合は、同じ名前のファイルを作成し、キーに該当する値を入力します。
-
Google Firebaseコンソールで取得した GoogleService-Info.plistファイルをプロジェクトに追加します。
-
Xcodeで追加した GamePotConfig-Info.plistで以下の設定を変更します。
gamepot_project_id: GAMEPOTプロジェクト IDgamepot_elsa_projectid: (任意) GAMEPOTログプロジェクト ID
-
Targets > Info > Custom iOS Target Properties メニューを順にクリックし、以下のユーザー権限取得オプションを追加します。
-
このユーザー権限は GAMEPOTサポートセンター内のファイルアップロード機能で使用されます。
NSCameraUsageDescription,NSPhotoLibraryUsageDescription,NSMicrophoneUsageDescription -
iOS 14バージョンから IDFA値を取得する際に、ユーザーから権限を取得しないと IDFA値を取得できないようになりました。従って、IDFA値を取得する際にユーザーから権限を取得するポップアップを使用する場合は、Targets >> Info >> Custom iOS Target Propertiesに以下のユーザー権限取得オプションを追加してください。(収集する目的と使用先についての説明が必要です)
NSUserTrackingUsageDescription
-
-
GAMEPOTダッシュボード作成リージョンがシンガポールの場合にのみ、以下の設定を追加します。
gamepot_region: sg
-
GAMEPOTダッシュボード作成リージョンが日本の場合にのみ、以下の設定を追加します。
gamepot_license_url: https://gamepot.apigw.ntruss.com/fw/jp-v1
Build Settingsオプションの追加
SDKを使用するには、Xcode Build Settingsに-ObjC -lz -lstdc++ -lc++オプションを追加する必要があります。
オプションを追加するには、Xcodeで Build Settings > Linking > Other Linker Flags メニューを順にクリックし、-ObjC -lz -lstdc++ -lc++オプションを追加します。
ログイン環境の設定
アカウント別のログイン環境を設定するには、Xcodeプロジェクトに適した設定を追加する必要があります。
Facebookログイン環境
Dependenciesの追加を完了すると、Facebookログイン環境を設定できます。
Facebookログイン環境を設定する方法は、次の通りです。
- Facebook for Developersコンソールでアプリタイプを None、Consumer、Gamingのいずれかにしてアプリを作成します。
- Facebook App ID値を Xcodeの Info > URL Types メニューに"fb{Facebook App ID}"の形で追加します(例: fb561593141718906)。
- Info > iOS Target Property メニューを順にクリックし、LSApplicationQueriesSchemesに以下の設定を追加します。
fbapi,fb-messenger-share-api,fbauth2,fbshareextension,fb-messenger-api
- GamePotConfig-Info.plistで以下の設定を変更します。
gamepot_facebook_app_id: Facebook App IDgamepot_facebook_display_name: Facebook display namegamepot_facebook_client_token: Facebookコンソール > アプリ > 設定 > 高度な設定 > クライアントトークン
Google Sign In、LINE、Twitter、NAVER、Apple IDログイン環境の設定
Dependenciesと BundleResourceの追加を完了すると、アカウント別のログイン環境を設定できます。
アカウント別のログイン環境を設定するには、Xcodeプロジェクトに以下の設定を追加します。
- Google Sign In
- GoogleService-Info.plistファイルの
REVERSED_CLIENT_ID値をコピーし、Xcodeで Info > URL Types メニューを順にクリックして項目を追加し、URL Schemesに入力 - GamePotConfig-Info.plistで以下の設定を変更
gamepot_google_app_id: GoogleService-Info.plistファイルのCLIENT_ID値
gamepot_google_url_schemes: GoogleService-Info.plistファイルのREVERSED_CLIENT_ID値
- GoogleService-Info.plistファイルの
- LINE
-
GamePotConfig-Info.plistで以下の設定を変更
gamepot_line_channelid: Line Channel ID
gamepot_line_url_schemes: Line URL Scheme (line3rdp.{プロジェクトバンドル ID}) -
Info > iOS Target Property メニューを順にクリックし、LSApplicationQueriesSchemesに以下の設定を追加します。
lineauth2
-
- NAVER
- GamePotConfig-Info.plistで以下の設定を変更
gamepot_naver_clientid: Naver Client Id
gamepot_naver_secretid: Naver Secret Id
gamepot_naver_urlscheme: Naver URL Scheme - Info > iOS Target Property メニューの LSApplicationQueriesSchemesに以下の設定を追加
naversearchapp,naversearchthirdlogin,navercafe - Info > URL Types メニューに
gamepot_naver_urlschemeと同じ値を追加
- GamePotConfig-Info.plistで以下の設定を変更
- Apple ID
- Targetを選択し、Signing & Capabilities メニューで Sign In with Apple Capabilityを追加
初期化
初期化を実行するには、AppDelegateファイルで以下のコードを使用します。
#import <GamePot/GamePot.h>
#if __has_include(<AppTrackingTransparency/AppTrackingTransparency.h>)
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#endif
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
// GamePot SDK Initialize
[[GamePot getInstance] setup];
// Push Permission
if(SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(@"10.0"))
{
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
if(!error){
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
}
}];
}
else
{
// Code for old versions
UIUserNotificationType allNotificationTypes = (UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge);
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:allNotificationTypes categories:nil];
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];
}
// iOS 14バージョンで IDFAの取得権限をリクエストするポップアップを呼び出す
// プロジェクトに AppTrackingTransparency.frameworkが追加されていないと呼び出されません。
#if __has_include(<AppTrackingTransparency/AppTrackingTransparency.h>)
if (@available(iOS 14, *)) {
if(NSClassFromString(@"ATTrackingManager"))
{
// リスナーが登録されていない場合は、リクエストポップアップが発生しません。
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
switch (status)
{
case ATTrackingManagerAuthorizationStatusNotDetermined:
break;
case ATTrackingManagerAuthorizationStatusRestricted:
break;
case ATTrackingManagerAuthorizationStatusDenied:
break;
case ATTrackingManagerAuthorizationStatusAuthorized:
break;
default:
break;
}
}];
}
}
#endif
...
}
// Push
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
...
[[GamePot getInstance] handleRemoteNotificationsWithDeviceToken:deviceToken];
...
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[[GamePotChat getInstance] start];
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
[[GamePotChat getInstance] stop];
}
ログインに関連する機能
Google、Facebook、NAVERなど様々なログイン SDK機能を統合して GAMEPOT iOS SDKで使用できます。
Twitterログインはサポートしていません。
使用前の設定
ログインに関連する SDK機能を使用するには、まず Appdelegateに以下のコードを追加して設定を構成します。
// AppDelegate.m
#import <GamePotChannel/GamePotChannel.h>
// Google Loginを使用する場合
#import <GamePotGoogleSignIn/GamePotGoogleSignIn.h>
// Facebookログインを使用する場合
#import <GamePotFacebook/GamePotFacebook.h>
// AppleID Loginを使用する場合
#import <GamePotApple/GamePotApple.h>
// LINEログインを使用する場合
#import <GamePotLine/GamePotLine.h>
// Twitter Login使用時 - サポートしない
#import <GamePotTwitter/GamePotTwitter.h>
// NAVERログインを使用する場合
#import <GamePotNaver/GamePotNaver.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
// GamePotSDKチャネルを初期化。使用するチャネル別に addChannelを使用する必要があり、Guest方式はデフォルトで含まれます。
// Google Loginの初期化
GamePotChannelInterface* google = [[GamePotGoogleSignIn alloc] init];
[[GamePotChannelManager getInstance] addChannelWithType:GOOGLE interface:google];
// Facebookログインの初期化
GamePotChannelInterface* facebook = [[GamePotFacebook alloc] init];
[[GamePotChannelManager getInstance] addChannelWithType:FACEBOOK interface:facebook];
// AppleIDログインの初期化
GamePotChannelInterface* apple = [[GamePotApple alloc] init];
[[GamePotChannel getInstance] addChannelWithType:APPLE interface:apple];
// LINEログインの初期化
GamePotChannelInterface* line = [[GamePotLine alloc] init];
[[GamePotChannel getInstance] addChannelWithType:LINE interface:line];
// Twitterログインの初期化 - サポートしない
GamePotChannelInterface* twitter = [[GamePotTwitter alloc] init];
[[GamePotChannel getInstance] addChannelWithType:TWITTER interface:twitter];
// NAVERログインの初期化
GamePotChannelInterface* naver = [[GamePotNaver alloc] init];
[[GamePotChannel getInstance] addChannelWithType:NAVER interface:naver];
// ログイン処理のために必要です。
[[GamePotChannel getInstance] application:application didFinishLaunchingWithOptions:launchOptions];
...
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
// ログイン処理のために必要です。
BOOL nChannelResult = [[GamePotChannel getInstance] application:app openURL:url options:options];
return nChannelResult;
}
ログイン機能
開発会社で実装したログイン UIにより、ログインボタンをクリックしたときに動作する SDKログイン機能を使用するには、以下のコードを使用します。
#import <GamePotChannel/GamePotChannel.h>
// ログインタイプの定義
// GamePotChannelType.GOOGLE
// GamePotChannelType.FACEBOOK
// GamePotChannelType.GUEST
// GamePotChannelType.LINE
// GamePotChannelType.TWITTER - サポートしない
// GamePotChannelType.NAVER
// GamePotChannelType.APPLE
// Googleログインボタンのクリック時に呼び出し
[[GamePotChannel getInstance] Login:GOOGLE viewController:self success:^(GamePotUserInfo* userInfo) {
// ログイン完了
} cancel:^{
// ログイン中にユーザーがキャンセル
} fail:^(NSError *error) {
// ログイン中にエラー発生
// TODO: ゲームポップアップで失敗原因に関するメッセージを表示します。
// TODO: メッセージは [error localizedDescription]を使用してください。
}];
自動ログイン機能
会員の最後のログイン情報を伝達する APIで自動ログイン機能を使用するには、以下のコードを使用します。
#import <GamePotChannel/GamePotChannel.h>
// lastLoginType: 最後のログイン値をインポートします。
GamePotChannelType type = [[GamePotChannel getInstance] lastLoginType];
if(type != NONE)
{
// 最後にログインしたログインタイプでログインする方式です。
// 自動ログイン処理を行う際は、以下のように呼び出します。
[[GamePotChannel getInstance] Login:type viewController:self success:^(GamePotUserInfo* userInfo) {
} cancel:^{
} fail:^(NSError *error) {
// ゲームポップアップで失敗原因に関するメッセージを表示します。
// メッセージは [error localizedDescription]を使用してください。
}];
}
else
{
// 最後にログインした情報がない。ログインボタンがあるログイン画面に移動
}
ログアウト機能
ログアウト機能を使用するには、以下のコードを使用します。
#import <GamePotChannel/GamePotChannel.h>
[[GamePotChannel getInstance] LogoutWithSuccess:^{
// ログアウトが完了すると初期画面に移動します。
} fail:^(NSError *error) {
// ログアウトに失敗。ゲームポップアップで失敗原因に関するメッセージを表示します。
// メッセージは [error localizedDescription]を使用してください。
}];
会員退会機能
会員退会機能を使用するには、以下のコードを使用します。
#import <GamePotChannel/GamePotChannel.h>
[[GamePotChannel getInstance] DeleteMemberWithSuccess:^{
// 会員退会に成功。ログイン画面に移動します。
} fail:^(NSError *error) {
// 会員退会に失敗。ゲームポップアップで失敗原因に関するメッセージを表示します。
// メッセージは [error localizedDescription]を使用してください。
}];
ログイン検証機能
ログイン完了後、ログイン情報を開発会社のサーバから GAMEPOTサーバに伝達してログイン検証を行えます。
詳細は、ログイン検証リクエストをご参照ください。
外部アカウントとの連携
一つのゲームアカウントに複数の外部アカウントを連携したり、解除できます。
アカウント連携機能
Google、Facebook、NAVERなど様々な外部アカウントとの連携機能を使用するには、以下のコードを使用します。
#import <GamePotChannel/GamePotChannel.h>
// タイプの定義
// GamePotChannelType.GOOGLE
// GamePotChannelType.FACEBOOK
// GamePotChannelType.LINE
// GamePotChannelType.TWITTER
// GamePotChannelType.NAVER
// GamePotChannelType.APPLE
[[GamePotChannel getInstance] CreateLinking:GOOGLE viewController:self success:^(GamePotUserInfo *userInfo) {
// 連携完了。ゲームポップアップで連携結果に関するメッセージを表示します(例: アカウントの連携に成功しました)。
} cancel:^{
// ユーザーがキャンセル
} fail:^(NSError *error) {
// 連携失敗。ゲームポップアップで失敗原因に関するメッセージを表示します。
// メッセージは [error localizedDescription]を使用してください。
}];
連携リスト確認機能
アカウントに連携された外部アカウントリストを確認するには、以下のコードを使用します。
#import <GamePotChannel/GamePotChannel.h>
// タイプの定義
// GamePotChannelType.GOOGLE
// GamePotChannelType.FACEBOOK
// GamePotChannelType.LINE
// GamePotChannelType.TWITTER
// GamePotChannelType.NAVER
// GamePotChannelType.APPLE
// タイプによる連携結果を返却します。
BOOL isGoogleLinked = [[GamePotChannel getInstance] isLinked:GOOGLE];
// 連携されているタイプに対して JsonString形式で返却します。
NSString* linkedList = [[GamePotChannel getInstance] getLinkedListJsonString];
連携解除機能
外部アカウントとの連携解除機能を使用するには、以下のコードを使用します。
#import <GamePotChannel/GamePotChannel.h>
[[GamePotChannel getInstance] DeleteLinking:GOOGLE success:^{
// 解除完了。ゲームポップアップで連携結果に関するメッセージを表示します(例: アカウントの連携を解除しました)。
} fail:^(NSError *error) {
// 解除失敗。ゲームポップアップで失敗原因に関するメッセージを表示します。
// メッセージは [error localizedDescription]を使用してください。
}];
決済機能
In-App購入のための決済機能を使用できます。決済の結果値は Delegateの形で実装されます。
AppDelegateの設定
決済機能を使用するために AppDelegateを設定するには、以下のコードを使用します。
#import <GamePot/GamePot.h>
@interface ViewController () <GamePotPurchaseDelegate>
@end
@implementation ViewController
- (void)viewDidLoad
{
...
[[GamePot getInstance] setPurchaseDelegate:self];
...
}
- (void)GamePotPurchaseSuccess:(GamePotPurchaseInfo *)_info
{
// 決済成功
}
- (void)GamePotPurchaseFail:(NSError *)_error
{
// 決済エラー。ゲームポップアップで失敗原因に関するメッセージを表示します。
// メッセージは [error localizedDescription]を使用してください。
}
- (void)GamePotPurchaseCancel
{
// 決済試行中にキャンセル
// 「決済がキャンセルされました。」 というメッセージを、ゲームポップアップで表示します。
}
@end
決済試行機能
決済試行機能を使用するには、以下のコードを使用します。
- 一般決済の実行
#import <GamePot/GamePot.h>
// productid: ストアに登録されている商品 IDを入力
[[GamePot getInstance] purchase:productid];
- 決済試行および領収証番号を別途管理する
#import <GamePot/GamePot.h>
// productId: ストアに登録されている商品 IDを入力
// uniqueId: 別途管理する領収証番号を入力
[[GamePot getInstance] purchase:productid uniqueId:uniqueid];
- 決済試行、領収証番号を別途管理、キャラクター情報を Webフックに伝達
#import <GamePot/GamePot.h>
// productId: ストアに登録されている商品 ID
// uniqueId: 別途管理する領収証番号
// serverId: 決済を行ったキャラクターのサーバ ID
// playerId: 決済を行ったキャラクターのキャラクター ID
// etc : 決済を行ったキャラクターのその他の情報
[[GamePot getInstance] purchase:productid uniqueId:uniqueid serverId:serverid playerId:playerid etc:etc]];
決済アイテムリストの取得機能
ストアに伝達する In-App決済アイテムリストの取得機能を使用するには、以下のコードを使用します。
[case1]
NSArray<SKProduct*>* itemList = [[GamePot getInstance] getDetails];
// デバイスの通貨設定による価格を読み込む場合
[[GamePot getInstance] getLocalizePrice:[product productIdentifier]];
[case2]
[[GamePot getInstance] getPurchaseItemsJsonString];
[case3]
@try{
[[GamePot getInstance] getPurchaseDetailListAsyncToJSON:^(BOOL _success, NSString *_items, NSError *_error)
{
if(_success)
{
if(_items)
{
// In-app information
}
}else
{
if(_error){
// NSLog(@"Error = %@", [_error localizedDescription]);
}
}
}];
}
@catch(NSException* ex){
NSLog(@"Error : %@", ex);
}
決済アイテムの支給機能
決済ストアの領収書の内訳と対照して検証をすべて完了した場合のみ、開発会社のサーバに支給リクエストを転送するように設定できます。
詳細は、アイテム支給のリクエストをご参照ください。
SDK独自提供のログイン UI
GAMEPOT iOS SDKが提供する完成された形のログイン UIを使用できます。
AppDelegateの設定
独自提供のログイン UIを使用するために AppDelegateを設定するには、以下のコードを使用します。
#import <GamePot/GamePot.h>
#import <GamePotChannel/GamePotChannel.h>
NSArray* order = @[@(GOOGLE), @(FACEBOOK), @(APPLE),@(NAVER), @(LINE), @(TWITTER), @(GUEST)];
GamePotChannelLoginOption* options = [[GamePotChannelLoginOption alloc] init:order];
[option setShowLogo:YES];
[[GamePotChannel getInstance] showLoginWithUI:self option:options success:^(GamePotUserInfo *userInfo) {
// ログイン完了。ゲームのロジックに合わせて処理します。
} update:^(GamePotAppStatus *appStatus) {
// 強制アップデートが必要。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
[[GamePot getInstance] showAppStatusPopup:self setAppStatus:appStatus
setCloseHandler:^{
// showAppStatusPopup APIを呼び出した場合、アプリを終了しなければならない状況で呼び出されます。
// 終了プロセスを処理します。
} setNextHandler:^(NSObject* resultPayload) {
// ダッシュボードアップデートの設定で推奨を選択すると、「後でする」ボタンが表示されます。
// そのボタンをユーザーが選択すると呼び出されます。
// resultPayload情報を用いてログイン完了時と同様に処理します。
// GamePotUserInfo* userInfo = (GamePotUserInfo*)resultPayload;
}];
} maintenance:^(GamePotAppStatus *appStatus) {
// メンテナンス中。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
[[GamePot getInstance] showAppStatusPopup:self setAppStatus:appStatus
setCloseHandler:^{
// showAppStatusPopup APIを呼び出した場合、アプリを終了しなければならない状況で呼び出されます。
// 終了プロセスを処理します。
}];
} exit:^{
// Xボタンのクリック時に処理
}];
独自提供のログイン UI画像ロゴの設定
独自提供のログイン UI上部に表示される画像を設定できます。別途設定しない場合は、SDKに含まれている基本画像を使用し、ゲームに合った画像を直接設定できます。推奨画像サイズは310x220です。
独自提供のログイン UI画像を設定するには、設定する画像のファイル名を ic_stat_gamepot_login_logo.pngに変更し、GamePot.bundle内に存在する同じ名前の従来のファイルと取り替えます。
クーポン機能
ユーザーがクーポンを入力すると使用処理する機能を使うには、以下のコードを使用します。
#import <GamePot/GamePot.h>
[[GamePot getInstance] coupon: /*ユーザーが入力したクーポン*/ handler:^(BOOL _success, NSError *_error) {
if(_success)
{
// messageにクーポン使用に関する結果が返却されます。ゲームポップアップにこのメッセージを表示します。
}
else
{
// _errorにクーポン使用の失敗原因に関する情報が返却されます。
// [_error localizedDescription]の内容をゲームポップアップで表示してください。
}
}];
アイテムの支給
クーポン使用に成功すると、開発会社のサーバにアイテム支給をリクエストします。
詳細は、アイテム支給のリクエストをご参照ください。
プッシュ通知機能
一般プッシュ通知、夜間プッシュ通知、プッシュ型広告の通知機能を有効化または無効化することができます。
プッシュ型広告設定は、プッシュ機能を使用する場合に YESにしてください。(プッシュ型広告の値が NOの場合、一般/夜間プッシュの設定に関係なくプッシュが届きません)
プッシュ通知の有効化および無効化
プッシュ通知機能を使用するには、以下のコードを使用します。
#import <GamePot/GamePot.h>
// プッシュ通知 On/Off
[[GamePot getInstance] setPushEnable:YES success:^{
} fail:^(NSError *error) {
}];
// 夜間プッシュ通知 On/Off
[[GamePot getInstance] setNightPushEnable:YES success:^{
} fail:^(NSError *error) {
}];
// プッシュ/夜間プッシュ通知を一度に設定
// ログイン前にプッシュ/夜間プッシュ通知を許可するかどうかを取得するゲームの場合は、ログインの後に以下のコードを必ず呼び出します。
[[GamePot getInstance] setPushStatus:YES night:YES ad:YES success:^{
<#code#>
} fail:^(NSError *error) {
<#code#>
}];
画像プッシュ通知機能
iOSアプリで通知画像を受信して処理できるように通知サービス拡張プログラムを追加する方法は、次の通りです。
- Xcodeで Targetメニューをクリックし、Notification Service Extensionを選択して Nextをクリックします。
- Project Nameを入力し、Finishをクリックします。
- 作成された Notification Service Extensionモジュールの NotificationService.hファイルを以下のように編集します。
// GamePot/GamePotNotificationServiceExtension.hを Import // #import <UserNotifications/UserNotifications.h> #import <GamePot/GamePotNotificationServiceExtension.h> // UNNotificationServiceExtensionの代わりに GamePotNotificationServiceExtensionを継承 // @interface NotificationService : UNNotificationServiceExtension @interface NotificationService : GamePotNotificationServiceExtension @end - 作成された Notification Service Extensionモジュールの NotificationService.mファイルを以下のように編集します。
... - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { // self.contentHandler = contentHandler; // self.bestAttemptContent = [request.content mutableCopy]; // Modify the notification content here... // self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title]; // self.contentHandler(self.bestAttemptContent); [super didReceiveNotificationRequest:request withContentHandler:contentHandler]; } ... - 作成された Notification Service Extensionモジュールで Targets > Build Phases > Link Binary With Libraries メニューを順にクリックし、GamePot.frameworkを追加します。
お知らせの画像表示機能
ダッシュボードのお知らせメニューにアップロードした画像が表示されるように設定できます。推奨画像サイズは、次の通りです。
- サイズ: 720x1200(Portrait)、1280x640(Landscape)
- 容量: 250KB以下
ダッシュボードのお知らせメニューにアップロードした画像が表示されるようにするには、以下のコードを使用します。
[[GamePot getInstance] showNotice:/*viewController*/ setSchemeHandler:^(NSString *scheme) {
NSLog(@"scheme = %@", scheme);
}];
特定分類のお知らせの画像のみ表示
特定分類のお知らせの画像のみ表示されるようにするには、以下のコードを使用します。
[[GamePot getInstance] showEvent:/*viewController*/ setType:/*Type*/ setSchemeHandler:^(NSString *scheme) {
NSLog(@"scheme = %@", scheme);
}];
カスタマーサポート機能
ダッシュボードと連携し、問い合わせ、ポリシーおよび約款 UIの呼び出し、同意の収集などの機能を使用できます。
問い合わせ機能
会員が問い合わせを送信すると、担当者が返答できる問い合わせ機能を使用できます。ダッシュボードの サポート > お問い合わせ メニューと連携されます。
問い合わせ UIは、デバイスの言語に応じて韓国語、英語、日本語、中国語体字および繁体字のうち一つの言語に変更されます。その他のデバイスの言語の場合は、英語に変更されます。
ダッシュボードと連携して問い合わせ機能を使用するには、以下のコードを使用します。
[[GamePot getInstance] showHelpWebView:(UIViewController *)];
外部リンクの問い合わせ
外部リンクでログインしていない顧客も問い合わせを登録できるようにするには、以下のコードを使用します。
// showWebView Type
// WEBVIEW_NORMAL // 戻るボタンなし
// WEBVIEW_NORMALWITHBACK // 戻るボタンあり
[[GamePot getInstance] showWebView:/*現在の ViewController*/ setType:/*Type*/ setURL:/*外部問い合わせアクセス URL*/];
約款およびポリシー UIの呼び出し機能
ダッシュボードのサポートメニューで作成した各種約款やポリシーを UIで呼び出しできます。
約款およびポリシー UIを呼び出すには、以下のコードを使用します。
-
利用約款
#import <GamePot/GamePot.h> [[GamePot getInstance] showTerms:/*ViewController*/]; -
個人情報の取扱方針
#import <GamePot/GamePot.h> [[GamePot getInstance] showPrivacy:/*ViewController*/]; -
払い戻しポリシー
#import <GamePot/GamePot.h> [[GamePot getInstance] showRefund:/*ViewController*/];
約款同意機能(GDPRを含む)
提供されるポップアップ UI機能を使用し、ダッシュボードで作成した各種ポリシーや約款への同意を収集できます。GDPRポリシーへの同意も収集できます。
約款同意の自動呼び出し
GAMEPOT iOS SDKバージョン v3.3.0以降を使用する場合は、会員がログインする際に自動的に約款同意のポップアップが表示されます。
ログインの際に約款同意を自動的に呼び出すかどうかを変更するには、以下のコードを使用します。
// Default Valueは YES
// 自動ポップアップ時、MATERIAL_BLUEテーマを適用
// falseに設定すると、ログインの際に約款同意のポップアップが表示されません。
[[GamePot getInstance] setAutoAgree:YES];
// MATERIAL_ORANGEテーマをカスタム適用時
GamePotAgreeOption* options = [[GamePotAgreeOption alloc] init:MATERIAL_ORANGE];
[[GamePot getInstance] setAgreeBuilder:options];
...
[[GamePotChannel getInstance] Login:GamePotChannelType viewController:self success:^(GamePotUserInfo* userInfo) {
} cancel:^{
} fail:^(NSError *error) {
} update:^(GamePotAppStatus *appStatus) {
} maintenance:^(GamePotAppStatus *appStatus) {
}];
...
約款同意の手動呼び出し
約款同意の呼び出しを手動で行うには、以下のコードを使用します。
-
テーマの選択
// 基本テーマ [[GamePotAgreeOption alloc] init:BLUE]; [[GamePotAgreeOption alloc] init:GREEN]; // 改善テーマ // [[GamePotAgreeOption alloc] init:MATERIAL_RED]; // [[GamePotAgreeOption alloc] init:MATERIAL_BLUE]; // [[GamePotAgreeOption alloc] init:MATERIAL_CYAN]; // [[GamePotAgreeOption alloc] init:MATERIAL_ORANGE]; // [[GamePotAgreeOption alloc] init:MATERIAL_PURPLE]; // [[GamePotAgreeOption alloc] init:MATERIAL_DARKBLUE]; // [[GamePotAgreeOption alloc] init:MATERIAL_YELLOW]; // [[GamePotAgreeOption alloc] init:MATERIAL_GRAPE]; // [[GamePotAgreeOption alloc] init:MATERIAL_GRAY]; // [[GamePotAgreeOption alloc] init:MATERIAL_GREEN]; // [[GamePotAgreeOption alloc] init:MATERIAL_PEACH]; -
呼び出し
GamePotAgreeOption* option = [[GamePotAgreeOption alloc] init:MATERIAL_BLUE]; [[GamePot getInstance] showAgreeView:self option:option handler:^(GamePotAgreeInfo *result) { // [result agree]: 約款の必須事項にすべて同意した場合、true // [result agreePush]: 一般プッシュ型広告の通知を許可した場合は true、そうでない場合は false // [result agreeNight]: 夜間プッシュ型広告の通知を許可した場合は true、そうでない場合は false // agreePush / agreeNight値はログインを完了してから setPushEnable APIを通じて一度に設定してください。 }];
約款同意 UIテーマの直接構成
SDKで提供するテーマを使う代わりに、直接構成した約款同意 UIのテーマを使用できます。
約款同意 UIのテーマを直接構成して使用するには、約款同意を呼び出す前に、以下のコードを使ってテーマを構成します。
- 約款自動呼び出しの際、ポップアップのカスタマイズ設定
GamePotAgreeOption* options = [[GamePotAgreeOption alloc] init:MATERIAL_BLUE];
[[GamePot getInstance] setAgreeBuilder:options];
- 詳細設定
GamePotAgreeOption* option = [[GamePotAgreeOption alloc] init:MATERIAL_BLUE];
[option setHeaderBackGradient:@[@0xFF00050B,@0xFF0F1B21]];
[option setHeaderTitleColor:0xFF042941];
[option setContentBackGradient:@[@0xFF112432,@0xFF112432]];
[option setContentIconColor:0xFF042941];
[option setContentCheckColor:0xFF91adb5];
[option setContentTitleColor:0xFF98b3c6];
[option setContentShowColor:0xFF98b3c6];
[option setFooterBackGradient:@[@0xFF112432,@0xFF112432]];
[option setFooterButtonGradient:@[@0xFF1E3A57,@0xFF57B2E2]];
[option setFooterButtonOutlineColor:0xFF0b171a];
[option setFooterTitleColor:0xFFFFFFD5];
// 文言を変更
[option setAllMessage:@"すべて同意"];
[option setTermMessage:@"必須) 利用約款"];
[option setPrivacyMessage:@"必須) 個人情報の取扱方針"];
[option setPushMessage:@"任意) 一般プッシュ通知を許可"];
[option setNightPushMessage:@"任意) 夜間プッシュ通知を許可"];
[option setFooterTitle:@"ゲームを始める"];
// プッシュ型広告の通知許可(一般/夜間)にチェックを入れた場合、ゲームを始める際の Toastメッセージ(同意時間)表示の有無
[option setShowToastPushStatus:YES];
// プッシュ型広告の通知許可(一般/夜間)メッセージの編集
[option setPushToastMsg:@"Push on"];
[option setNightPushToastMsg:@"Night Push on"];
// 未使用時は@""に設定
[option setHeaderTitle:@"約款同意"];
// 一般プッシュ型広告通知許可ボタンの表示の有無
[option setShowPush:YES];
// 夜間プッシュ型広告通知許可ボタンの表示の有無
[option setShowNightPush:YES];
// 一般プッシュ型広告通知許可リンクの設定(使用しない場合、設定しない)
[option setPushDetailURL:@"https://..."];
// 夜間プッシュ型広告通知許可リンクの設定(使用しない場合、設定しない)
[option setNightPushDetailURL:@"https://..."];
[[GamePot getInstance] showAgreeView:self option:option handler:^(GamePotAgreeInfo *result) {
.......
}];
- それぞれの変数は、以下の画像に表示された領域に適用されます。
- AgeView

- EmailView

- AgreeView

- AgeView
GDPR約款のチェックリスト機能
ダッシュボードで有効化した GDPRの約款項目をリストの形で取得するには、以下のコードを使用します。
(NSArray*) [[GamePot getInstance] getGDPRCheckedList];
//返されるパラメータは、ダッシュボードの次の設定に該当します。
gdpr_privacy: 個人情報の取扱方針
gdpr_term: 利用約款
gdpr_gdpr: GDPRの利用約款
gdpr_push_normal: イベントプッシュ受信に同意
gdpr_push_night: 夜間イベントプッシュ受信に同意(韓国のみ対象)
gdpr_adapp_custom: パーソナライズド広告を見るに同意 (GDPR適用国)
gdpr_adapp_nocustom: 非パーソナライズド広告を見るに同意 (GDPR適用国)
メンテナンスおよび強制アップデート機能
ゲームのメンテナンスおよび強制アップデート機能を使用できます。ダッシュボードの メンテナンス&アップデート メニューで各機能を有効にすると動作します。
メンテナンスおよび強制アップデート機能を使用するには、以下のコードを使用します。
[[GamePotChannel getInstance] Login:GAMECENTER viewController:self
success:^(GamePotUserInfo* userInfo) {
// ログイン完了。ゲームのロジックに合わせて処理します。
} cancel:^{
// ユーザーがログインをキャンセル
} fail:^(NSError *error) {
// ログインに失敗。[error localizedDescription]を用いてエラーメッセージを表示してください。
} update:^(GamePotAppStatus *appStatus) {
// 強制アップデートが必要。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
[[GamePot getInstance] showAppStatusPopup:self setAppStatus:appStatus
setCloseHandler:^{
// showAppStatusPopup APIを呼び出した場合、アプリを終了しなければならない状況で呼び出されます。
// 終了プロセスを処理します。
} setNextHandler:^(NSObject* resultPayload) {
// ダッシュボードアップデートの設定で推奨を選択すると、「後でする」ボタンが表示されます。
// そのボタンをユーザーが選択すると呼び出されます。
// resultPayload情報を用いてログイン完了時と同様に処理します。
// GamePotUserInfo* userInfo = (GamePotUserInfo*)resultPayload;
}];
} maintenance:^(GamePotAppStatus *appStatus) {
// メンテナンス中。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
[[GamePot getInstance] showAppStatusPopup:self setAppStatus:appStatus
setCloseHandler:^{
// TODO: showAppStatusPopup APIを呼び出したアプリを終了しなければならない状況で呼び出されます。
// TODO: 終了プロセスを処理します。
}];
}];
Remote Config機能
ダッシュボードの ゲーム > Remote Config メニューに登録したサーバのパラメータ値を取得できます。パラメータ値を取得して SDKで使用すると、ゲームをアップデートせずに各要素を変更または制御できます。
取得したパラメータはログイン時にロードされ、その後から呼び出すことができます。
Remote Config機能を使用するには、以下のコードを使用します。
#import <GamePot/GamePot.h>
//key: パラメータ string
NSString *str_value = [[GamePot getInstance] getConfig:(NSString*)key];
//ダッシュボードに追加したすべてのパラメータを JSON形式で取得します。
NSArray *json_value = [[GamePot getInstance] getConfigs];
ゲームログの転送機能
ゲームログを呼び出してダッシュボードの ゲーム > プレイヤー メニューで確認できます。
ゲームログの転送機能を使用するには、表を参照して以下のコードに予約語を入力し、コードを呼び出します。
- 予約語およびコード
予約語 必須の有無 タイプ 説明 最大長さ GamePotSendLogCharacter.NAME必須 Stringキャラクター名 128 GamePotSendLogCharacter.LEVEL任意 Stringレベル 128 GamePotSendLogCharacter.SERVER_ID任意 Stringサーバ ID 128 GamePotSendLogCharacter.PLAYER_ID任意 Stringキャラクター ID 128 GamePotSendLogCharacter.USERDATA任意 StringETC 128 #import <GamePot/GamePotSendLog.h> #import <GamePot/GamePotSendLogCharacter.h> GamePotSendLogCharacter* info = [[GamePotSendLogCharacter alloc] init]; [info put:@"name" forKey:GAMEPOT_NAME]; [info put:@"playerid" forKey:GAMEPOT_PLAYER_ID]; [info put:@"serverid" forKey:GAMEPOT_SERVER_ID]; [info put:@"level" forKey:GAMEPOT_LEVEL]; [info put:@"userdata" forKey:GAMEPOT_USERDATA]; BOOL result = [GamePotSendLog characterInfo:info]; // 結果値 true: 検証に成功。ログが GAMEPOTサーバに転送されます。 // 結果値 false: 検証に失敗。logcatを確認します。
AppStatusの確認
現在クライアントの AppStatusを確認するには、以下のコードを使用します。(ログイン前のメンテナンス / アップデートの状態確認)
#import <GamePot/GamePot.h>
[[GamePot getInstance] checkAppStatus:^{
//Login Success
} setFailHandler:^(NSError *error) {
//Failed
} setUpdateHandler:^(GamePotAppStatus *status) {
//NeedUpdate
// 強制アップデートが必要。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
[[GamePot getInstance] showAppStatusPopup:self setAppStatus:status
setCloseHandler:^{
// showAppStatusPopup APIを呼び出した場合、アプリを終了しなければならない状況で呼び出されます。
// 終了プロセスを処理します。
} setNextHandler:^(NSObject* resultPayload) {
// ダッシュボードアップデートの設定で推奨を選択すると、「後でする」ボタンが表示されます。
// そのボタンをユーザーが選択すると呼び出されます。
// resultPayload情報を用いてログイン完了時と同様に処理します。
// GamePotUserInfo* userInfo = (GamePotUserInfo*)resultPayload;
}];
} setMaintenanceHandler:^(GamePotAppStatus *status) {
//OnMaintenance
// メンテナンス中。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。
// カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。
[[GamePot getInstance] showAppStatusPopup:self setAppStatus:appStatus
setCloseHandler:^{
// TODO: showAppStatusPopup APIを呼び出したアプリを終了しなければならない状況で呼び出されます。
// TODO: 終了プロセスを処理します。
}];
}];
setUserDataの設定
ログイン後、当該会員に追加情報を入れる場合に使用します。
キーの最大数は50個に制限
値の最大長さは1024バイトに制限
これらの情報は会員の詳細項目でのみ確認できます。
#import <GamePot/GamePot.h>
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:
@"1.0.23",@"appversion",
@"s1",@"server"];
[[GamePot getInstance] setUserData:dict handler:^(BOOL _success, NSError *_error) {
if(_success)
{
//setUserData成功
}
else
{
//setUserData失敗
}
}];
3rd Party SDK連携
GAMEPOT iOS SDKは、3rd Party SDKとの連携に対応しています。
3rd Party SDKログイン連携
3rd Party SDKと連携してログイン機能を使用するには、表を参照して以下のコードにパラメータ値を入力し、コードを使用します。
- パラメータおよびコード
パラメータ名 必須の有無 タイプ 説明 viewController必須 UIViewController現在の ViewController userid必須 NSStringユーザーの固有 ID success必須 String成功した場合のコールバック fail必須 String失敗した場合のコールバック update任意 Stringアップデート機能が動作した場合のコールバック maintenance任意 Stringメンテナンス機能が動作した場合のコールバック NSString userid = @"memberid of 3rd party sdk"; [[GamePotChannel getInstance] loginByThirdPartySDK:self uId:userid success:^(GamePotUserInfo* userInfo) { // ログイン完了。ゲームのロジックに合わせて処理します。 } cancel:^{ // ユーザーがログインをキャンセル } fail:^(NSError *error) { // ログインに失敗。[error localizedDescription]を用いてエラーメッセージを表示してください。 } update:^(GamePotAppStatus *appStatus) { // 強制アップデートが必要。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。 // カスタマイズしたい場合は、以下の APIを呼び出していない状態でカスタマイズします。 [[GamePot getInstance] showAppStatusPopup:self setAppStatus:appStatus setCloseHandler:^{ // showAppStatusPopup APIを呼び出した場合、アプリを終了しなければならない状況で呼び出されます。 // 終了プロセスを処理します。 } setNextHandler:^(NSObject* resultPayload) { // ダッシュボードアップデートの設定で推奨を選択すると、「後でする」ボタンが表示されます。 // そのボタンをユーザーが選択すると呼び出されます。 // resultPayload情報を用いてログイン完了時と同様に処理します。 // GamePotUserInfo* userInfo = (GamePotUserInfo*)resultPayload; }]; } maintenance:^(GamePotAppStatus *appStatus) { // メンテナンス中。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。 // メンテナンス中。以下の APIを呼び出すと、SDK独自のポップアップを表示できます。 [[GamePot getInstance] showAppStatusPopup:self setAppStatus:appStatus setCloseHandler:^{ // showAppStatusPopup APIを呼び出した場合、アプリを終了しなければならない状況で呼び出されます。 // 終了プロセスを処理します。 }]; }];
3rd Party SDKとの決済連携
3rd Party SDKと連携して決済機能を使用するには、表を参照して以下のコードにパラメータ値を入力し、コードを使用します。
- パラメータおよびコード
パラメータ名 必須の有無 タイプ 説明 productid必須 NSStringダッシュボードに登録されているアイテム ID transactionid必須 NSString決済領収証番号(GPA-xxx-xxxx-xxxx) currency任意 NSString通貨(KRW、USD) price任意 NSDecimalNumber決済アイテム金額 paymentid任意 NSString決済ストア( apple)success任意 GamePotCommonSuccess成功した場合のコールバック fail任意 GamePotCommonFail失敗した場合のコールバック NSString* productId = @"purchase_001"; NSString* transactionId = @"xxxxxxxxxxx"; NSString* currency = @"USD"; NSDecimalNumber* price = [[NSDecimalNumber alloc] initWithString:@"1.09"]; NSString* paymentId = "apple"; NSString* uniqueId = "developer unique id"; [[GamePot getInstance] sendPurchaseByThirdPartySDK:productId transactionId:transactionId currency:currency price:price paymentId:paymentId uniqueId:uniqueId success:^{ // success } fail:^(NSError *error) { // fail }];