--- title: "iOS SDK" slug: "game-gamepotios" tags: ["GAMEPOT"] updated: 2026-09-17T09:23:32Z published: 2026-09-17T09:23:32Z canonical: "guide.ncloud-docs.com/game-gamepotios" stale: true --- > ## Documentation Index > Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # iOS SDK 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でプロジェクトを構成する方法は、次の通りです。 1. [GAMEPOT SDKのダウンロード > iOS](/docs/ja/game-gamepot-gamepotsdk-ios)からダウンロードリンクをクリックします。 2. Xcodeを実行し、ゲームプロジェクトを開きます。 3. ダウンロードした 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 **Facebook** 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 **Facebook** 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を追加して設定する方法は、次の通りです。 1. ダウンロードした SDKファイルに含まれた GamePotConfig-Info.plistファイルをプロジェクトに追加します。 - そのファイルが存在しない場合は、同じ名前のファイルを作成し、キーに該当する値を入力します。 2. Google Firebaseコンソールで取得した GoogleService-Info.plistファイルをプロジェクトに追加します。 3. Xcodeで追加した GamePotConfig-Info.plistで以下の設定を変更します。 - `gamepot_project_id`: GAMEPOTプロジェクト ID - `gamepot_elsa_projectid`: (任意) GAMEPOTログプロジェクト ID 4. **Targets > Info > Custom iOS Target Properties** メニューを順にクリックし、以下のユーザー権限取得オプションを追加します。 - このユーザー権限は GAMEPOTサポートセンター内のファイルアップロード機能で使用されます。 `NSCameraUsageDescription`, `NSPhotoLibraryUsageDescription`, `NSMicrophoneUsageDescription` - iOS 14バージョンから IDFA値を取得する際に、ユーザーから権限を取得しないと IDFA値を取得できないようになりました。従って、IDFA値を取得する際にユーザーから権限を取得するポップアップを使用する場合は、Targets >> Info >> Custom iOS Target Propertiesに以下のユーザー権限取得オプションを追加してください。(収集する目的と使用先についての説明が必要です) `NSUserTrackingUsageDescription` 5. GAMEPOTダッシュボード作成リージョンがシンガポールの場合にのみ、以下の設定を追加します。 - `gamepot_region`: sg 6. 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ログイン環境を設定する方法は、次の通りです。 1. Facebook for Developersコンソールでアプリタイプを **None**、**Consumer**、**Gaming**のいずれかにしてアプリを作成します。 2. Facebook App ID値を Xcodeの **Info > URL Types** メニューに"fb{Facebook App ID}"の形で追加します(例: fb561593141718906)。 3. **Info > iOS Target Property** メニューを順にクリックし、**LSApplicationQueriesSchemes**に以下の設定を追加します。 - `fbapi`, `fb-messenger-share-api`, `fbauth2`, `fbshareextension`, `fb-messenger-api` 4. GamePotConfig-Info.plistで以下の設定を変更します。 - `gamepot_facebook_app_id`: Facebook App ID - `gamepot_facebook_display_name`: Facebook display name - `gamepot_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`値 - **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`と同じ値を追加 - **Apple ID** - Targetを選択し、**Signing & Capabilities** メニューで **Sign In with Apple** Capabilityを追加 ### 初期化 初期化を実行するには、AppDelegateファイルで以下のコードを使用します。 ``` #import #if __has_include() #import #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() 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 // Google Loginを使用する場合 #import // Facebookログインを使用する場合 #import // AppleID Loginを使用する場合 #import // LINEログインを使用する場合 #import // Twitter Login使用時 - サポートしない #import // NAVERログインを使用する場合 #import - (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 *)options { // ログイン処理のために必要です。 BOOL nChannelResult = [[GamePotChannel getInstance] application:app openURL:url options:options]; return nChannelResult; } ``` ### ログイン機能 開発会社で実装したログイン UIにより、ログインボタンをクリックしたときに動作する SDKログイン機能を使用するには、以下のコードを使用します。 ``` #import // ログインタイプの定義 // 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 // 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 getInstance] LogoutWithSuccess:^{ // ログアウトが完了すると初期画面に移動します。 } fail:^(NSError *error) { // ログアウトに失敗。ゲームポップアップで失敗原因に関するメッセージを表示します。 // メッセージは [error localizedDescription]を使用してください。 }]; ``` ### 会員退会機能 会員退会機能を使用するには、以下のコードを使用します。 ``` #import [[GamePotChannel getInstance] DeleteMemberWithSuccess:^{ // 会員退会に成功。ログイン画面に移動します。 } fail:^(NSError *error) { // 会員退会に失敗。ゲームポップアップで失敗原因に関するメッセージを表示します。 // メッセージは [error localizedDescription]を使用してください。 }]; ``` ### ログイン検証機能 ログイン完了後、ログイン情報を開発会社のサーバから GAMEPOTサーバに伝達してログイン検証を行えます。 詳細は、[ログイン検証リクエスト](/docs/ja/game-gamepotserver#%EB%A1%9C%EA%B7%B8%EC%9D%B8%EA%B2%80%EC%A6%9D%EC%9A%94%EC%B2%AD)をご参照ください。 ## 外部アカウントとの連携 一つのゲームアカウントに複数の外部アカウントを連携したり、解除できます。 ### アカウント連携機能 Google、Facebook、NAVERなど様々な外部アカウントとの連携機能を使用するには、以下のコードを使用します。 ``` #import // タイプの定義 // 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 // タイプの定義 // 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 getInstance] DeleteLinking:GOOGLE success:^{ // 解除完了。ゲームポップアップで連携結果に関するメッセージを表示します(例: アカウントの連携を解除しました)。 } fail:^(NSError *error) { // 解除失敗。ゲームポップアップで失敗原因に関するメッセージを表示します。 // メッセージは [error localizedDescription]を使用してください。 }]; ``` ## 決済機能 In-App購入のための決済機能を使用できます。決済の結果値は Delegateの形で実装されます。 ### AppDelegateの設定 決済機能を使用するために AppDelegateを設定するには、以下のコードを使用します。 ``` #import @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { ... [[GamePot getInstance] setPurchaseDelegate:self]; ... } - (void)GamePotPurchaseSuccess:(GamePotPurchaseInfo *)_info { // 決済成功 } - (void)GamePotPurchaseFail:(NSError *)_error { // 決済エラー。ゲームポップアップで失敗原因に関するメッセージを表示します。 // メッセージは [error localizedDescription]を使用してください。 } - (void)GamePotPurchaseCancel { // 決済試行中にキャンセル // 「決済がキャンセルされました。」 というメッセージを、ゲームポップアップで表示します。 } @end ``` ### 決済試行機能 決済試行機能を使用するには、以下のコードを使用します。 - 一般決済の実行 ``` #import // productid: ストアに登録されている商品 IDを入力 [[GamePot getInstance] purchase:productid]; ``` - 決済試行および領収証番号を別途管理する ``` #import // productId: ストアに登録されている商品 IDを入力 // uniqueId: 別途管理する領収証番号を入力 [[GamePot getInstance] purchase:productid uniqueId:uniqueid]; ``` - 決済試行、領収証番号を別途管理、キャラクター情報を Webフックに伝達 ``` #import // productId: ストアに登録されている商品 ID // uniqueId: 別途管理する領収証番号 // serverId: 決済を行ったキャラクターのサーバ ID // playerId: 決済を行ったキャラクターのキャラクター ID // etc : 決済を行ったキャラクターのその他の情報 [[GamePot getInstance] purchase:productid uniqueId:uniqueid serverId:serverid playerId:playerid etc:etc]]; ``` ### 決済アイテムリストの取得機能 ストアに伝達する In-App決済アイテムリストの取得機能を使用するには、以下のコードを使用します。 ``` [case1] NSArray* 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); } ``` ### 決済アイテムの支給機能 決済ストアの領収書の内訳と対照して検証をすべて完了した場合のみ、開発会社のサーバに支給リクエストを転送するように設定できます。 詳細は、[アイテム支給のリクエスト](/docs/ja/game-gamepotserver#%EC%95%84%EC%9D%B4%ED%85%9C%EC%A7%80%EA%B8%89%EC%9A%94%EC%B2%AD)をご参照ください。 ## SDK独自提供のログイン UI GAMEPOT iOS SDKが提供する完成された形のログイン UIを使用できます。 ### AppDelegateの設定 独自提供のログイン UIを使用するために AppDelegateを設定するには、以下のコードを使用します。 ``` #import #import 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 getInstance] coupon: /*ユーザーが入力したクーポン*/ handler:^(BOOL _success, NSError *_error) { if(_success) { // messageにクーポン使用に関する結果が返却されます。ゲームポップアップにこのメッセージを表示します。 } else { // _errorにクーポン使用の失敗原因に関する情報が返却されます。 // [_error localizedDescription]の内容をゲームポップアップで表示してください。 } }]; ``` ### アイテムの支給 クーポン使用に成功すると、開発会社のサーバにアイテム支給をリクエストします。 詳細は、[アイテム支給のリクエスト](/docs/ja/game-gamepotserver#%EC%95%84%EC%9D%B4%ED%85%9C%EC%A7%80%EA%B8%89%EC%9A%94%EC%B2%AD)をご参照ください。 ## プッシュ通知機能 一般プッシュ通知、夜間プッシュ通知、プッシュ型広告の通知機能を有効化または無効化することができます。 プッシュ型広告設定は、プッシュ機能を使用する場合に YESにしてください。(プッシュ型広告の値が NOの場合、一般/夜間プッシュの設定に関係なくプッシュが届きません) ### プッシュ通知の有効化および無効化 プッシュ通知機能を使用するには、以下のコードを使用します。 ``` #import // プッシュ通知 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アプリで通知画像を受信して処理できるように通知サービス拡張プログラムを追加する方法は、次の通りです。 1. Xcodeで **Target**メニューをクリックし、**Notification Service Extension**を選択して **Next**をクリックします。 2. **Project Name**を入力し、**Finish**をクリックします。 3. 作成された Notification Service Extensionモジュールの NotificationService.hファイルを以下のように編集します。 ``` // GamePot/GamePotNotificationServiceExtension.hを Import // #import #import // UNNotificationServiceExtensionの代わりに GamePotNotificationServiceExtensionを継承 // @interface NotificationService : UNNotificationServiceExtension @interface NotificationService : GamePotNotificationServiceExtension @end ``` 4. 作成された Notification Service Extensionモジュールの NotificationService.mファイルを以下のように編集します。 ``` ... - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { // self.contentHandler = contentHandler; // self.bestAttemptContent = [request.content mutableCopy]; // Modify the notification content here... // self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title]; // self.contentHandler(self.bestAttemptContent); [super didReceiveNotificationRequest:request withContentHandler:contentHandler]; } ... ``` 5. 作成された Notification Service Extensionモジュールで **Targets > Build Phases > Link Binary With Libraries** メニューを順にクリックし、GamePot.frameworkを追加します。 ## お知らせの画像表示機能 ダッシュボードの**お知らせ**メニューにアップロードした画像が表示されるように設定できます。推奨画像サイズは、次の通りです。 - サイズ: 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 getInstance] showTerms:/*ViewController*/]; ``` - **個人情報の取扱方針** ``` #import [[GamePot getInstance] showPrivacy:/*ViewController*/]; ``` - **払い戻しポリシー** ``` #import [[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** ![gamepot_android_09_ko(1)](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/gamepot_android_09_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A32%3A27Z&se=2026-10-26T15%3A32%3A27Z&sr=c&sp=r&sig=KJDL0eh%2BsftDiahyv6xuhM2%2FYETc3OuZ0YlrO0rUJsg%3D) - **EmailView** ![gamepot_android_09_1_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/gamepot_android_09_1_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A32%3A27Z&se=2026-10-26T15%3A32%3A27Z&sr=c&sp=r&sig=KJDL0eh%2BsftDiahyv6xuhM2%2FYETc3OuZ0YlrO0rUJsg%3D) - **AgreeView** ![gamepot_android_09_2_ko](https://cdn.document360.io/6998976f-9d95-4df8-b847-d375892b92c2/Images/Documentation/gamepot_android_09_2_ja.png?sv=2026-02-06&spr=https&st=2026-10-26T14%3A32%3A27Z&se=2026-10-26T15%3A32%3A27Z&sr=c&sp=r&sig=KJDL0eh%2BsftDiahyv6xuhM2%2FYETc3OuZ0YlrO0rUJsg%3D) #### 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 //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` | 任意 | `String` | ETC | 128 | ``` #import #import 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 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 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) { // ログイン完了。ゲームのロジックに合わせて処理します。 } 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 }]; ```