集成方式

开发准备

SDK内容

libs 目录根据平台存放云信动态库,nim 目录下是云信SDK对外提供的接口头文件。云信SDK提供 c 和 c++ 接口文件,c接口文件位于nim/c目录中,c++接口文件位于nim/cpp目录中,在cocos-2dx游戏中推荐使用c++ 接口,开发效率更高。接口根据功能模块存放在不同的目录中:

nim: 即时通信相关接口

nim_audio :语音功能相关接口

nim_chatroom: 聊天室相关接口

快速接入SDK

  1. 下载并导入SDK

    • 下载网易云信cocos-2dx SDK压缩包,目前仅支持c/c++。

    • 创建Cocos2d-x 工程

      使用 cocos 命令创建工程 cocos new -p <package name\> -l cpp <project name\>,创建工程目录。 如:

      cocos new -p org.cocos2dx.nim_cocos2d -l cpp nim_cocos2d

    • 导入SDK

      将云信SDK压缩包解压后拷贝到创建的cocos项目内。

  2. Android 集成

    • 使用 Android Studio 打开创建的 cocos 项目中 proj.android-studio 目录

    • 导入jar包

      在运行SDK目录中libs/Android 目录下包含两个jar包:nim_sdk.jar 和 nim_audio.jar。nim_sdk.jar 是云信SDK必须的,需要确保正确引入项目中,nim_audio.jar 在使用语音功能时会用到。

    • 权限配置

      云信SDK需要使用以下权限:

        <!-- Enable internet for app!!!. -->
        <uses-permission android:name="android.permission.INTERNET" />
        <!-- Getting the state of internet for app!!!. -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <!-- write or read user data file for app!!!. -->
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_LOGS" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

      需要在AndroidManifest.xml文件中确保已经配置了这些权限。

    • 编译链接

      修改 Android Studio工程目录中的Android.mk文件,将云信SDK引入工程,假设SDK目录为nim_cocos2d-x_sdk。

      加入预编译动态库:

        #import nim c library
        include $(CLEAR_VARS)
        include $(MY_ROOT_PATH)/nim_cocos2d-x_sdk/libs/Android/Android.mk

      编译云信SDK c++ 代码:

        # _NIM_CPP_LIBRARY_BEGIN
      
        include $(CLEAR_VARS)
        include $(MY_ROOT_PATH)/nim_cocos2d-x_sdk/nim/cpp/third_party/jsoncpp/Android.mk
      
        include $(CLEAR_VARS)
        include $(MY_ROOT_PATH)/nim_cocos2d-x_sdk/nim/cpp/nim/Android.mk
      
        include $(CLEAR_VARS)
        include $(MY_ROOT_PATH)/nim_cocos2d-x_sdk/nim/cpp/nim_chatroom/Android.mk
      
        include $(CLEAR_VARS)
        include $(MY_ROOT_PATH)/nim_cocos2d-x_sdk/nim/cpp/nim_audio/Android.mk
      
        # _NIM_CPP_LIBRARY_END

      链接:

        LOCAL_STATIC_LIBRARIES += jsoncpp
        LOCAL_SHARED_LIBRARIES += nim
        LOCAL_SHARED_LIBRARIES += nim_chatroom
        LOCAL_SHARED_LIBRARIES += nim_audio
        LOCAL_SHARED_LIBRARIES += fjni_wrapper
        LOCAL_STATIC_LIBRARIES += nim_cpp nim_chatroom_cpp nim_audio_cpp

      以上代码中包含了即时通信、聊天室和语音模块,用户可以根据需要移除不需要的SDK功能。在开发时还需要设置LOCAL_C_INCLUDES 加入正确的头文件包含路径。

    • Proguard混淆配置

      请务必不要混淆网易云信SDK,如果工程设置了代码混淆,在工程的Proguard混淆文件proguard-rules.pro中加入以下配置:

      混淆配置

    • 添加初始化调用:

      修改 AppActivity.java 文件,在使用网易云信SDK之前,需要调用nim_sdk.jar包里的NIMSDK.init初始化接口进行必要的初始化工作,如下:

      SDK初始化

  3. Windows 集成

    • 引入云信SDK c++ 项目

      在cocos工程中添加nim\cpp目录中各功能模块的的项目文件,并在cocos主项目中添加对这些项目的引用。

      添加Windows项目

    • 配置正确的头文件包含目录

    • 在程序运行时需要将SDK目录libs\Windows\x86下的dll文件拷贝到程序执行目录,可以根据功能模块选择需要的dll,不需要的模块可以不拷贝。

  4. iOS 集成

    SDK 只支持 Xcode7.x,不支持 Xcode6.x ,支持 iOS 8.0 以上版本。

    • 集成 SDK

      1) 将压缩包解压后,将nim_cocos2d-x_sdk目录拷贝到相应Cocos2d-x工程目录,找到~/nim_cocos2d-x_sdk/libs/iOS,拖到工程的 FrameWorks下,同时添加下系统库:libz.tbd(或libz.dylib)分别将~/nim_cocos2d_sdk/nim/cpp各子文件夹(nim、nim_audio、nim_chatroom)下找到需要的Xcode project,并将其拖入到Cocos Workspace中。若不需要音频和聊天室相关的功能,则不必添加其相应project.如图

      在cocos工程中链接相应的library。

      2) 设置相应的Header Search Paths,如图:

      3) 设置相应的Library Search Paths,如图:

      4) 修改NVS.framework的设置

      • 在General->Embedded Binaries 中 添加NVS.framework
      • 在Build Phases->Linked Framework and Libaries 中将NVS.framework在列表中的顺序调整到最后项,如果存在多个NVS.framework,则只保留一个。
      • 由于库包含模拟器版本,会导致打包失败。所以如果Enable Bitcode 为YES时,打包时需要将此部分移除,如果Enable Bitcode为NO,则不需要任何处理。Enable Bitcode 为YES时,可如下处理(仅做参考):

        1. 在工程里创建strip_archs.sh脚本到置顶目录,如 Supporting Files里
        2. 在Build Phases中增加过程,类型为New Run Script Phase
        3. 在工程里添加内容:/bin/sh 您的脚本路径,如 /bin/sh "${SRCROOT}/NIMDemo/Supporting Files/nim_strip_archs.sh"
        4. 将以下内容复制到脚本文件
        #!/bin/sh
      
        # Strip invalid architectures
      
        strip_invalid_archs() {
        binary="$1"
        echo "current binary ${binary}"
        # Get architectures for current file
        archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)"
        stripped=""
        for arch in $archs; do
        if ! [[ "${ARCHS}" == *"$arch"* ]]; then
        if [ -f "$binary" ]; then
        # Strip non-valid architectures in-place
        lipo -remove "$arch" -output "$binary" "$binary" || exit 1
        stripped="$stripped $arch"
        fi
        fi
        done
        if [[ "$stripped" ]]; then
        echo "Stripped $binary of architectures:$stripped"
        fi
        }
      
        APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
      
        # This script loops through the frameworks embedded in the application and
        # removes unused architectures.
        find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
        do
        FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
        FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
        echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
      
        strip_invalid_archs "$FRAMEWORK_EXECUTABLE_PATH"
        done

      5) 在Other linker Flags中添加项 -ObjC

      编译通过则集成工作就完成了。