# Cocos2d-x

## Quick Start

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

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

## **既存プロジェクトにNavergame SDKを適用する**

本ガイドは、Cocos2d-x 3.17.2バージョンを基準に作成されています。

### **1. プログインの構成**

* サンプルプロジェクト内のPluginsフォルダにはSDKに必要なファイルが入っています。

![](/files/Tb3hRlED3hnSKNcYRugh)

1. android : android buildに必要なファイルが入っています。
2. ios : ios buildに必要なファイルが入っています。
3. navergamesdk : cocos2d-xプロジェクトとandroid、iosなど各プラットフォームに連動する必要のあるファイルが入っています。

### **2. プログインのインストール**

* 貴社のCocos2d-xプロジェクトとSDKを連動させるためには、**Plugins内のnavergamesdkフォルダ**を以下のように**貴社のプロジェクト内のClassesフォルダの中**にコピーしてください。

![](/files/oDaE1XuwWhsOvM8Gwgen)

* 貴社のプロジェクトで**android或いはiosプラットフォームを一つだけリリースする予定**の場合は、platform画面下のandroid或いはiosフォルダのうち**該当するフォルダのみを残して削除すると良いでしょう。**

#### **2-1. NaverGameSDK.h**

* 当該ファイル内にはsdk連動に必要なコードが作成されています。

![](/files/BZmqy8A8Qgnv00il4vAY)

### **3. プロフインの適用**

貴社のプロジェクト内でsdkを使用したい場所にヘッダファイルをincludeさせてください。

(サンプルプロジェクトではHelloWorldScene.hに適用されています。)

```
#include "NaverGameSDK.h"
```

* NaverGameSDK.hが見つからないと表示された場合は、rootProject/CmakeLists.txtにヘッダファイルを下の画像のように追加してください。

![ヘッダファイルとcppファイルを登録してください。](/files/5Tqk1AJ9LOXCkww4FUql)

![navergamesdkフォルダを登録してください。](/files/4aM35MRmmC8yOs7MhCo9)

#### **3-1. SDKの初期化**

SDKを初期化するときは、以下のように初期化オプションを設定してinit()メソッドを呼び出してください。

* ClientId: [NAVER IDでログイン開発者センター](https://developers.naver.com/products/login/api)にアプリケーションを登録時に受け取ったクライアントID
* ClientSecret: [NAVER IDでログイン開発者センター](https://developers.naver.com/products/login/api)にアプリケーションを登録時に受け取ったクライアントシークレット
* LoungeId: 公式ラウンジを申請時に受け取ったLoungeId

```
nng::NaverGameSDK::init("UKvNABLDsyEJusJGsXL2", "rK4suc_Qd0", "naver_game_4developer");
```

#### **3-2. SDKイベントリスナーの登録**

SDKが送信する様々なイベントを受け取るためにはリスナーを登録しなければなりません。

```
//리스너는 NaverGameSDK.h 에 선언되어있습니다.
nng::NaverGameSDK::setSdkListener(this);
```

#### **3-3. SDK対応Funtionを確認する**

1. ホームバナーを呼び出す

```
nng::NaverGameSDK::startHomeBanner();
```

2\. 点検バナーを呼び出す

```
nng::NaverGameSDK::startSorryBanner();
```

3\. 特定の掲示板を呼び出す

```
nng::NaverGameSDK::startBoard(boardId);
```

4\. 特定の投稿を呼び出す

登録された投稿の番号ですぐに実行するメソッドです。**予約機能によって登録された予約投稿**の場合は、予約投稿の番号をFeedIDに入力してIsTempFeedIdを**True**と入力してください。

```
nng::NaverGameSDK::startFeed(feedId, isTempFeedId);
```

5\. sdkを終了させる

```
nng::NaverGameSDK::stopSdk
```

6\. 国コードを呼び出す

モバイル機器のcountryCodeを取得します。必ず**init()メソッドが呼び出した後**に呼び出した場合のみ正常値を得ることができます。

```
nng::NaverGameSDK::getCountryCode();
```

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)をご参考にしてください。

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

## **AndroidプロジェクトにNavergame SDKを適用させる**

以下はサンプルプロジェクトのAndroidビルド環境です。ご参考にしてください。

* Cocos2d-x **3.17.2**
* Android Studio **4.2**
* Gradle **4.9 (proj.android/gradle/wrapper/gradle-wrapper.properties)**
* Ndk **16.1.4479499**
* Cmake **3.10.2.4988404 (**&#x77;ith Ninja **1.10.2)**

**​**

### **1. Cocos2d-xとAndroidを連結するブリッジファイル(コード)を追加する**

**サンプルプロジェクトのPlugins**フォルダです。

![](/files/TzmkHb1FsAMlxQcsKyBU)

**Pluginsフォルダ内のandroid**フォルダの内容です。

![](/files/F89iLfHKu4tfQCvLHMBP)

1. com...フォルダ内の端には、androidでcocosプロジェクトとブリッジの役割をする**NNGSdk.javaファイル**が入っています。
2. navergame-sdk-gradle-x.x.x.aarは**Navergame sdkライブラリ**です。

**サンプルプロジェクトディレクトリの構造**です。

![](/files/I6c2RVE9qTS4Eq0xkBNk)

#### **1-1. navergame-sdk-gradle-x.x.x.aar**

Naver Game SDKライブラリです。

* rootProject/proj.android/app/libsフォルダに貼り付けてください。libsフォルダがない場合は作成してください。

#### **1-2. NNGSdk.java**

AndroidでCocos2d-xプロジェクトとSDKを連結させるブリッジコードが作成されたファイルです。

* rootProject/proj.android/app/srcフォルダに貼りつけてださい。com..ではじまるフォルダ全体を貼り付けてください。

#### **1-3. NaverGameSDK.cpp**

Cocos2d-xでAndroidプロジェクトと連結させるブリッジコードが作成されたファイルです。

* rootProject/Classes/navergamesdk/platform/android/NaverGameSDK.cppファイルがあるか確認して、ない場合はPluginsフォルダで探して貼り付けてください。
* cocos2d-xバージョンによってJniHelperが別の名前で作成されている場合があるので、バージョンが異なる場合は確認してみてください。

```
#include "NaverGameSDK.h"
#include "platform/android/jni/JniHelper.h"

using namespace cocos2d;

namespace nng {
    static bool getStaticMethod(JniMethodInfo &methodinfo, const char *methodName, const char *paramCode) {
        static const char* kCafeSdkClass = "com/navercorp/nng/cocos2dx/sample/NNGSdk";
        return JniHelper::getStaticMethodInfo(methodinfo, kCafeSdkClass, methodName, paramCode);
    }

    static NaverGameSDKListener* sdkListener = nullptr;

    void NaverGameSDK::setSdkListener(NaverGameSDKListener* listener) {
        sdkListener = listener;
    }

    void NaverGameSDK::init(std::string clientId, std::string clientSecret, std::string loungeId) {
        JniMethodInfo t;
        if (getStaticMethod(t, "init","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V")) {
            jstring _clientId = t.env->NewStringUTF(clientId.c_str());
            jstring _clientSecret = t.env->NewStringUTF(clientSecret.c_str());
            jstring _loungeId = t.env->NewStringUTF(loungeId.c_str());

            t.env->CallStaticVoidMethod(t.classID, t.methodID, _clientId, _clientSecret, _loungeId);

            t.env->DeleteLocalRef(_clientId);
            t.env->DeleteLocalRef(_clientSecret);
            t.env->DeleteLocalRef(_loungeId);
            t.env->DeleteLocalRef(t.classID);
        }
    }

    .
    .
    .

    extern "C" {
        JNIEXPORT void JNICALL
        Java_com_navercorp_nng_cocos2dx_sample_NNGSdk_onSdkStarted(JNIEnv* env, jclass thiz) {
            if (sdkListener == nullptr) return;
            sdkListener->onSdkStarted();
        }

        .
        .
        .
    }
}   /* namespace nng */
```

* kCafeSdkClass = "**com/navercorp/nng/cocos2dx/sample/NNGSdk**";
  * NNGSdk.javaファイルのロケーションパスです。NNGSdk.javaのロケーションパスを変更した場合は、当該ロケーションに合わせて修正してください。
* Java\_**com\_navercorp\_nng\_cocos2dx\_sample\_NNGSdk**\_
  * NNGSDK.javaファイルのロケーションパスです。NNGSdk.javaのロケーションパスを変更した場合は、当該ロケーションに合わせて修正してください。

### **2. Androidでビルドするための設定**

#### **1-1. AndroidManifest.xml**

* rootProject/proj.android/app/AndroidManifest.xmlファイル内にSDKで必要な権限を追加してください。

```
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
```

#### **1-2. build.gradle**

* rootProject/proj.android/app/build.gradleファイル内にSDKとSDKで必要なライブラリを追加してください。

```
dependencies {
    implementation project(':libcocos2dx')
    /**
     * Navergame sdk와 필요한 libraries
     */
    implementation files('libs/navergame-sdk-gradle-1.1.0.aar')
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.3.72"            // Kotlin
    implementation "androidx.viewpager2:viewpager2:1.0.0"
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
    implementation "com.github.bumptech.glide:glide:3.7.0"                // Glide
    implementation "com.squareup.retrofit2:retrofit:2.6.4"                // Retrofit, Gson
    implementation "com.squareup.retrofit2:converter-gson:2.7.2"          // Retrofit, Gson
}
```

#### **1-3. ndkとcmakeのインストール**

* Android Studioの利用方法
  * Android Studio -> Preferences -> 検索でsdkを検索後、sdk toolsタブでndkとcmakeをダウンロードしてください。(Show Package Detailsをチェックしてください。)

![ocos-3.17.2バージョン基準でndk-16.1.4479499、cmake-3.10.2.4988404バージョンを使用しました。](/files/yyvaqEZlpC0M8gUW703K)

#### **1-4. ndk、cmakeの適用**

* rootProject/proj.android/local.propertiesファイルにndk、cmakeインストールファイルパスを入力してください。

![](/files/OC8pVwxJn8eo57fETRXH)

### **3. Androidでビルドする**

Cocos2d-xプロジェクトをAndroidで**ビルドする方法は2つ**あります。

* cmake
* ndk

正確な名称はcocos2d-xのバージョンによって異なることがあるので確認してください。3.17.2バージョン基準では、build.gradleファイル内で確認できます。

![3.17.2バージョン基準で「ndk-build」と「cmake」です。](/files/iQ2Ow3X1g6pG2n369mgj)

#### **3-0. ビルドタイプの適用方法**

rootProject/proj.android/gradle.propertiesファイル内の**PROP\_BUILD\_TYPE**プロパティで定めることができます。

![](/files/cFUM0vHekz1rjxXZSk0T)

* cmakeでビルドする場合は、**PROP\_BUILD\_TYPE=cmake**に設定してください。

#### **3-1. CMAKEでビルドする**

* rootProject/proj.android/gradle.properties内の**PROP\_BUILD\_TYPE=cmake**を確認してください。
* rootProject/CmakeList.txtに[SDKに必要なファイルとフォルダパスが正しく追加されたか確認してください。](https://app.gitbook.com/@navergame/s/naver-game/integration-guide/cocos2d-x#3)​
* rootProject/proj.andorid/local.propertiesにcmakeとndkのインストールファイルパスが正しく入力されたか確認してください。
* cmakeでビルドするためにはNinjaが必要です。ninjaのインストールを確認してください。
* **ビルドボタンをクリック！**

#### **3-2. NDKでビルドする**

* rootProject/proj.android/gradle.properties内の**PROP\_BUILD\_TYPE=ndk-build**を確認してください。
* rootProject/proj.android/app/jni/Android.mkに**SDKに必要なファイルとフォルダパス**を追加してください。

![](/files/A4YHYftc8fc4Mp8VRKk4)

* rootProject/proj.andorid/local.propertiesにndkのインストールファイルパスが正しく入力されたか確認してください。
* **ビルドボタンをクリック！**

## **iOSプロジェクトにNavergame SDKを適用する**

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

NAVERゲームSDKを使用する場合は、XCodeで以下のように開発環境を設定してください。

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

![](/files/MNiHTNhYIBAJtvXyEZW2)

&#x20;

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

![](/files/bRcqxqGAXuMYbs3BLlho)

* **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)値を入力してください。

![](/files/S2hbiSTnnJuDnCucKOK5)

![](/files/GZBtVPPl7GaP6OpgQNIc)

&#x20;

&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://navergame.gitbook.io/naver-game/japanese/integration-guide/cocos2d-x.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
