魅族SDK接入

今天老大让我接魅族的SDK,拿过资料后我大概扫视了一下接入手册,基本上都是一个套路.所以就没有再细看了.

我拿到手的就是

第一个不我想不用我说你们都知道是什么了,它就是魅族的jar了,需要放入U3D工程里面和你所做的JAR插件里面,然后第二个就是一个魅族的框架程序,魅族有个操蛋的地方就是要使用它的SDK就必须安装这个框架程序.刚开始因为没有注意文档上的说明 ,没有把他放到assets目录下导致使用不了魅族SDK,登录框直接调用不起来,然后放入后,当你安装你的游戏后启动后会提升你安装魅族框架类,然后它就会去找那个APK文件自动安装了.

后面那个压缩包就是他们的DEMO了,我是比较热衷于看DEMO的因为我觉得DEMO里面包括了你想知道的所有东西.所以当我扫视完文档后我直接就打开了它们的程序,发现里面的结构还是很清晰简单的.用eclipse 打开后编译了一个APK出来后安装在手机里面运行了一下,我接SDK有个特点就是我首先要保证它们给的DEMO是可以运行的,并且出于好奇心我也想看看它们的界面和功能是怎样的.所以迫不及待的就安装运行了,发现 上面就一个登录  和支付按钮.然后按是直接弹出登录框,支付是支付选项.然后我看了一下代码的结构 发现它的初始化写在了Application里面,调用是写在了主Activity里面.

然后我就按照他的结构在我的JAR里面继承自APPlication的类里面

初始化了魅族的 平台的SDK

// TODO 游戏初始化时,初始化参数
MzGameCenterPlatform.init(this, GAME_ID, GAME_KEY);

首先 GAME_ID和GAME_KEY是你申请SDK是魅族提供给你的.demo上面这2个参数的定义是写在另一个类中的,我觉得完全没有必要我就直接写在了我初始化的地方了.

然后我在我的JAR里面创建了一个新的类用来专门调用魅族SDK的登录和支付,首先是魅族悬浮窗的实例化  可在主Activity初始化时调用

mzGameBarPlatform = new MzGameBarPlatform(this, MzGameBarPlatform.GRAVITY_RIGHT_BOTTOM);

然后是 定义一个魅族登录的函数  直接按照demo那样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
private void login(){
  // TODO 调用登录接口
  MzGameCenterPlatform.login(MainActivity.this, new MzLoginListener() {
  @Override
  public void onLoginResult(int code, MzAccountInfo accountInfo, String errorMsg) {
  // TODO 登录结果回调,该回调跑在应用主线程
  switch (code){
  case LoginResultCode.LOGIN_SUCCESS:
  // TODO 登录成功,拿到uid 和 session到自己的服务器去校验session合法性
 
//以下信息需要在U3D中登录使用;
  //displayMsg("登录成功!\r\n 用户名:" + accountInfo.getName() + "\r\n Uid:" + accountInfo.getUid() + "\r\n session:" + accountInfo.getSession());
  UnityPlayer.UnitySendMessage(_objectName,_methodName, "登录成功@" +mUid+ "@" +accountInfo.getSession());
  break ;
  case LoginResultCode.LOGIN_ERROR_CANCEL:
  // TODO 用户取消登陆操作
  break ;
  default :
  // TODO 登陆失败,包含错误码和错误消息。
  // TODO 注意,错误消息需要由游戏展示给用户,错误码可以打印,供调试使用
  displayMsg( "登录失败 : " + errorMsg + " , code = " + code);
  break ;
  }
  }
  });
  }

需要注意的是 当你调用登录框并且成功登录魅族的时候 这个时候你需要把魅族的账户密码返回到游戏中然后再登录游戏这样才算是从魅族的登录窗口登录你的游戏了 所以 UnityPlayer.UnitySendMessage(_objectName,_methodName,"登录成功@"+mUid+"@"+accountInfo.getSession());   这一句是很重要的 这个函数方法的意思是 返回给U3D的东西,第一个参数是 返回给U3D的对象名,这个对象名称其实就是当你调用SDK时 从U3D中传过来的,现在就是要把从U3D中传过来的东西再传回去,第二个是U3D中传过来的方法名称 这个名称是当U3D收到SDK返回的信息 时就调用这个函数方法然后最后一个字符串参数就是这个方法的参数,由于我要得到多个参数,所以我使用了@符号做分割返回到U3D时我再解析出来然后用来在游戏中注册账户.比如我使用了魅族的UID和它的Session作为游戏的账号和密码.

然后剩下的支付也是一样的意思 直接复制DEMO上的代码往上贴,但是需要注意的是有些函数在U3D中是不支持的比如

progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.setMessage("请稍等...");
progressDialog.setCancelable(true);
progressDialog.setCanceledOnTouchOutside(false);
progressDialog.show();

这么一段在U3D中就会报错,可能我没有引入相应的类库吧.所以当时我把它删除了因为我发现它并没有什么卵用.做后就是 需要在你支付成功或失败的地方 返回给U3D一个信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre>
private void startPay(MzBuyInfo buyInfo){
 
MzGameCenterPlatform.payOnline(activity, buyInfo, new MzPayListener() {
  @Override
  public void onPayResult(int code, MzBuyInfo info, String errorMsg) {
  // TODO 支付结果回调,该回调跑在应用主线程
  switch (code){
  case PayResultCode.PAY_SUCCESS:
  // TODO 如果成功,接下去需要到自己的服务器查询订单结果
  //displayMsg("支付成功 : " + info.getOrderId());
  UnityPlayer.UnitySendMessage(_objectName, _methodName, "支付成功" );
  break ;
  case PayResultCode.PAY_ERROR_CANCEL:
  // TODO 用户取消支付操作
  UnityPlayer.UnitySendMessage(_objectName, _methodName, "支付取消" );
  break ;
  default :
  // TODO 支付失败,包含错误码和错误消息。
  // TODO 注意,错误消息需要由游戏展示给用户,错误码可以打印,供调试使用
 
//displayMsg("支付失败 : " + errorMsg + " , code = " + code);
  UnityPlayer.UnitySendMessage(_objectName, _methodName, "支付失败" + errorMsg + " , code = " + code);
  break ;
  }
  }
  });
  }

最后我把我接入成功的 图片给大家看欣赏一下,如果有什么问题可以加我QQ哦

发布了22 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/a13677972680/article/details/49816575