帮助文档

1     开发前准备

1.1 拷贝资源

SDK开发资源包SDK目录中包含SDK的资源文件,请复制SDK目录中的所有目录与文件,并拷贝至各自的游戏工程中,如下:

a)\sdk\cocos \assets目录下的文件拷贝到游戏对应目录下(例如cocos有些版本将资源放在Resources);

b)\sdk\cocos \libs目录下的文件拷贝到游戏对应目录下;

c)\sdk\cocos\libs\armabi\libgangaOnlineUnityHelper.so拷贝到游戏项目的libs\armabi目录和jni目录下;

d)\sdk\cocos\Classes\SFGameNativeInterface.hpp文件中拷贝到游戏工程中C++头文件存放位置,如Cocos2dx项目放入Classes目录,并且在使用接口文件中加入include引用:#include"SFGameNativeInterface.hpp"

1.2 添加SDK提供的lib引用

game\libs目录下的文件拷贝到游戏对应目录下.并做如下图关联。

2-1

1.3 添加SDK提供的Activity引用

在游戏AndroidManifest.xml文件的application中添加由易接提供如下代码,

可参考“网游\sdk\ AndroidManifest.xml "

<service

       android:name="com.snowfish.a.a.s.ABGSvc"

       android:enabled="true"

android:process="com.snowfish.a.a.bg">

<intent-filter>

       <actionandroid:name="com.snowfish.a.a.s.ABGSvc"/>

       <categoryandroid:name="android.intent.category.DEFAULT"/>

</intent-filter>

</service>

<meta-data

       android:name="com.snowfish.customer"

       android:value="SNOWFISH">

</meta-data>

<meta-data

       android:name="com.snowfish.channel"

       android:value="SNOWFISH">

</meta-data>

<meta-data

       android:name="com.snowfish.sdk.version"

       android:value="2">

</meta-data>

<meta-data

       android:name="com.snowfish.appid"

       android:value="KEY">

</meta-data>

<meta-data

       android:name="com.snowfish.channelid"

       android:value="{4ff036a1-3254eafe}">//此参数不做修改,保持默认就行,打包会自动替换

</meta-data>

标红处的KEY值是在易接用户中心申请获取的APPID

格式如下:{12345678-12345678}

1.4 修改 Application

1)若无自定义Applicatiion,则修改AndroidManifest.xmlApplication如下:

<applicationandroid:name="com.snowfish.cn.ganga.helper.SFOnlineApplication"/>

 

2)若开发者自定义的Application。则自定义Application需要继承com.snowfish.cn.ganga.helper.SFOnlineApplicationAndroidManifest.xml修改如下:

<applicationandroid:name="自定义Application"/>

1.5 添加SDK需要的use-permision

在游戏的AndroidManifest.xml中添加use-permision如下,

可参考“网游\sdk\ AndroidManifest.xml "

<uses-permissionandroid:name="android.permission.INTERNET"/>

<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

<uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/>

<uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW"/>

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>

<uses-permissionandroid:name="android.permission.GET_TASKS"/>

<uses-permissionandroid:name="android.permission.WAKE_LOCK"/>

<uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/>

1.6 增加闪屏Activity

1)      继承com.snowfish.cn.ganga.helper.SFOnlineSplashActivity并将该Activity设置为程序启动时的Activity

publicclassMySplashActivityextendsSFOnlineSplashActivity {

  publicintgetBackgroundColor() {

  // 返回闪屏的背景颜色

          returnColor.WHITE;

  }

  @Override

  publicvoidonSplashStop() {

  // 闪屏结束进入游戏

          Intent intent = newIntent(this, MainActivity.class);

         startActivity(intent);

         this.finish();

      }

}

2)  AndroidManifest.xml中关于该Activity的声明,要声明为启动Activity

<activity

      android:name="com.snowfish.cn.ganga.helper.MySplashActivity"

      android:configChanges="orientation|keyboardHidden|screenSize"

      android:screenOrientation="portrait">

  <intent-filter>

      <actionandroid:name="android.intent.action.MAIN"/>

      <categoryandroid:name="android.intent.category.LAUNCHER"/>

  </intent-filter>

</activity>

   注意:闪屏的横竖屏需要cp自己在AndroidManifest.xml中的闪屏activity中,设置一下screenOrientation属性。

1.7 SDK避免模糊,防止计费时发生异常。

两种方式建议使用第二种方式:

1proguard-project.txt文件中增加如下代码:

-keep class com.snowfish.** { *; }

-dontwarn  com.unity3d.**
-keep class com.unity3d.**{*
}

 

2android\sdk\tools\proguard\proguard-android.txt文件中增加:

-keep class com.snowfish.** { *; }

-dontwarn  com.unity3d.**
-keep class com.unity3d.**{*
}

1.8 Android.mk文件修改

修改android工程的jni/Android.mk文件,添加如下代码(黄色突出代码):

LOCAL_PATH := $(call my-dir)

            //yijie SDK add –s

include$(CLEAR_VARS)

LOCAL_MODULE := gangaOnlineUnityHelper

LOCAL_SRC_FILES := libgangaOnlineUnityHelper.so

include$(PREBUILT_SHARED_LIBRARY)

//yijie SDK add –e

 

include$(CLEAR_VARS)

LOCAL_MODULE := cocos2dcpp_shared

                            ….

LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static

LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static

//yijie SDK add –s

LOCAL_SHARED_LIBRARIES += gangaOnlineUnityHelper

//yijie SDK add –e

2    接口说明

2.1 SDK初始化接口(必选接口)

一、C++初始化接口

游戏主Activity中加载库文件,如需要填在其他库文件,请将此库文件放在第一个加载:

static {

System.loadLibrary("gangaOnlineUnityHelper");

   }

   添加jni初始化接口,在游戏主ActivityonCreate中调用

以下2个接口任选一个接入,注意:只需调用一次

(1)初始化无回调方法

         SFNativeAdapter.init(AppActivity.this, newSFActionCallback() {

@Override

publicvoid callback(Runnable run) {

runOnGLThread(run);

            }

        });

2)初始化带有回调函数(在游戏里注册初始化回调)

SFNativeAdapter.init_listener(AppActivity.this, newSFActionCallback() {

@Override

publicvoid callback(Runnable run) {

runOnGLThread(run);

            }

        });

       注:cocos2.0版本中没有runOnGLThread此方法,需要自行添加。参考如下:

publicvoidrunOnGLThread(final Runnable pRunnable) {

      this.mGLSurfaceView.queueEvent(pRunnable);//mGLSurfaceView基类为GLSurfaceView

}

二、游戏主Activity初始化接口(必选接口)

如下方法在游戏主Activity中调用:

1SFOnlineHelper.onCreateonCreate(Activity activity)

该方法用于需要在游戏主Activity中的onCreate中调用,只需调用一次

注:如果调用初始化带有回调的方法,此方法就不需要调用

调用用例: SFOnlineHelper.onCreate(this);

2SFOnlineHelper.onStop(Activity activity)

该方法在游戏Activity中的onStop中调用

调用用例: SFOnlineHelper.onStop(this);

3SFOnlineHelper.onDestroy(Activity activity)

该方法在游戏Activity中的onDestroy中调用

调用用例   SFOnlineHelper.onDestroy(this);

4SFOnlineHelper.onResume(Activity activity)

该方法在游戏Activity中的onResume中调用

调用用例: SFOnlineHelper.onResume(this);

5SFOnlineHelper.onPause (Activity activity)

该方法在游戏Activity中的onPause中调用

调用用例: SFOnlineHelper.onPause (this);

6SFOnlineHelper.onRestart (Activity activity)

该方法在游戏Activity中的onRestart中调用

调用用例: SFOnlineHelper.onRestart (this);

2.2 用户登陆接口(必选接口)

staticvoidSFGameNativeInterface::login(constchar* params);

该方法用于登陆,调用用例:

        SFGameNativeInterface::setLoginCallback(&loginCallback);//设置回调函数

       SFGameNativeInterface::login("login");

2.3 用户登出接口(可选接口)

staticvoidSFGameNativeInterface::logout(constchar* params);

该方法用于登出,调用用例:

        SFGameNativeInterface::setLoginCallback(&loginCallback);//设置回调函数

       SFGameNativeInterface::logout("logout");

2.4 退出接口(必选接口)

staticvoidSFGameNativeInterface::onExit();

该方法用于退出,调用用例:

        SFGameNativeInterface::setExitCallback(&ExitCallback);//设置回调函数

       SFGameNativeInterface::onExit();

2.5 非定额计费接口(可选接口)

staticvoidSFGameNativeInterface::charge(constchar* itemName, intunitPrice, int count,constchar* callBackInfo, constchar* callBackUrl);

   该接口用于用户触发计费进行付费行为的入口函数。合作伙伴可以在需要计费的地方调用此接口进行计费。该接口用于非定额计费。

参数描述:

参数名称

类型

注释

itemName

constchar*

虚拟货币名称(商品名称)

注意:虚拟币名称在游戏内一定要确保唯一性!!!!不能出现多个虚拟币名称相同。

unitPrice

int

游戏道具价格,单位为人民币分

count

int

用户选择购买道具界面的默认道具数量.(count*unitPrice)

callBackInfo

constchar*

由游戏开发者定义传入的字符串,会与支付结果一同发送给游戏服务器,游戏服务器可通过该字段判断交易的详细内容(金额角色等)

callBackUrl

constchar*

将支付结果通知给游戏服务器时的通知地址url,交易结束后,系统会向该url发送http请求,通知交易的结果金额callbackInfo等信息

注意:这里的回调地址可以填也可以为空字串,如果填了则以这里的回调地址为主,如果为空则以易接开发者中心设置的回调地址为准。

 

调用用例:

    SFGameNativeInterface::setPayResultCallback(&payCallback);//设置回调

SFGameNativeInterface::charge("200金币", 2, 1, "购买金币", http://192.168.0.224:8980/omsdk-cp/user/paylog/sync);

 

2.6 定额计费接口(必选接口)

staticvoidSFGameNativeInterface::pay(intunitPrice, constchar*  unitName,

int count, constchar*  callBackInfo, constchar* callBackUrl);

该接口用于定额支付的接口函数。合作伙伴在需要使用定额支付的时候使用该接口。

参数描述:

参数名称

类型

注释

unitPrice

int

游戏道具价格,单位为人民币分

unitName

constchar*

虚拟货币名称(商品名称)

注意:虚拟币名称在游戏内一定要确保唯一性!!!!不能出现多个虚拟币名称相同。

count

int

用户选择购买道具界面的默认道具数量。(总价 count*unitPrice

callBackInfo

constchar*

由游戏开发者定义传入的字符串,会与支付结果一同发送给游戏服务器,游戏服务器可通过该字段判断交易的详细内容(金额角色等)

注意:这里的回调地址可以填也可以为空字串,如果填了则以这里的回调地址为主,如果为空则以易接开发者中心设置的回调地址为准。

callBackUrl

constchar*

将支付结果通知给游戏服务器时的通知地址url,交易结束后,系统会向该url发送http请求,通知交易的结果金额callbackInfo等信息

 

调用用例:

        SFGameNativeInterface::setPayResultCallback(&payCallback);

        SFGameNativeInterface::pay(1, "100金币", 1, "购买金币",

http://192.168.0.224:8980/omsdk-cp/user/paylog/sync);

 

2.7 设置角色基本数据(必选接口)

staticvoidSFGameNativeInterface::setRoleData(constchar* roleId, constchar* roleName,constchar* roleLevel, constchar* zoneId, constchar* zoneName);

部分渠道如UC渠道,要对游戏人物数据进行统计,而且为接入规范,

调用时间:在游戏登录验证成功后

参数描述:

参数名称

类型

注释

roleId

constchar*

角色唯一标识

roleName

constchar*

角色名

roleLevel

constchar*

角色等级

zoneId

constchar*

区域唯一标识

 

zoneName

constchar*

区域名称

2.8 扩展接口1(必选接口)

staticvoidSFGameNativeInterface::setData(constchar* key, constchar*value);

扩展接口,部分渠道要求在创建新角色,或者升级角色时、选择服务器时要上报角色信息,为接入规范,所以为必选接口。

         @value 请按要求传入json格式的字符串,JSONObject键值定义如下:

       roleId:当前登录的玩家角色ID,必须为数字

       roleName:当前登录的玩家角色名,不能为空,不能为null

       roleLevel:当前登录的玩家角色等级,必须为数字,且不能为0,若无,传入1

       zoneId:当前登录的游戏区服ID,必须为数字,且不能为0,若无,传入1

       zoneName:当前登录的游戏区服名称,不能为空,不能为null

       balance:用户游戏币余额,必须为数字,若无,传入0

       vip:当前用户VIP等级,必须为数字,若无,传入1

       partyName:当前角色所属帮派,不能为空,不能为null,若无,传入无帮派

    roleCTime:单位为秒,创建角色的时间

       roleLevelMTime:单位为秒,角色等级变化时间

   

@key键值定义和调用实例如下: 

    rapidjson::Document writedoc;

       writedoc.SetObject();

       rapidjson::Document::AllocatorType& allocator = writedoc.GetAllocator();

       rapidjson::Value root(rapidjson::kObjectType);

 

    // json object 格式添加名称/

       root.AddMember("roleId", 1, allocator);

       root.AddMember("roleName", "猎人", allocator);

       root.AddMember("roleLevel", "100", allocator);

       root.AddMember("zoneId", "1", allocator);

       root.AddMember("zoneName", "阿狸一区", allocator);

       root.AddMember("balance", "0", allocator);

       root.AddMember("vip", "1", allocator);

       root.AddMember("partyName", "无帮派", allocator);

root.AddMember("roleCTime", "21322222", allocator);

root.AddMember("roleLevelMTime", "54456556", allocator);

 

       rapidjson::StringBuffer buffer;

       rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);

       root.Accept(writer);

       const char* value = buffer.GetString();

 

key

接口描述

调用示例

createrole

创建新角色时调用

SFGameNativeInterface::setData

 ("createrole" , value);

levelup

玩家升级角色时调用

SFGameNativeInterface::setData

 ("levelup" ,  value);

enterServer

选择服务器进入时调用

SFGameNativeInterface::setData

 ("enterServer" ,  value);

注意:除了上面描述的3个键值必接以外,还有一些渠道必须要特殊处理,具体可参考 “易接网游母包接入注意事项(必看).docx”这个文档。 如果不按照“易接网游母包接入注意事项(必看).docx”这个文档去处理,会导致渠道审核不通过,影响游戏上线时间!!!!

2.9 扩展接口2(可选接口)

conststaticchar*SFGameNativeInterface::extend(constchar* data, intcount);

扩展接口,有些SDK要求必须接入统计接口或者其它特殊的接口,并且有返回值或者回调的函数,用户可以使用此接口调用,具体可以参考易接工具上的SDK的参数填写帮助。

参数说明:/**扩展接口

             * data:需要传入的数据

             * count:扩展接口回调函数的数量,没有可以传“0

             */

调用示例:

SFGameNativeInterface::extend("data ",2);

2.10 初始化回调类

classSFNativeOnlineInitCallback

{

public:

    SFNativeOnlineInitCallback() {};

virtual~SFNativeOnlineInitCallback(){};

virtualvoidonResponse(constchar* r, constchar* remain) = 0;

};

设置接口为:

staticvoidSFGameNativeInterface::setInitCallback(

SFNativeOnlineInitCallback * callback);

示例:

/*游戏初始化回调类*/

classSFNativeOnlineInitCallbackImpl: publicSFNativeOnlineInitCallback {

    virtualvoidonResponse(constchar* r, constchar* remain) {

            log("初始化:%s", r);

    }

};

SFNativeOnlineInitCallbackImpl* initCallback =newSFNativeOnlineInitCallbackImpl();

SFGameNativeInterface::setInitCallback (initCallback);

2.11 登陆登出回调类(必选接口)

classSFNativeOnlineLoginCallback

{

public:

        SFNativeOnlineLoginCallback() {};

        virtual~SFNativeOnlineLoginCallback() {};

        //用户调用SFGameNativeInterface::logout时,会被调用

        virtualvoidonLogout(constchar* remain) = 0;

//用户调用SFGameNativeInterface::login登陆成功时,会被调用

//user为登陆时返回相关参数包含id token 渠道号等

        virtualvoidonLoginSuccess(SFNativeOnlineUser* user, constchar* remain) = 0;

//用户调用SFGameNativeInterface::login登陆失败时,会被调用

        virtualvoidonLoginFailed(constchar* r, constchar* remain) = 0;

};

 

登陆回调类需要在登陆之前设置,可以只设置一次。设置接口为:

staticvoidSFGameNativeInterface::setLoginCallback(

SFNativeOnlineLoginCallback* callback);

2.12 支付回调类

classSFNativeOnlinePayResultCallback

{

public:

  SFNativeOnlinePayResultCallback() {};

virtual~SFNativeOnlinePayResultCallback() {};

//用户支付失败时,会被调用

virtualvoidonFailed(constchar* remain) = 0;

//用户支付成功时,会被调用

virtualvoidonSuccess(constchar* remain) = 0;

//用户支付过程中,创建订单号时会被调用

virtualvoidonOderNo(constchar* orderNo) = 0;

};

 

 

支付回调类需要在支付之前设置,可以只设置一次。设置接口为:

staticvoidSFGameNativeInterface::setPayResultCallback (

SFNativeOnlinePayResultCallback * callback);

2.13 退出回调类(必选接口)

classSFNativeOnlineExitCallback

{

public:

  SFNativeOnlineExitCallback() {};

virtual~SFNativeOnlineExitCallback() {};

//当渠道不需要弹出渠道退出界面时,此函数会被调用

virtualvoidonNoExiterProvide() = 0;

 //当渠道需要弹出渠道退出界面时,易接SDK调起渠道退出界面,用户确认之后,此函数会被调用

virtualvoidonSDKExit(bool result) = 0;

};

 

退出回调类需要在退出之前设置,可以只设置一次。设置接口为:

staticvoidSFGameNativeInterface::setExitCallback(

SFNativeOnlineExitCallback * callback);

2.14 扩展回调类(可选接口)

classSFNativeOnlineExtendCallback

{

public:

    SFNativeOnlineExtendCallback() {};

virtual~SFNativeOnlineExtendCallback() {};

virtualvoidonResponse(intindex,constchar* r, constchar* remain) = 0;

};

扩展回调类需要在调用扩展接口之前设置,可以只设置一次。设置接口为:

staticvoidSFGameNativeInterface::setExtendCallback(

SFNativeOnlineExtendCallback* callback);

示例:

//扩展接口回调

classSFNativeOnlineExtendCallbackImpl: publicSFNativeOnlineExtendCallback {

    virtualvoidonResponse(int index ,constchar* r, constchar* remain){

        if(index==1){

            stringstreamss;

            ss<<"扩展回调1:";

            ss<< r <<','<<remain<<';';

            textPayInfo->setString(ss.str());

        }

        if(index==2)

        {

            stringstreamss;

            ss<<"扩展回调2:";

            ss<< r <<','<<remain<<';';

            textPayInfo->setString(ss.str());

        }

    }

};

SFNativeOnlineExtendCallbackImplextendCallback =SFNativeOnlineExtendCallbackImpl();

//设置扩展回调

SFGameNativeInterface::setExtendCallback(&extendCallback);

//调用SDK扩展接口

SFGameNativeInterface::extend("data",2);

2.15 用户登陆验证(必选接口

由于有些SDK要求SDK登录成功以后必须做登录验证,为接入规范,必须接入登录验证,只有登录验证成功才算真正的登录成功。

渠道sdk登录成功以后,客户端做登录验证请求的时候只需要把以下四个参数拼接进去就行了。

参数

获取方式

类型

注释

appId

user->productCode

char

易接平台创建的游戏IDappId请使用URLEncoder编码

channelId

user->channelId

char

易接平台标示的渠道SDK ID

请使用URLEncoder编码

userId

user->channelUserId

char

渠道SDK标示的用户ID

请使用URLEncoder编码

token

user->token

char

渠道SDK登录完成后的Session ID请使用URLEncoder编码

特别提醒:部分渠道这些参数会包含特殊值如‘+’,空格之类的,故不能直接使用URL参数传输到游戏服务器请求校验,请对四个参数分别使用URLEncoder进行编码

调用用例:参考demo中的

LoginCheck(cstr);