客户端接入引导-Cocos2dx

客户端接入引导-Cocos2dx

1

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

注意:
1. 所有接口参数不能为 null。
2. 支付回调地址,在stars-cloud.com开发者后台填写。
3. 游戏中继承 Cocos2dxActivity 的主Activity,需要改为继承 IXCC2dxActivity。

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

            // TODO 根据玩家选择,决定是否执行游戏退出逻辑

            // TODO 如果玩家选择退出,则必须在游戏退出前设置玩家退出数据,并调用SDK销毁方法

        } else {

            // TODO 不需要展示游戏退出确认UI,直接执行游戏退出逻辑

            // TODO 必须在游戏退出前设置玩家退出数据,并调用SDK销毁方法

        }
    };        
};

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) {
        // TODO 处理登录失败的逻辑
    };

    virtual void onLogout() {
        // TODO 第一步,清除上一个玩家的游戏数据

        // 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) {
        // TODO 执行支付成功后的游戏逻辑
    };

    virtual void onPayPending(IXPayResult result) {
        // 支付进行中,渠道支付SDK,无法在短时间内回调支付结果。
    
        // TODO 如果游戏是短链,则需要游戏客户端去轮询游戏服务端,看是否收到服务端支付成功回调。
        //      如果游戏是长链,则可以直接提示“支付进行中”,游戏客户端等待游戏服务端推送支付结果。
    };

    virtual void onPayFail(char *reason) {
        // TODO 执行支付失败后的游戏逻辑
    };
};

在客户端回调支付成功之后,游戏必须去游戏服务端确认当前订单状态,最终支付结果应该以服务端回调结果为准。
开发者可以根据实际的需求来调用以下支付接口:
pay():用来购买游戏中的虚拟币,如:钻石,金币等。
注意: 调用支付方法之前,必须调用 “设置用户其他游戏信息” 接口,否则无法调起支付界面。

/**
 * 游戏商品(虚拟币)支付
 *
 * goodsId      游戏商品id
 * goodsName    游戏虚拟货币单位,比如:“钻石”,“宝石”,“金币”等。【注】:货币单位不能数字开头。
 * goodsCount   游戏虚拟货币数量,比如:300, 1000等。【注】:货币数量不能为0。
 * totalPrice   游戏商品价格,单位为:人民币分
 * extraInfo    由游戏开发者定义传入的字符串,回与支付结果一同发送给游戏服务器,
 *              游戏服务器可通过该字段判断交易的详细内容(金额 角色等)
 *              长度限制:不超过128个字符
 * intentObject 保留的扩展字段
 * payCallBack  支付回调
 */
 IXCC2dxProxy::pay(
            const char* goodsId,
            const char* goodsName,
            jint goodsCount,
            jint totalPrice,
            const char* extrainfo,
            jobject intentObject,
            IXPayListener* payCallBack);