数据结构
Unity3D
CallbackRet
LoginRet
TokenRet
eTokenType
WakeupRet
LocationRet
RelationRet
PersonInfo
ShareRet
GroupRet
QQGroupInfo
WXGroupInfo
eFlag
eQQScene
eWechatScene
ePlatform
eBuglyLogLevel
NoticeInfo
GetCountryFromIPRet
CheckULRet
eULCheckStep
GetIPInfoRet
Android
CallbackRet
LoginRet
TokenRet
eTokenType
WakeupRet
LocationRet
RelationRet
PersonInfo
ShareRet
GroupRet
QQGroupInfo
WXGroupInfo
eFlag
eQQScene
eWechatScene
ePlatform
eBuglyLogLevel
NoticeInfo
GetCountryFromIPRet
GetIPInfoRet
IOS
CallbackRet
LoginRet
TokenRet
eTokenType
WakeupRet
LocationRet
RelationRet
PersonInfo
ShareRet
GroupRet
QQGroupInfo
WXGroupInfo
eFlag
eQQScene
eWechatScene
ePlatform
eBuglyLogLevel
NoticeInfo
GetCountryFromIPRet
CheckULRet
eULCheckStep
GetIPInfoRet
其他
数据结构
系统工具
错误码 / Android / CallbackRet

CallbackRet

public abstract class CallbackRet{
    public int flag=eFlag.eFlag_Error;//结果
    public String desc="";
    public int platform=0;//平台类型
}

LoginRet

存储用户登录后得到的信息

public class LoginRet extends CallbackRet{
    public String open_id=""; //用户账号唯一标识
    public String user_id=""; //用户ID,保留,游戏无需关心
    public String pf="";      //用于支付    调用WGGetPf()获取
    public String pf_key="";  //用于支付     调用WGGetPfKey()获取
    public String prajna_ext;   //3.3.7新增字段
    public Vector<TokenRet> token=new Vector<TokenRet>(); //存储票据列表
}

TokenRet

票据信息

public class TokenRet{
        public int type=0;         //票据类型  eTokenType类型
        public String value="";    //票据value
        public long expiration=0;  //票据过期时间(游戏不需要关心)
}

eTokenType

token种类

typedef enum _eTokenType{
    eToken_QQ_Access=1, // 手Q accessToken
    eToken_QQ_Pay,  // 手Q payToken
    eToken_WX_Access, // 微信accessToken
    eToken_WX_Code, // 微信code, 已弃用
    eToken_WX_Refresh, // 微信refreshToken
    eToken_Guest_Access // Guest模式下的票据
}
平台 token类型 token作用 type 有效期
手Q accesstoken 查询手Q个人、好友、关系链、分享等功能 eToken_QQ_Access 90天
手Q paytoken 支付相关 eToken_QQ_Pay 7天
微信 accesstoken 查询微信个人、好友、关系链、分享、支付等 eToken_WX_Access 24小时
微信 refreshtoken 刷新accesstoken eToken_WX_Refresh 30天

WakeupRet

存储游戏被平台唤醒时,平台传递到客户端的信息

public class WakeupRet extends CallbackRet{
    /** 传递的openid */
    public String open_id="";
    /** 对应微信消息中的mediaTagName */
    public String media_tag_name="";
    /** 扩展消息,唤醒游戏时带给游戏 */
    public String messageExt="";
    /** 语言     目前只有微信5.1以上用,手Q不用 */
    public String lang="";
    /** 国家     目前只有微信5.1以上用,手Q不用 */
    public String country="";
    public Vector<KVPair> extInfo=new Vector<KVPair>();
  ...
}

eMSDK_SCREENDIR

typedef enum _eMSDK_SCREENDIR {
    eMSDK_SCREENDIR_SENSOR=0,     //横竖屏
    eMSDK_SCREENDIR_PORTRAIT=1,   //竖屏
    eMSDK_SCREENDIR_LANDSCAPE=2,  //横屏
}eMSDK_SCREENDIR;

LocationRet

地理位置信息

public class LocationRet  extends CallbackRet{
    public double longitude;
    public double latitude;
    ...
}

RelationRet

关系链信息,即“一群”好友的信息

public class RelationRet extends CallbackRet {
    public Vector<PersonInfo> persons=new Vector<PersonInfo>();

    public String toString() {
        String str="";
        if (this != null && this.persons != null) {
            str=super.toString();
            str=str + "friends(num): " + this.persons.size() + ";";
        } else {
            str="friends(num): 0;";
        }
        return str;
    }
}

PersonInfo

好友信息

public class PersonInfo{
    public String nickName="";
    public String openId="";
    public String gender="";
    public String pictureSmall="";
    public String pictureMiddle="";
    public String pictureLarge="";
    public String province="";
    public String city="";
    public String gpsCity="";

    public float distance=0;
    public bool isFriend=false;
    public long timestamp=0;

    public String lang="";
    public String country="";
    public String friendRemark="";  //仅针对于wx,权限正常且微信正常返回好友备注时,该字段才存在
}

ShareRet

分享信息

public class ShareRet extends CallbackRet{
    public String extInfo="";
    ...
}

GroupRet

群组信息

public class GroupRet extends CallbackRet{
        public int errorCode=0;
        public QQGroupInfo mQQGroupInfo ;
        public WXGroupInfo mWXGroupInfo ;
        ...
}

QQGroupInfo

Q群信息

public class QQGroupInfo{
    public String groupName=""; /*群名称 */
    public String fingerMemo="";/*群的相关简介 */
    public String memberNum=""; /*群成员数 */
    public String maxNum=""; /*该群可容纳的最多成员数 */
    public String ownerOpenid=""; /*群主openid */
    public String unionid=""; /*与该QQ群绑定的公会ID */
    public String zoneid=""; /*大区ID */
    public String adminOpenids=""; /*管理员openid。如果管理员有多个的话,用“,”隔开,例如0000000000000000000000002329FBEF,0000000000000000000000002329FAFF */
    public String groupOpenid="";  /*和游戏公会ID绑定的QQ群的groupOpenid */
    public String groupKey="";   /*需要添加的QQ群对应的key */
}

WXGroupInfo

微信群信息

public class WXGroupInfo{
    public String openIdList="";      /* 群成员openID */
    public String memberNum="";       /* 群成员数 */
    public String chatRoomURL="";     /*假如群聊URL */
}

eFlag

登录返回码

public class eFlag{
    public const int eFlag_Succ=0;
    /** QQ&QZone login fail and can't get accesstoken */
    public const int eFlag_QQ_NoAcessToken=1000;
    /** QQ&QZone user has cancelled login process */
    public const int eFlag_QQ_UserCancel=1001;

    /** QQ&QZone login fail (tencentDidNotLogin) */
    public const int eFlag_QQ_LoginFail=1002;
    /** QQ&QZone networkErr */
    public const int eFlag_QQ_NetworkErr=1003;
    /** QQ is not install */
    public const int eFlag_QQ_NotInstall=1004;
    /** QQ don't support open api */
    public const int eFlag_QQ_NotSupportApi=1005;
    /** QQ&QZone networkErr */
    public const int eFlag_QQ_AccessTokenExpired=1006;
    /** pay token 过期 时间  */
    public const int eFlag_QQ_PayTokenExpired=1007;

    /** Weixin is not installed */
    public const int eFlag_WX_NotInstall=2000;
    /** Weixin don't support api */
    public const int eFlag_WX_NotSupportApi=2001;
    /** Weixin user has cancelled */
    public const int eFlag_WX_UserCancel=2002;
    /** Weixin User has denys */
    public const int eFlag_WX_UserDeny=2003;
    public const int eFlag_WX_LoginFail=2004;
    /** Weixin 刷新票据成功 */
    public const int eFlag_WX_RefreshTokenSucc=2005;
    /** Weixin 刷新票据失败 */
    public const int eFlag_WX_RefreshTokenFail=2006;
    /** Weixin accessToken过期, 尝试用refreshtoken刷新票据中 */
    public const int eFlag_WX_AccessTokenExpired=2007;
    /** Weixin refresh也过期 */
    public const int eFlag_WX_RefreshTokenExpired=2008;

    public const int eFlag_Error=-1;

    /** 自动登录失败, 需要重新授权, 包含本地票据过期, 刷新失败登所有错误 */
    public const int eFlag_Local_Invalid=-2;

    /** 不在白名单 */
    public const int eFlag_NotInWhiteList=-3;
    /** 需要引导用户开启定位服务 */
    public const int eFlag_LbsNeedOpenLocationService=-4;
    /** 定位失败     */
    public const int eFlag_LbsLocateFail=-5;
    /** 定位失败定位开关未打开  */
    public const int eFlag_LbsNeedOpenLocationSwitch=-6;
    /** 用户未授权关系链权限   */
    public const int eFlag_UnPermission=-9;
    /** 定位超时 */
    public const int eFlag_LbsLocateTimeout=-11;

    /** 快速登陆相关返回值 */
    /**需要进入登陆页 */
    public const int eFlag_NeedLogin=3001;
    /**使用URL登陆成功 */
    public const int eFlag_UrlLogin=3002;
    /**需要弹出异账号提示 */
    public const int eFlag_NeedSelectAccount=3003;
    /**通过URL将票据刷新 */
    public const int eFlag_AccountRefresh=3004;
    /**中控相关返回值 */
    public const int eFlag_Need_Realname_Auth=3005;
    /**正在进行MSDK实名认证,请忽调用游戏自定义的实名认证界面 */
    public const int eFlag_Need_MSDK_Realname_Auth=3006;

    /** 该功能在Guest模式下不可使用 */
    public const int eFlag_InvalidOnGuest=-7;
    /** Guest的票据失效 */
    public const int eFlag_Guest_AccessTokenInvalid=4001;
    /** Guest模式登录失败 */
    public const int eFlag_Guest_LoginFailed=4002;
    /** Guest模式注册失败 */
    public const int eFlag_Guest_RegisterFailed=4003;

    /*添加正在检查token的逻辑 */
    public const int eFlag_Checking_Token=5001;
    /**正在登录中,请等待登录回调后再操作 */
    public const int eFlag_Logining=5002;
    /**正在登录中,请等待登录回调后再操作 */
    public const int eFlag_Login_Timeout=5003;
    /**调用接口太频繁 */
    public const int eFlag_RequestTooFrequently=5004;

    /**内置浏览器关闭 */
    public const int eFlag_WebviewClosed=6001;
    /**打开注销账号的url无效 */
    public const int eFlag_Invalid_Delete_Account_URL=6002;
    /**注销账号操作时未登录或渠道不支持 */
    public const int eFlag_Invalid_Login_Channel=6003;
    /**webview js给native传递参数的事件 */
    public const int eFlag_Webview_page_event=7000;
}

手Q相关:

返回码 名称 描述 推荐处理
1000 eFlag_QQ_NoAcessToken 手Q登陆失败,未获取到accesstoken 返回登录界面,引导玩家重新登录授权
1001 eFlag_QQ_UserCancel 玩家取消手Q授权登录 返回登录界面,并告知玩家已取消手Q授权登录
1002 eFlag_QQ_LoginFail 手Q登陆失败 返回登录界面,引导玩家重新登录授权
1003 eFlag_QQ_NetworkErr 网络错误 重试
1004 eFlag_QQ_NotInstall 玩家设备未安装手Q客户端 引导玩家安装手Q客户端
1005 eFlag_QQ_NotSupportApi 玩家手Q客户端不支持此接口 引导玩家升级手Q客户端
1006 eFlag_QQ_AccessTokenExpired accesstoken过期 返回登录界面,引导玩家重新登录授权
1007 eFlag_QQ_PayTokenExpired paytoken过期 返回登录界面,引导玩家重新登录授权

微信相关:

返回码 名称 描述 推荐处理
2000 eFlag_WX_NotInstall 玩家设备未安装微信客户端 引导玩家安装微信客户端
2001 eFlag_WX_NotSupportApi 玩家微信客户端不支持此接口 引导玩家升级微信客户端
2002 eFlag_WX_UserCancel 玩家取消微信授权登录 返回登录界面,并告知玩家已取消微信授权登录
2003 eFlag_WX_UserDeny 玩家拒绝微信授权登录 返回登录界面,并告知玩家已拒绝微信授权登录
2004 eFlag_WX_LoginFail 微信登录失败 返回登录界面,引导玩家重新登录授权
2005 eFlag_WX_RefreshTokenSucc 微信刷新票据成功 获取微信票据,登录进入游戏
2006 eFlag_WX_RefreshTokenFail 微信刷新票据失败 返回登录界面,引导玩家重新登录授权
2007 eFlag_WX_AccessTokenExpired 微信accessToken过期 尝试用refreshtoken刷新票据
2008 eFlag_WX_RefreshTokenExpired 微信refreshtoken过期 返回登录界面,引导玩家重新登录授权

异账号相关:

返回码 名称 描述 推荐处理
3001 eFlag_NeedLogin 游戏本地账号和拉起账号均无法登陆 返回登录界面,引导玩家重新登录授权
3002 eFlag_UrlLogin 不存在异账号,游戏通过拉起账号快速登陆成功 读取LoginRet结构体中的票据进行游戏授权流程
3003 eFlag_NeedSelectAccount 游戏本地账号和拉起账号存在异账号 弹出对话框让用户选择登陆的账号
3004 eFlag_AccountRefresh 不存在异账号,MSDK已通过刷新接口将本地账号票据刷新 读取LoginRet结构体中的票据进行游戏授权流程

手QQ群(v2)相关:

返回码 描述 推荐处理
221001 已绑定群 无需处理
221002 未绑定群 无需处理
221003 绑群回包错误 无需处理
221004 获取uin和tskey失败 检查登录态是否正确
221005 当前用户不是群主 无需处理
221006 无效的openid 检查openid是否有效
221007 参数无效 检查接口参数,如appid,guild_id,zone_id,gc等等,具体请参考接口参数列表
221008 无接口调用权限 参照权限管理申请权限
-182001 请求群后台cgi失败 无需处理
-182002 操作cmem失败 无需处理
-182003 创建群失败 无需处理
-182004 查询群失败 无需处理
-182005 openid转uin失败 无需处理
-182008 查询idip失败 无需处理
-500003~-500009 解析服务返回数据失败 无需处理
-120000 登录态校验失败 检查登录态是否有效

微信群(创建群,解绑群)相关:

返回码 描述 推荐处理
-1 系统错误 重试一次,若失败请通过企业QQ(800013811)联系移动网游MSDK技术支持人员。
-10000 内部错误 游戏没有在开平开通创建群的权限。
-10001 该游戏没有建群权限 游戏没有在游戏中心开通创建群的权限。
-10002 参数检查错误 确认参数准确性,若失败请通过企业QQ(800013811)联系移动网游MSDK技术支持人员。
-10003 链接不存在(与群无关)
-10004 获取跳转链接失败(与群无关)
-10005 群ID已存在 不要重复建群
-10007 群ID不存在 换一个存在的群ID
-10008 群ID不可用
-10009 用户不在群里
-20001 解绑群达到上限 解绑群不能超过20个
-20002 用户创建群达到上限
-201608 kv读失败 联系微信相关接口人员
-201609 kv写失败 联系微信相关接口人员

微信群(创建群,解绑群)2.18.0以后版本使用,此错误码anroid和ios是统一的相关:

返回码 描述 推荐处理
-1 系统错误 重试一次,若失败请通过企业QQ(800013811)联系移动网游MSDK技术支持人员
2009 没有建群权限 找产品人员开通权限
2010 参数检查错误
2011 微信群已经存在
2012 建群或者解绑群数量超过上限,一个用户建群或者解绑群不能超过20个
2013 群ID不存在
2014 当天建群数量超限 换个id创建
2015 加群数量超限 可更换其他账号验证

其他

返回码 名称 描述 推荐处理
0 eFlag_Succ 成功 按照接口的成功逻辑处理
-1 eFlag_Error 错误 按照接口的默认错误处理方法处理
-2 eFlag_Local_Invalid 账号自动登录失败, 包含本地票据过期, 刷新失败等所有错误 返回登录界面,引导玩家重新登录授权
-3 eFlag_NotInWhiteList 玩家账号不在白名单中 提示玩家未抢号,引导玩家进入应用宝抢号
-4 eFlag_LbsNeedOpenLocationService 游戏所需的定位服务未开启 引导用户开启定位服务
-5 eFlag_LbsLocateFail 游戏定位失败 提示玩家定位失败,需重试
3005 eFlag_Need_Realname_Auth 游戏需要实名认证 暂停游戏对msdk登陆的超时处理

eQQScene

手Q场景枚举

public enum eQQScene{
    QQScene_None=0,
    QQScene_QZone=1, //QQ空间
    QQScene_Session=2 //手Q会话
}

eWechatScene

微信场景枚举

public enum eWechatScene{
    WechatScene_Session=0, //微信会话
    WechatScene_Timeline=1 //微信朋友圈
}

ePlatform

平台枚举

public enum ePlatform{
    ePlatform_None=0, //未登录
    ePlatform_Weixin=1, //微信平台
    ePlatform_QQ=2, //手Q平台
    ePlatform_WTLogin=3, //WTLogin登录
    ePlatform_QQHall=4, //手Q游戏大厅
    ePlatform_Guest=5, //游客登录
    ePlatform_Auto=6 //自动登录,使用上一次平台
    ePlatform_WeixinVideoLive=8 //微信视频号登录
}

NoticeInfo

公告信息

public class NoticeInfo{
    public String msg_id; /* 公告id */
    public String open_id; /* 用户open_id */
    public String msg_url ; /* 公告跳转链接 */
    public int msg_type ; /* 公告展示类型,滚动弹出 */
    public String msg_scene ; /* 公告展示的场景,管理端后台配置 */
    public String start_time; /* 公告有效期开始时间 */
    public String end_time ; /* 公告有效期结束时间 */
    public String update_time ; /* 公告更新时间 */
    public int content_type;/* 公告内容类型,eMSG_CONTENTTYPE */
    public int msg_order;/*公告优先级 */

    /*文本公告特殊字段 */
    public String msg_title ; /* 公告标题 */
    public String msg_content;/* 公告内容 */

    /*网页公告特殊字段 */
    public String content_url;
    public Vector<PicInfo> picArray=new Vector<PicInfo>();

    /*自定义参数*/
    public String mNoticeCustom="";
}

上报日志到bugly的日志级别

eBuglyLogLevel

public enum eBuglyLogLevel{
    eBuglyLogLevel_S=0, /* Silent */
    eBuglyLogLevel_E=1, /* Error */
    eBuglyLogLevel_W=2, /* Warnning */
    eBuglyLogLevel_I=3, /* Info */
    eBuglyLogLevel_D=4, /* Debug */
    eBuglyLogLevel_V=5, /* Verbose */
 }

eApiName

public enum eApiName{
    eApiName_WGSendToQQWithPhoto=0,
    eApiName_WGJoinQQGroup=1,
    eApiName_WGAddGameFriendToQQ=2,
    eApiName_WGBindQQGroup=3
}

eStatusType

public enum eStatusType{
    ISCREATED=0,
    ISJONINED=1
}

eRelationRetType

public enum eRelationRetType{
    eRet_QueryMyInfo=0,
    eRet_QueryGameFriends=1
}

LocalMessageIOS

public class LocalMessageIOS{
    public String fireDate { get; set; }        /*本地推送触发的时间,格式yyyy-MM-dd HH:mm:ss */
    public String alertBody { get; set; }       /*推送的内容 */
    public int badge { get; set; }              /*角标的数字 */
    public String alertAction { get; set; }     /*替换弹框的按钮文字内容(默认为"启动") */
    public List<KVPair> userInfo { get; set; }  /*自定义参数,可以用来标识推送和增加附加信息 */
    public String userInfoKey { get; set; }     /*本地推送在前台推送的标识Key */
    public String userInfoValue { get; set; }   /*本地推送在前台推送的标识Key对应的值 */

    public LocalMessageIOS(){
        fireDate="";
        alertBody="";
        alertAction="";
        userInfoKey="";
        userInfoValue="";
    }
}

LocalMessageAndroid

public class LocalMessageAndroid{
    public int type { get; set; }                   /* 消息类型type: 1:通知,2:消息 */
    public int action_type { get; set; }            /* 动作类型,1打开activity或app本身,2打开浏览器,3打开Intent ,4通过包名打开应用。默认为1 */
    public String title { get; set; }               /* 消息标题title: 消息标题 */
    public String content { get; set; }             /* 消息内容content 消息內容 */
    public String custom_content { get; set; }      /* 消息自定义内容 */
    public int icon_type { get; set; }              /* 通知栏图标是应用内图标还是上传图标(0是应用内图标,1是上传图标,默认0) */
    public int lights { get; set; }                 /* 是否呼吸灯(0否,1是,默认1) */
    public int ring { get; set; }                   /* 是否响铃(0否,1是,默认1) */
    public int vibrate { get; set; }                /* 是否振动(0否,1是,默认1) */
    public int style_id { get; set; }               /* Web端设置是否覆盖编号build_id的通知样式,默认1,0否,1是 */
    public long builderId { get; set; }             /* 消息样式,默认为0或不设置 */
    public String activity { get; set; }            /* 打开指定Activity,例如:com.qq.xgdemo.AboutActivity。当动作类型为1或4时有效 */
    public String packageDownloadUrl { get; set; }
    public String packageName { get; set; }         /* 拉起其他应用的包名,当动作类型为4时有效 */
    public String icon_res { get; set; }            /* 应用内图标文件名(xg.png)或者下载图标的url地址,例如:xg或者图片url */
    public String date { get; set; }                /* 弹出通知的日期,格式为”yyyyMMdd” */
    public String hour { get; set; }                /* 弹出通知的日期的小时数 */
    public String min { get; set; }                 /* 弹出通知的日期的分钟数 */
    public String intent { get; set; }              /* 设置打开intent,例如(10086拨号界面)intent:10086#Intent;scheme=tel;action=android.intent.action.DIAL;S.key=value;end当动作类型为3时有效 */
    public String url { get; set; }                 /* 打开url,例如:http://www.qq.com。当动作类型为2时有效 */
    public String ring_raw { get; set; }            /* 指定应用内的声音(ring.mp3),例如:ring */
    public String small_icon { get; set; }          /* 指定状态栏的小图片(xg.png),例如:xg */

    public LocalMessageAndroid(){
        type=1;
        action_type=-1;
        icon_type=-1;
        lights=-1;
        ring=-1;
        vibrate=-1;
        style_id=-1;
        builderId=-1;
        content="";
        custom_content="";
        activity="";
        packageDownloadUrl="";
        packageName="";
        icon_res="";
        date="";
        hour="";
        intent="";
        min="";
        title="";
        url="";
        ring_raw="";
        small_icon="";
    }
}

GetCountryFromIPRet

typedef struct
{
    int ret;                        // 查询结果flag, 0为成功
    std::string msg;                // 描述
    std::string country;            // 国家
    bool isQueryByRequestHeader;    // 标志是否请求头查询
} GetCountryFromIPRet;

GetIPInfoRet

typedef struct
{
    int ret;                        //查询结果flag, 0为成功
    int country_no;                 //国家编号
    int province_no;                //省份编号
    int city_no;                    //城市编号
    std::string msg;                //描述
    std::string country;            //国家
    std::string province;           //省份
    std::string city;               //城市
    bool isQueryByRequestHeader;    //标志是否请求头查询
} GetIPInfoRet;