客户端接入引导-Cocos2dx

客户端接入引导-Cocos2dx

1

准备:
将libs目录下的ixsdk_pay.pro.jar包复制到游戏项目的libs目录下。
Classes目录下IXCC2dxProxy.h为stars-clouds sdk cocos2dx接口,请开发者根据需要使用。

注意:
1. 所有接口参数不能为 null。
2. 支付回调地址,在stars-cloud.com开发者后台填写。

2

配置Android Manifest【必接】 查看

2.1 添加IXSDK_APPID

需要把您在 ixsdk.com 平台申请的 IXSDK_APPID 写入 Android Manifest.xml中的 application 标签下。

<application>

    <meta-data
        android:name="IXSDK_APPID"
        android:value="您在stars-cloud平台申请的AppId" />

</application>

2.2 添加用户权限

此处添加的权限只是SDK测试时使用的权限,在游戏打包时,会再根据渠道的需要增加不同的权限。

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

3

代码混淆 查看

如果要混淆 java 代码,请不要混淆联编的 jar 包中的类。可以添加以下类到 proguard 配置,排除在混淆之外:

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

4

退出【必接】 查看

游戏需要在用户选择退出时,调用exit()方法,接入该接口后,会在游戏退出时,展示渠道要求显示的退出界面,并根据用户的操作回调不同的方法。

IXCC2dxProxy::exit(new IXExitListenerImpl(this));

退出回调如下:

class IXExitListenerImpl:public IXExitListener {
private:
    HelloWorld* parent;
public:
    IXExitListenerImpl(HelloWorld* parent) {
        this->parent = parent;
    }
   virtual void onExit (bool showGameExitUI) {
        if(showGameExitUI) {
            // TODO 展示游戏退出UI,需要游戏自行实现退出逻辑

        } else {
            // TODO 需要游戏自行实现退出逻辑

            // TODO 设置玩家退出数据

            // 游戏退出前,必须执行如下SDK销毁代码
            IXCC2dxProxy::destroy();
        }
    };        
};

5

销毁【必接】 查看

在exit()的onExit()回调方法中调用此方法,执行渠道的资源释放等操作。
此方法需要在游戏执行finish或kill process之前调用。

IXCC2dxProxy::destroy();

6

登录相关【联网游戏必接】 查看

6.1 设置用户其他游戏信息

开发者在玩家角色创建,升级,登录,退出四个地方调用此接口,并根据实际情况填写如下信息,以免影响上线和支付。

/**
 * 必须接入此接口,而且角色创建时间在任何数据接口必须是同一个服务器时间(秒为单位)
 */
#define IXSDK_EXT_PLAYER_CREATE_ROLE  1001  // 角色创建
#define IXSDK_EXT_PLAYER_LEVEL_UP     1002  // 角色升级
#define IXSDK_EXT_PLAYER_LOGIN_GAME   1003  // 登录游戏
#define IXSDK_EXT_PLAYER_EXIT_GAME    1004  // 退出游戏

/**
 * 玩家详细数据,Intent字段名
 */
// 玩家角色id,字符串 
#define IXSDK_EXT_PLAYER_ROLE_ID  "ixsdk_roleId"
// 玩家角色名称,字符串
#define IXSDK_EXT_PLAYER_ROLE_NAME  "ixsdk_roleName"
// 玩家角色等级 整型
#define IXSDK_EXT_PLAYER_ROLE_LEVEL  "ixsdk_roleLevel" 
// 玩家角色创建时间,长整型,秒为单位的服务器时间
#define IXSDK_EXT_PLAYER_ROLE_CREATE_TIME  "ixsdk_roleCreateTime"
// 玩家角色升级时间,长整型,秒为单位的服务器时间
#define IXSDK_EXT_PLAYER_ROLE_LEVEL_UP_TIME  "ixsdk_roleLevelUpTime"
// 玩家游戏内虚拟币余额 整型
#define IXSDK_EXT_PLAYER_BALANCE  "ixsdk_balance"
// 玩家vip等级 如无VIP等级 数据为0,整型
#define IXSDK_EXT_PLAYER_VIP_LEVEL  "ixsdk_vipLevel" 
// 玩家所在服务器Id
#define IXSDK_EXT_PLAYER_SERVER_ID  "ixsdk_serverId" 
// 玩家所在服务器名称
#define IXSDK_EXT_PLAYER_SERVER_NAME  "ixsdk_serverName" 
// 玩家所在公会 如无工会 数据为 无,字符串
#define IXSDK_EXT_PLAYER_PARTY_NAME  "ixsdk_partyName" 

// 调用方法示例:
IXCC2dxProxy::extFunc(NULL, IXCC2dxProxy::EXT_PLAYER_LOGIN_GAME, intentObject); 

6.2 用户登录,登出行为回调接口

此接口需要在调用登录接口之前调用,以保证能在玩家登录完成后有相应的回调。

class IXUserActionListenerImpl: public IXUserActionListener {
private:
    HelloWorld * parent;
public:
    IXUserActionListenerImpl (HelloWorld* parent) {
        this->parent = parent;
    }
    virtual void onLoginSuccess(IXUser user) {
        // TODO 第一步,清除上一个玩家游戏数据,游戏需要回到登录页面
        // TODO 第二步,在此实现游戏玩家的登录成功逻辑
        // TODO 第三步,设置玩家登录后的游戏详细信息接口
    };
    virtual void onLoginFailed(const char *reason) {
        //登录失败 
    };
    virtual void onLogout() {
        // TODO 清除老数据,游戏需要回到登录页面 
        // TODO 可以在此处执行登录接口来实现账号切换
    };
};
IXCC2dxProxy::setUserActionListener(new IXUserActionListenerImpl(this));

6.3 登录

IXCC2dxProxy::login();

6.4 登出

可以在游戏结束前调用此登出接口,完成用户信息销毁的动作。

IXCC2dxProxy::logout()

7

支付【必接】 查看

用户发起支付,支付成功后的支付金额,订单等参数会通知给游戏服务器。
客户端支付回调接口:

class IXPayListenerImpl:public IXPayListener {
private:
    HelloWorld* parent;
public:
    IXPayListenerImpl(HelloWorld* parent) {
        this->parent = parent;
    }
    virtual void onPaySuccess(IXPayResult result) {
        //客户端支付行为完成后回调,不能以此为最后发放商品的依据,并不是所有渠道都回调该方法,请做好兼容处理
    };

    virtual void onPayPending(IXPayResult result) {
        //客户端支付行为结束后回调,不能在指定的时间内完成支付并通知客户端,则返回支付进行中的回调,最终是否成功需要以服务端回调为准
    };

    virtual void onPayFail(char *reason){
        //客户端支付行为失败回调,并不是所有渠道都回调该方法,请做好兼容处理
    };
};

在客户端回调支付成功之后,游戏必须去游戏服务端确认当前订单状态,最终支付结果应该以服务端回调结果为准。
开发者可以根据实际的需求来调用以下支付接口:
pay():用来购买游戏中的道具,如:钻石,金币,披风等。

/**
 * 游戏商品(道具)支付
 *
 * goodsId     商品id
 * goodsName   商品名称,元宝,钻石
 * goodsCount  商品数量
 * totalPrice  商品(道具)价格,单位为人民币分
 * extraInfo  由游戏开发者定义传入的字符串,回与支付结果一同发送给游戏服务器,
 *             游戏服务器可通过该字段判断交易的详细内容(金额 角色等)
 * intentObject 保留的扩展字段
 * payCallBack  支付回调
 */
 IXCC2dxProxy::pay(
            const char* goodsId,
            const char* goodsName,
            jint goodsCount,
            jint totalPrice,
            const char* extrainfo,
            jobject intentObject,
            IXPayListener* payCallBack);