Untiy 接入 移动MM 详解
原地址:http://www.cnblogs.com/alongu3d/p/3627936.html
Untiy 接入 移动MM 详解
第一次接到师傅的任务(小龙),准备着手写untiy接入第三方SDK的文章(android 方向),第一次写故而写的不好的地方不要吐槽。如有兴趣可加63438968(untiy 开发群)进行探讨。
本文主要已 unity 和android工程为基础进行解析分析。其次因目前各地sdk平台与unity程序有不兼容问题,故而导致了在发布后会缺少文件。本文也提供了一个解决方案供大家参考。
具体工程可加群63438968 进行下载。如有美术人员可加 185762832
20140324 熊熊家族-树袋熊宗宗Boss
一eclipse
1.1 在接到接入哪家平台之后,首先做的第一件事,是登录到这个平台官网,下载最新的SDK,按照开发文档内容进行查找,找到哪段代码是对应的什么方法。并新建工程,写成自己的方法。以下已移动MM(2.3.0) 为例做介绍。
移动MM官网 http://dev.10086.cn/iap/?action=down&areaid=1354082900
开发文档在工程内
1.2 下载完成之后,打开移动MM 的demo。放在android手机上,先进行了解,并将demo中的 对应的代码找出来。
1.3 确定之后就可以写自己的工程了。接入工程有几个地方需要注意,首先是jay包 ,jay包即是第三方平台的jay包如图所示:
其中 armeabi mmBilling.2.3.0.jar是移动MM平台必须放入的(在下载的SDK内会找到),android-support-v4.jay是android工程自动生成的。
Unit-classes.jar(在unity引擎内可以找到,如果找不到就直接搜索classes.jar即可)是 unity的jay包
备注:导入方式除了正常的拖拽到libs内 ,也可以在Properties-Java Build Path-Libraries-点击“Add JARs…”按钮,在弹出窗口中,选中jar文件,但此方法是按照绝对路径,故如果工程换位置的话,会导致查找不到jar。故而不建议采取此方法。如图
1.4 添加完成jar之后就需要 在配置文件AndroidManifest.xml中添加必要的声明文件。如图:(如果需要可在demo中查找到)
备注:以上是前期准备工作,具体的APPID、APPKEY、PAYCODE,以及硬件计费软件计费等参数。可登录到官网注册并且开发应用即可获取相应的参数。
1.5 准备好了就可以进行开发了。以下内容指示做举例 并不一一将代码展现出来。
1.5.1 第一 ,需要将主activity 继承 UnityPlayerActivity
备注:UnityPlayerActivity 是继承自activity的
1.5.2 准备接入。已初始化为例:
private String mAPPID = "000000000000";
private String mAPPKEY = "0000000000000000";
public void Init(String APPID,String APPKEY){
mAPPID=APPID;
mAPPKEY=APPKEY;
Log.i("ZD", "appid"+mAPPID+"appkey"+mAPPKEY);
runOnUiThread(new Runnable() {
@Override
public void run() {
IAPHandler iapHandler = new IAPHandler(myActivity);
mPaycode = readPaycode();
mProductNum = readProductNUM();
mListener = new IAPListener(myActivity, iapHandler);
purchase = Purchase.getInstance();
try {
purchase.setAppInfo(mAPPID, mAPPKEY);
} catch (Exception e1) {
e1.printStackTrace();
}
try {
purchase.init(myActivity, mListener);
} catch (Exception e) {
e.printStackTrace();
return;
}
}
});
}
备注:
mAPPID ,mAPPKEY 需要在unity内传参过来。
因unity 掉sdk平台代码,会使用主线程,并修改UI,但大部分在修改主UI的时候会出现致命错误,故而需要添加在子线程中。添加子线程现在总结了三种方法,供大家参考。
其一:runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
}
});
其二:private Handler myHandler=new Handler()
{
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
break;
default:
break;
}
}
};
myHandler.sendEmptyMessage(0);
其三:
new Handler(Looper.getMainLooper()).post(new Runnable(){
@Override
public void run(){
}});
以上三种方式都可实现在子线程 完成逻辑处理。具体看哪个用的上手就用那个 并不统一。
1.6 在完成所有接入之后 就需要写回调 方法了。而返回给unity 需要使用到
UnityPlayer.UnitySendMessage(Deductiontomonitor, DeductionSuccess, result);备注: 里面三个参数都是string 格式,如需要传回其他类型可进行转换即可。
第一个参数 :untiy内GameObject物体的名称 如图 如我unity工程内需要处理逻辑的物体名称是GameObject则将Deductiontomonitor改成GameObject即可。
第二个参数: GameObject 物体内所挂方法名
第三个参数: result 是返回的参数,根据需要传递不同参数。
1.7 android工程在将方法都写好之后 ,就需要打包jay。步骤如下:
工程右键-export - JAR file -next-Browse(选择存放的路径)-finish即可
备注:以上是android工程 ,具体代码加群在群共享内。
二、Unity
2.1 新建unity工程,并在工程内新建文件 文件名必须是Plugins(untiy启动顺序此为第三启动顺序,如果其他文件untiy是在初始化的时候是不访问的)在Plugins内创建文件Android也就是android插件 。然后添加文件如图:
添加四个文件 :配置文件 、 bin(android 打包的jay)、libs( 第三方平台的sdk的jay包) res(资源文件) 其他无用的 就都删掉,避免出现未知问题。
2.2 将unity 修改成 android工程
画了四个横线
第一是发布之后公司的名称
第二是发布之后应用的名称
第三是android工程的包名,必须一致,否则会出问题。如果不知道可打开AndroidManifest内找:
第四是 包含两个参数 一个是ARMv7 ARMv6 其中ARMv6是低端机的意思,目前在 untiy版本3.5.6内还存在,更高版本此选项已无。 对于低端机 如果不选择ARMv6而发布android应用,在低端机是无法运行的。
2.3 以上是 unity的准备工作,做好之后 就可以写unity掉android的代码了
同样只是举例,具体代码 请在群共享内下载
备注: using 是c#的方法,这个方法非常有用 在using ()中新建的对象,会在{}结束的时候自动关闭和释放,不需要你手动进行。
其一:AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer")
androidJavaClass英文直意 安卓java类。括号内的
com.unity3d.player.UnityPlayer 代表android工程的路径com.unity3d.player.UnityPlayer 是总的路径意思,
如果修改 可以修改成 android 的包名+类名也是可以的 例如
则可以将com.unity3d.player.UnityPlayer 修改成
Com.example.ydmmtext.Demo
其二: AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity")
AndroidJavaObject androidJava物体的名称 可以进行指定,如:在初始化的时候进行指向
myactivity=UnityPlayer.currentActivity;
写的不太好,如有兴趣可访问
http://www.cnblogs.com/U-tansuo/archive/2013/03/13/unity3d_android_2.html
内有 介绍
其三
jo.Call("Init",APPID,APPKEY);
意思是访问android工程 内的Init 方法,并传递两个参数 。
Android工程对于代码
这样就可以使 unity 访问 android工程。
2.4 回调:在很多时候 unity调用android之后 还需要android返回给unity信息,如支付之后,用户是 支付成功、支付失败、还是支付取消。都需要返回给unity,并进行相应逻辑处理。
2.4.1 在android工程内
而unity对应的代码是
这样即可实现 android 回调unity
2.5 写完 调用和回调方法之后。在给大家分享一个工厂代码,即方便unity 代码之间的调用,如图:
如进行调用的话,直接 YDMM.Instance.Init(appId,appkey); 即可
2.6 写完之后即可进行发布了。但在发布的时候 经常会出现 无法发布APK的问题,这种问题多为 bin libs res这三个文件导致,不是多放文件就是少放文件了。导致资源找不到等问题。多注意 多看各个平台的开发文档即可。
三 、 在发布出去APK后 也算是大功告成了。但有的sdk平台 如移动MM 、多盟、百度移动联盟、都有兼容问题,即在APK根目录下该有的文件并未自动生成,而这时候就需要自己手动添加了。 如何找到缺少文件呢,这时可以打开对应的SDK平台 找到demo 这demo工程内会有eclipse自动生成的APK 。将他的后缀改成zip 即可发现缺少的文件 如图:
改成zip之后打开会发现根目录多了 一些文件,而unity发布之后的apk并没有
这时 就需要手动将缺少的文件 拷贝到自己的apk里头。
3.2 添加以后 还并未操作完成,因android有自己的签名系统,平白的给这签名里头加东西,会导致手机不认识这个程序,故而在添加完成之后 还需要将添加后的APK 进行 重新签名,签名软件有很多。不做过多介绍。在本群内 会提供一个签名软件,供大家使用。
备注: 移动MM 在全部接入完成之后,可以在移动MM平台进行发布,但在发布的时候会遇到无法上传的问题,本人在发布的时候也遇到该问题,后来换了个浏览器解决了该问题。如有类似问题这样操作即可。
四、 以上是移动MM 的接入。以下是日后 更新内容
4.1 如有不会的可在群内进行发问咨询
4.2 以上内容包含了 广告、短信支付、内支付后续会逐步更新完善,另外像广大群友咨询如何更好的接入多家SDK平台。目前这块不是很熟悉。同时接入8家SKD ,但是是进行一一整合的,很不方便管理。寻求网友出教学,简化接入方法。以下是联系方式以及各大平台sdk的链接地址:
开发群号:63438968 博客地址:http://www.cnblogs.com/alongu3d/
设计师群: 185762832
雨松momo 博客地址:http://www.xuanyusong.com/ 第18 和19片如果是初学者建议看一下。
Tapjoy_SDK |
|
有米广告 |
http://www.youmi.net/apps/sdk |
Google Admob |
https://developers.google.com/mobile-ads-sdk/docs/dfp/fundamentals#play |
艾德思奇 |
|
移动游戏基地 |
|
电信爱游戏 |
版本需要找客服要 |
Google Play 内支付 |
|
Domob 多盟 广告 |
|
Domob 多盟 积分墙 |
|
新浪微博 |
|
微信SDK |
|
联通VAC |
需要找接口人 |
机锋支付 |
|
360手机网游SDK |
|
百度移动联盟广告 |
|
百度移动联盟积分墙 |
|
移动MM |
|
米迪 |
|
SmartMad亿动智道 |
|
91SDK |
|
UCsdk |
Untiy 接入 移动MM 详解的更多相关文章
- EasyNVR摄像机无插件直播进行摄像机云台控制的接入及调用详解
EasyNVR云台接入及控制详解 摄像机云台控制在摄像机当中很常见摄像机能将当前状态下云台的水平角度.倾斜角度和摄像机镜头焦距等位置参数存储到设备中,需要时可以迅速调用这些参数并将云台和摄像头调整至该 ...
- CISCO 双线接入MAP配置详解
随着我国宽带技术的普及,各个公司都会有一至二条Internet接入线路,这些线路可能由电信.网通.长宽.联通等不同的IS提供,尽管他们在局端采用的技术可能有不同,但对客户而言都是同样接入方式,以太 ...
- 无需开发,IT事件接入钉钉的方法详解
1.市场在拥抱钉钉 虎嗅8月30日发表了一篇文章<为什么有很多企业沉迷钉钉无法自拔>,有兴趣的可以去看看,下附文章链接. 文章不短,其中有一部分阐述了:钉钉抓住以人为核心的"智能 ...
- ASP.NET ViewState详解
ASP.NET ViewState详解[转载] 作者:Infinities Loop 概述 ViewState是一个被误解很深的动物了.我希望通过此文章来澄清人们对ViewState的一些错误认识.为 ...
- Dubbo配置方式详解
Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是阿里巴巴 SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次 ...
- Java网络编程和NIO详解3:IO模型与Java网络编程模型
Java网络编程和NIO详解3:IO模型与Java网络编程模型 基本概念说明 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32 ...
- [转载,感觉写的非常详细]DUBBO配置方式详解
[转载,感觉写的非常详细]DUBBO配置方式详解 原文链接:http://www.cnblogs.com/chanshuyi/p/5144288.html DUBBO 是一个分布式服务框架,致力于提供 ...
- YDB基本使用详解(转)
第七章YDB基本使用详解 一.如何与YDB对接(交互) 目前延云YDB提供如下几种方式 l命令行的方式 lWeb http接口的方式 lJDBC接口的方式 通过Java编程接入 通过可视化SQL分析统 ...
- 学习linux命令,看这篇2w多字的linux命令详解
用心分享,共同成长 没有什么比每天进步一点点更重要了 本文已收录到我的github:https://github.com/midou-tech/articles/tree/master/docs/li ...
随机推荐
- sqlserver 公有表达式
了解通用表达式: 为了让代码简洁:在一个查询中引用另外的结果集都是通过视图而不是子查询来进行分解,但是视图是系统级对象,如果数据集仅仅需要在存储过程或是自定义函数中使用一次的话,使用view有些奢侈哈 ...
- Unity User Group 北京站图文报道:《Unity3D VR游戏与应用开发》
很高兴,能有机会回报Unity技术社区:我和雨松MOMO担任UUG北京站的负责人, 组织Unity技术交流和分享活动. 本次北京UUG活动场地–微软大厦 成功的UUG离不开默默无闻的付出:提前2小时到 ...
- 第九篇、Swift的基本使用
1.访问权限 /* 1> internal : 内部的 1. 默认情况下所有的类&属性&方法的访问权限都是internal 2. 在本模块(项目/包/target)中可以访问 2 ...
- iOS app应用界面加载卡顿的问题
刚发布版本,忽然发现加载界面需要3-5秒延迟,那么问题来了. 首先,发现问题: 1.看代码,基于之前版本更新都没出问题,还是比较确信不是代码中的bug,以防万一,还是仔细看了下关于界面跳转部分的代码, ...
- Mac OSX用终端检测文件的sha1值
打开终端,输入shasum空格然后把文件拖进来回车即可;
- phpmyadmin安装教程及配置设置
phpmyadmin安装教程及配置设置 | 浏览:20304 | 更新:2013-11-07 09:50 1.一般网上下载到的phpmyadmin是一个压缩包,我们将其释放到htdocs目录中,例如h ...
- lex&yacc 9
the "line 15: error: syntax error" cant stop, if i test the statement "i<=0" ...
- 【Winform】锐浪报表使用
在发开报表时,使用了锐浪报表. 需要注意的一些细节: 1.给staticbox设置文本,通过GridppReport的变量,使用ControlByName获取到控件后进行设置文字 _report.Co ...
- 认识HTML5
引言,认识两个标准制定的组织 在讲什么是Html5之前得先了解两个组织:WHATWG :网页超文本技术工作小组(英语:Web Hypertext Application Technology Work ...
- Java 多线程 锁 存款 取款
http://jameswxx.iteye.com/blog/806968 最近想将java基础的一些东西都整理整理,写下来,这是对知识的总结,也是一种乐趣.已经拟好了提纲,大概分为这几个主题: ja ...