# iOS

## **Quick Start**

最新バージョンダウンロード

{% embed url="<https://github.com/naver/navergame-sdk-ios/releases/tag/1.3.8>" %}

### **1. サンプルプロジェクトの構成**

| フォルダとファイル名                      | 説明                               |
| ------------------------------- | -------------------------------- |
| Sample/NNG SDK Sample           | Xcode用サンプルプロジェクトがあるフォルダ          |
| sample/NNG SDK Sample/Libraries | Ios用NAVERゲームSDKのライブラリフォルダがあるフォルダ |
| README.md                       | READMEファイル                       |
| CHANGELOG.md                    | 各バージョンの主な変更点を説明するファイル            |

### **2. 環境設定**

{% hint style="info" %}
NAVERゲームのiOS SDKは、iOS 12.0以降のバージョンに対応しています。
{% endhint %}

NAVERゲームSDKを使用する場合は、XCodeで環境設定を以下のとおり設定してください。

* **TARGETS**項目のうち実行されるアプリを選択してください。(サンプルプロジェクト基準でNNG SDK Sampleターゲット)
* **Build Setting**タブを選択して**Linking**項目で**Other Linker Flags**を探してください。
  * **Basic**または**Customized**モードは**Other Linker Flag**が見えない場合もあります。この場合は、**All**モードを選択してください。
  * 画面右上にある検索ウィンドウに**Other Linker Flag**を入力すると容易に見つけることができます。
* **Other Linker Flags**&#x306B;**-ObjC**オプション&#x3068;**-lc++**&#x30AA;プションを追加してください。

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2FTgN3sltLGt93h07H6U7i%2F13.png?alt=media\&token=50fda0d8-c328-4962-b32b-7608113411f7)

* **Info.plist**に以下のユーザー権限獲得オプションを追加してください。
  * Privacy - Camera Usage Description
  * Privacy - Photo Library Usage Description

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2FVOQgA6UAOwhzAsyRXlVR%2F14.png?alt=media\&token=98c7173d-b399-4a42-9fad-65ed090932fb)

&#x20;

* **TARGETS**項目のうち実行されるアプリを選択して**Info**タブの**URL Types**項目に**Identifier**値と**URL Schemes**値を入力してください。
* **Identifier**値は当該**TARGET**の**General**タブで確認できます。
* **URL Schemes**値には[NAVER IDでログイン開発者センター](https://developers.naver.com/apps/#/register?api=nvlogin)にアプリケーションを登録時に入力した[URL Scheme](https://developers.naver.com/apps/#/myapps)値を入力してください。

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2FqoUEVnVRVgNqtd7hYqwU%2F15.png?alt=media\&token=f7a3c0b3-ae25-4570-8de6-2e9dd7c14b36)

![](https://2139408215-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F62NAlL66NlO6fj2tpGNj%2Fuploads%2FYBb3hu4vlcGjvl9oVHYU%2F16.png?alt=media\&token=68fb85c5-22eb-4446-91d4-edfcc2d0d3be)

### **3. 初期化**

* [NAVER IDでログイン開発者センター](https://developers.naver.com/apps/#/register?api=nvlogin)でアプリケーションを登録時に受け取ったクライアントIDとクライアントシークレット、開設したラウンジのIDをNNGSDKManagerに登録してください。
* Naver Game SDKのビューが入る親ビューコントローラーを指定してください。

```
    [NNGSDKManager.shared setClientId:@"UKvNABLDsyEJusJGsXL2"
                         clientSecret:@"rK4suc_Qd0"
                             loungeId:@"naver_game_4developer"];
                             
    [NNGSDKManager.shared setParentViewController:self];
```

> **NNGSDKManagerクラス**
>
> NNGSDKManagerクラスはNAVERゲームSDKを制御するクラスです。NNGSDKManagerクラスで制御できる機能についての詳細は、以下の内容をご参考にしてください。

## **NAVERゲームSDKの開始**

#### **1. countryCodeプロパティ**

countryCodeプロパティは、2文字のアルファベットで構成された国コード([ISO 3166-1 alpha-2](https://ko.wikipedia.org/wiki/ISO_3166-1_alpha-2))です。これを活用すると、コード内で国別に分岐処理することができます。主な国コードは以下のとおりです。その他の国コードは[リンク](https://ko.wikipedia.org/wiki/ISO_3166-1_alpha-2)をご参考にしてください。

&#x20;

| 国コード | 国  |
| ---- | -- |
| CN   | 中国 |
| JP   | 日本 |
| KR   | 韓国 |
| TH   | タイ |
| US   | 米国 |

#### **2.resentBannerViewController: メソッド**

presentBannerViewController: メソッドはバナー画面に表示されるメソッドです。以下はpresentBannerViewController: メソッドを実装した例です。

```
[NNGSDKManager.shared presentBannerViewController];
```

#### **3. presentSorryViewController: メソッド**

presentSorryViewController: メソッドは緊急お知らせ画面を表示させるメソッドです。ゲームのAPI通信に失敗した場合は、このメソッドを使用してSDKのエントリーポイントとなる他のUIを非表示にしたり非アクティブ化して、ユーザーがSDKを使用できないよう実装するのをお勧めします。以下はpresentSorryViewController: メソッドを実装した例です。

```
[NNGSDKManager.shared presentSorryViewController];
```

#### **4. presentBoardViewControllerWith: メソッド**

presentBoardViewControllerWith: メソッドは掲示板を表示させるメソッドです。管理ページで掲示板を指定すると、作成された掲示板IDをパラメータとして取得します。以下はpresentBoardViewControllerWith: メソッドを実装した例です。

```
[NNGSDKManager.shared presentBoardViewControllerWith:@1];
```

#### **5. presentFeedViewControllerWith:scheduled: メソッド**

presentFeedViewControllerWith:scheduled: メソッドは投稿の詳細を表示させるメソッドです。投稿IDをパラメータとして取得します。以下はpresentFeedViewControllerWith:scheduled: メソッドを使用してIDが12345である投稿の詳細画面を開くコードです。

```
[NNGSDKManager.shared presentFeedViewControllerWith:@12345 scheduled:NO];
```

scheduledパラメータは予約投稿の有無を意味します。予約投稿をアップロードすると、投稿IDとは異なる予約投稿のIDが発行されます。予約投稿のIDが123である投稿の詳細画面を開くコードは以下の通りです。

```
[NNGSDKManager.shared presentFeedViewControllerWith:@123 scheduled:YES];
```

{% hint style="info" %}
予約投稿のIDを使用して投稿の詳細を開くコードは投稿が登録され、投稿IDが発行されても正常に作動するため、後でコードを修正する必要がありません。
{% endhint %}

{% hint style="info" %}
予約投稿を登録したり予約した時間ではないときにまだ表示されていない投稿とリンクするバナーをクリックしても、何のアクションも発生しません。
{% endhint %}

#### **6. dismissメソッド**

dismissメソッドはSDK画面を閉じるメソッドです。以下はdismissメソッドを実装した例です。

```
[NNGSDKManager.shared dismiss];
```

## **コールバックデリゲート**

コールバックデリゲートを設定すると、プラグで発生するイベントを処理することができます。

### **コールバックデリゲートの登録**

コールバックデリゲートを処理する対象をNNGSDKManagerクラスに登録します。

```
@interface ViewController () <NNGSDKManagerDelegate>
...
NNGSDKManager.shared.delegate = self;
...
```

### **コールバックデリゲートの実装**

#### **1. nngSDKDidLoadメソッド**

このデリゲートはSDKが実行されるたびに呼び出されます。以下はnngSDKDidLoadメソッドを実装した例です。

```
- (void)nngSDKDidLoad {
    NSLog(@"SDK is loaded.");
}
```

#### **2. nngSDKDidUnloadメソッド**

このデリゲートはSDKが終了されるたびに呼び出されます。以下はnngSDKDidUnloadメソッドを実装した例です。

```
- (void)nngSDKDidUnload {
    NSLog(@"SDK is unloaded.");
}
```

#### **3. nngSDKDidReceiveInGameMenuCode: メソッド**

このデリゲートはSDKでインゲームメニューコードを受け取るよう指定したイベントが発生するたびに呼び出されます。管理ページでバナーをクリックすると、インゲームメニューコードを受け取るよう指定することができ、同ページでメニューコードの文字列を入力することができます。

管理ページで入力した文字列がそのまま伝達されるため、これを確認してイベント発生時に希望するアクションを処理することができます。以下はnngSDKDidReceiveInGameMenuCode: メソッドを実装した例です。

```
- (void)nngSDKDidReceiveInGameMenuCode:(NSString *)inGameMenuCode{
    [NNGSDKManager.shared dismiss];

    if ([inGameMenuCode isEqualToString:@"myMenuCode1"]) {
        // Do somthing for the in-game menu code "myMenuCode1"
    } else if ([inGameMenuCode isEqualToString:@"myMenuCode2"]) {
        // Do somthing for the in-game menu code "myMenuCode2"    
    }
}
```

{% hint style="info" %}
nngSDKReceiveInGameMenuCode: メソッドはSDK画面を閉じません。必要であれば、上記のコード例の2列目に記述されたように、SDK画面を閉じるコードを追加してください。
{% endhint %}

&#x20;
