> For the complete documentation index, see [llms.txt](https://navergame.gitbook.io/naver-game/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://navergame.gitbook.io/naver-game/integration-guide/cocos2d-x.md).

# Cocos2d-x

## Quick Start

최신 버전 다운로드

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

## 기존 프로젝트에 Navergame SDK 적용하기

본 가이드는 Cocos2d-x 3.17.2 버전을 기준으로 작성되었습니다.

### 1. 플러그인 구성

* 샘플 프로젝트내의 Plugins 폴더에 SDK에 필요한 파일들이 들어있습니다.

![](/files/-McJ5cJSTCZUwb5mhcnB)

1. )  android : android build에 필요한 파일들이 들어있습니다.
2. )  ios : ios build에 필요한 파일들이 들어있습니다.
3. )  navergamesdk : cocos2d-x프로젝트와 android, ios 등 각 플폼에 연결 필요한 파일들이 들어있습니다.

### 2. 플러그인 설치

* 귀 사의 Cocos2d-x프로젝트와 SDK 연동을 하기 위해서는 **Plugins내의 navergamesdk폴더**를 아래와 같이 **귀 사의 프로젝트 내의 Classes 폴더내**에 복사를 합니다.&#x20;

![](/files/-McIuDtoV5hCqJHjgHJ5)

* 만약 귀 사의 프로젝트에서 **android 혹은 ios 플래폼** **하나만** **출시하실 예정**이라면 platform 하단의 android 혹 ios 폴더 중에 **해당하는 폴더만 남기시고 지우시면 됩니다**.

#### 2-1. NaverGameSDK.h

* &#x20;해당 파일 안에는 sdk 연결에 필요한 코드가 작성되어 있습니다.

![](/files/-McIyKV-MAF-itbH87wv)

### 3. 플러그인 적용

귀 사의 프로젝트내에서 sdk를 사용하려는 곳에 헤더파일을 include시킵니다. (샘플프로젝트에서는 HelloWorldScene.h에 적용하였습니다)

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

* NaverGameSDK.h를 찾지못한다고 나온다면 rootProject/CmakeLists.txt에 헤더파일을 하단 이미지와 같이 추가시켜줘야합니다.

![헤더파일과 cpp파일을 등록하여줍니다.](/files/-McJARfAGf6V0QpPCVLf)

![navergamesdk 폴더를 등록하여줍니다.](/files/-McJhgkD4XHZE5jeRjCx)

#### 3-1. SDK 초기화

SDK를 초기화할 때는 다음과 같은 초기화 옵션을 설정하고 init() 메서드를 호출합니다.

* ClientId: [네이버 아이디로 로그인 개발자 센터](https://developers.naver.com/products/login/api)에 애플리케이션을 등록하고 받은 클라이언트 아이
* ClientSecret: [네이버 아이디로 로그인 개발자 센터](https://developers.naver.com/products/login/api)에 애플리케이션을 등록하고 받은 클라이언트 시크릿
* LoungeId:  공식라운지를 신청하고 받은 LoungeId&#x20;

```
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는 두 개의 알파벳으로 이루어진 국가코드([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   | 미국   |

## 안드로이드 프로젝트에 Navergame SDK 적용하기

아래는 샘플프로젝트의 안드로이드 빌드 환경입니다.참고하여 주시기 바랍니다.

* 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/-McJ5cJSTCZUwb5mhcnB)

**Plugins폴더내의 android** 폴더 내용입니다.

![](/files/-McJDsNy1Cfdw8XtfXZt)

1. ) com... 폴더 안 끝에 android에서 cocos프로젝트와 브릿지역할을하는 **NNGSdk.java 파일**이 들어있습니다.
2. ) navergame-sdk-gradle-x.x.x.aar 은 **Navergame sdk 라이브러리** 입니다.

**샘플프로젝트 디렉토리 구조**입니다.

<div align="center"><img src="/files/-McJMcStby7viqgww_FR" alt=""></div>

#### 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**\_~~Funtion네임~~
  * NNGSDK.java 파일의 위치경로입니다. 만약 NNGSdk.java의 위치경로를 변경하였다면 해당 위치에 맞게 수정하여주십시오.

###

### 2. 안드로이드로 빌드하기위한 설정

#### 1-1. AndroidManifest.xml

* rootProject/proj.android/app/AndroidManifest.xml 파일 안에 SDK에서 필요한 권한 추가하여줍니다.

```markup
<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-x.x.x.aar')
    implementation "com.naver.nid:naveridlogin-android-sdk:4.2.6" // naveridlogin
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.7.20"      // Kotlin
    implementation "androidx.viewpager2:viewpager2:1.0.0"           // Viewpager2
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"   //swiperefreshlayout
    implementation "com.github.bumptech.glide:glide:3.7.0"          // Glide
    implementation "com.squareup.retrofit2:retrofit:2.9.0"          // Retrofit2
    implementation "com.squareup.retrofit2:converter-gson:2.9.0"
}
```

#### 1-3. ndk 및 cmake 설치

* Android Studio 이용방법
  * Android Studio -> Preferences -> 검색에 sdk 검색 후 sdk tools 탭에서 ndk와 cmake를 다운받아줍니다. (Show Package Details 체크하세요.)

![cocos-3.17.2버전 기준으로 ndk-16.1.4479499, cmake-3.10.2.4988404 버전을 사용하였습니다.](/files/-McJseKJSkVdlkuDQb6w)

**1-4. ndk, cmake 적용**

* rootProject/proj.android/local.properties파일에 ndk, cmake 설치파일경로를 입력하여 줍니다.

![](/files/-McJtj1LMQZwnn2HC9O1)

###

### 3. 안드로이드로 빌드하기

Cocos2d-x프로젝트 안드로이드 **빌드 방법은 2가지** 입니다.

* cmake
* ndk

정확한 네이밍은 cocos2d-x버전에 따라 다를수 있으니 확인바랍니다. 3.17.2버전 기준으로는 build.gradle 파일안에서 확인 할 수 있습니다.

![3.17.2버전 기준으로 'ndk-build' 와 'cmake' 입니다.](/files/-McJlLgr6spgvYqlwSlt)

#### 3-0. 빌드 타입 적용 방법

rootProject/proj.android/gradle.properties 파일 내의 **PROP\_BUILD\_TYPE** 프로퍼티에서 정할 수 있습니다.

![](/files/-McJn169Oaajo1uZGilJ)

* 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/-McJwtGAkvcoXaIiCTkq)

* rootProject/proj.andorid/local.properties에 ndk설치파일패스가 잘 입력되어있는지 확인합니다.
* **빌드버튼 클릭!**

## iOS 프로젝트에 Navergame SDK 적용하기

{% hint style="info" %}
네이버 게임 iOS SDK는 iOS 12.0 버전부터 지원합니다.
{% endhint %}

네이버 게임 SDK를 사용하려면 XCode에서 다음과 같이 개발 환경을 설정합니다.

* **TARGETS** 항목 중 실행될 앱을 선택합니다.
* **Build Setting** 탭을 선택하고 **Linking** 항목에서 **Other Linker Flags**를 찾습니다.
  * **Basic** 또는 **Customized**모드 인 경우 **Other Linker Flag**가 보이지 않는 경우도 있습니다.이 경우 A**ll** 모드를 선택합니다.
  * 우상단에 위치한 검색창에 **Other Linker Flag**를 입력하면 쉽게 찾을 수 있습니다.
* **Other Linker Flags**에 **-ObjC** 옵션과 **-lc++** 옵션을 추가합니다.

![](/files/-MVVfw0vZl_D1l5orL39)

* **Info.plist**에 아래의 사용자 권한 획득 옵션을 추가합니다.
  * Privacy - Camera Usage Description
  * Privacy - Photo Library Usage Description

![](/files/-MW36ZfA0NvJ6u1xfQwa)

* **TARGETS** 항목 중 실행될 앱을 선택하고 **Info**탭의 **URL Types** 항목에 **Identifier** 값과 **URL Schemes**값을 입력합니다.
* **Identifier** 값은 해당 **TARGET**의 **General** 탭에서 확인할 수 있습니다.
* **URL Schemes** 값에는 [네이버 아이디로 로그인 개발자 센터](https://developers.naver.com/apps/#/register?api=nvlogin)에 애플리케이션을 등록할 때 입력한 [URL Scheme](https://developers.naver.com/apps/#/myapps) 값을 입력하면 됩니다.

![](/files/-MVo-tflgFD1-pKeLbUt)

![](/files/-MVo-x3cQ5EyiTLK4kra)
