1. 接入前项目检查 根据游戏接入后出现的问题, 对游戏项目做以下几点要求 : a) AndroidManifest.xml 中 android:targetsdkversion="19" b) 如果 AndroidManifest.xml 有 installlocation 选项时, 参数设置为 auto c) AndroidManifest.xml 中的 Activity 需要进行如下配置 android:configchanges="keyboardhidden orientation screensize" d) 根据游戏的横竖屏, 将 activity 做横竖屏设置 android:screenorientation="landscape" android:screenorientation="portrait" e) AndroidManifest.xml 中的 Activity 等组件路径为完整路径 2. 接入流程 2.1 添加资源 下载 SDK 资源, 将 files 文件夹下的文件 assets libs 和 res 拷贝到项目对应的文件夹中 2.2 修改 AndroidManifest 添加权限 <uses-permission android:name="android.permission.internet"/> <uses-permission android:name="android.permission.access_network_state"/> <uses-permission android:name="android.permission.read_phone_state"/> <uses-permission android:name="android.permission.write_external_storage"/> 添加 Application 在 AndroidManifest.xml 中的 Application 节点, 修改 android:name 属性值为 com.zmapp.mzsdk.mzapplication 如果游戏有自己的 Application 需求, 需要在 Application 的生命周期方法中做一些操作 可以实现 IApplicationListener 里面的接口 添加 meta-data <meta-data android:name="mz_app_id" android:value=" 联系商务 ( 不填或者错误无法获取登陆信息 )" /> 2.3 生命周期处理 protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); com.zmapp.mzsdk.mzsdk.getinstance().oncreate(); protected void onstart() { super.onstart(); com.zmapp.mzsdk.mzsdk.getinstance().onstart();
protected void onrestart() { super.onrestart(); com.zmapp.mzsdk.mzsdk.getinstance().onrestart(); protected void onpause() { super.onpause(); com.zmapp.mzsdk.mzsdk.getinstance().onpause(); protected void onresume() { super.onresume(); com.zmapp.mzsdk.mzsdk.getinstance().onresume(); protected void onstop() { super.onstop(); com.zmapp.mzsdk.mzsdk.getinstance().onstop(); protected void ondestroy() { super.ondestroy(); com.zmapp.mzsdk.mzsdk.getinstance().ondestroy(); protected void onnewintent(intent intent) { super.onnewintent(intent); com.zmapp.mzsdk.mzsdk.getinstance().onnewintent(intent); protected void onactivityresult(int requestcode, int resultcode, Intent data) { super.onactivityresult(requestcode, resultcode, data); com.zmapp.mzsdk.mzsdk.getinstance().onactivityresult(this, requestcode, resultcode, data); 2.4 SDK 初始化设置 2.4.1 设置初始化回调接口 MZSDK.getInstance().setSDKInitListener(new IMZSDKInitListener() { public void oninitsuccess(final InitResult result) { public void oninitfail(final int code, final String msg) {
//code: 初始化失败错误码,msg: 初始化失败错误信息 ); 2.4.2 设置用户回调接口 MZSDK.getInstance().setSDKUserListener(new IMZSDKUserListener() { public void onloginfail(final int code, final String msg) { //code: 登录失败错误码,msg: 登录失败错误信息 public void onloginsuccess(final String userinfojsonstr) { // 登录成功,userInfoJSonStr 参数说明参照下面表格 public void onswitchaccount() { public void onswitchaccount(final String userinfojsonstr) { // 切换账号成功,userInfoJSonStr 参数说明参照下面表格 public void onlogout() { ); userinfojsonstr 是返回的用户信息, 是 JSON 字符串格式 : status 0 表示成功获取到了用户信息, 其它值都为失败 userdata uid t sign 用户唯一码时间戳, 数字字符串校验方法是 :sign=md5(secret_key=1&t=2&uid=3), 参数首字母升序排列,md5 是 32 小写 2.4.3 设置支付回调接口 MZSDK.getInstance().setSDKPayListener(new IMZSDKPayListener() { public void onpaysuccess(final PayResult result) { // 支付成功 // 道具计费点编号 : result.getproductid() // 道具名称 : result.getproductname() // 透传字符串 :result.getextension() public void onpayfail(final int code, final String msg) {
//code: 支付失败错误码,msg: 支付失败错误信息 ); 接入要求 : 客户端的支付回调仅作为通知使用, 以服务端的支付回调为最终发货依据 2.5 SDK 接口调用 接入要求 :SDK 的接口需在 UI 主线程下调用 2.5.1 SDK 初始化 类名 :com.zmapp.mzsdk.mzsdk 方法 :public void init(activity activity) 功能 : 渠道 SDK 初始化参数 :activity 必填当前 Activity 案例 : com.zmapp.mzsdk.mzsdk.getinstance().init(activity); 接入要求 : 初始化接口, 应在 Activity 中 oncreate 方法中调用 2.5.2 登录 方法 :public void login() 功能 : 渠道 SDK 登录案例 : com.zmapp.mzsdk.mzuser.getinstance().login(); 2.5.3 支付 类名 :com.zmapp.mzsdk.mzpay 方法 :public void pay() 功能 : 渠道 SDK 支付参数 :params 必填订单信息案例 : PayParams params = new PayParams(); params.setproductid("1");//productid params.setproductname(" 道具 1");//productName params.setproductdesc(" 道具 1 的描述 ");//productdesc params.setprice(100);//price params.setratio(1);//ratio params.setservername(" 服务器 1");//serverName params.setserverid("123");// 数字字符串 params.setroleid("123456");// 数字字符串 params.setrolename(" 速易大侠 ");// 角色名称 params.setrolelevel(100);// 角色等级 params.setvip("0");// 默认值是 0 params.setextension(" 透传参数 "); params.setcheck(" 服务端生成签名 "); MZPay.getInstance().pay(params); 支付信息参数 PayParams 的格式说明 : 字段类型是否必填说明
productid String 是 道具计费点编号, 数字字符串 productname String 是 道具名称 productdesc String 否 道具描述 price int 是 道具价格, 单位为分 servername String 是 服务器名称 serverid String 是 服务器编号, 数字字符串 roleid String 是 角色编号, 数字字符串 rolename String 是 角色名称 rolelevel int 否 角色等级 VIP String 否 角色 VIP 等级 extension String 否 透传字符串, 支付回调会原样返回给游戏 check String 是 check=md5(fee+feeid+seceret_key), 其中 md5 为小写, + 不参与加密 注意加密必须在服务端完成 check 生成示例 :fee=600, feeid=123,secret_key=abcde123456,check =31a482a2b53dde3bdb30815b6af79b72 2.5.4 注销 方法 :public void logout() 功能 : 渠道 SDK 登录案例 : com.zmapp.mzsdk.mzuser.getinstance().logout(); 2.5.5 退出 方法 :public void exit() 功能 : 渠道 SDK 退出案例 : MZPay.getInstance().pay(params); if (MZUser.getInstance().isSupport("exit")) { MZSDK.getInstance().runOnMainThread(new Runnable() { public void run() { MZUser.getInstance().exit(); ); else { // 游戏自己的退出确认框 2.5.6 角色信息上报 方法 :public void exit()
功能 : 渠道 SDK 角色信息上报案例 : UserExtraData extradata = new UserExtraData(); extradata.setdatatype(1); extradata.setserverid(10); extradata.setservername("server_10"); extradata.setroleid("role_100"); extradata.setrolename("test_112"); extradata.setrolelevel("10"); extradata.setmoneynum(100); extradata.setpartyname(" 帮派 "); extradata.setrolectime("1510759822"); extradata.setrolelevelmtime("1510771935"); MZUser.getInstance().submitExtraData(extraData); 角色信息参数表 : UserExtraData 字段 类型 是否必填 说明 datatype int 是 1. 选择服务器 2. 创建角色 3. 进入游戏 4. 等级提升 5. 退出游戏 serverid int 是 服务器 ID servername String 是 服务器名称 roleid String 是 角色 ID rolename String 是 角色名称 rolelevel String 是 角色等级 fightvalue String 是 战力值 moneynum int 否 游戏币 partyname String 否 所在帮派名称 rolecreatetime String 否 角色创建时间,10 位整数字符串, 秒为单位, 格式参照 http://tool.chinaz.com/tools/unixtime.aspx?qq-pf-to=pcqq.group rolelevelmtime String 否 角色升级时间,10 位整数字符串, 秒为单位, 格式参照 http://tool.chinaz.com/tools/unixtime.aspx?qq-pf-to=pcqq.group gender String 否 角色性别, 可传 男 女 无 professionid 否 职业 ID profession String 否 职业名称 VIP 否 VIP 等级 partyid 否 所在帮派 ID partyname String 否 所在帮派名称 partyroleid 否 帮派称号 id partyrolename String 否 帮派称号名称 friendlist String 否 角色相互关系, 例如 [{"roleid": " 关系角色 id","intimacy": " 亲密度 ", "nexusid": " 关系 id, 可填数字 1: 夫妻 2: 结拜 3: 情侣 4: 师徒 5: 仇人 6: 其它 " ] 接入要求 : SDK 会根据渠道不同进行上报, 渠道存在不上报不给上线情况, 如果个别参数没有传空值, 建议都传值
3. 其它 3.1 关于混淆 SDK 已经经过了混淆, 如果要混淆 java 代码, 请不要混淆联编的 jar 包中的类 可以添加以下类到 proguard 配置, 排除在混淆之外 : -keep class com.zmapp.** { *;