# 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)


---

# 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/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.
