移动没有用于Unity3D的移动MM支付SDK的接入,所以……
这样一来,你需要去官网下载IAP-SDK做成jar包供Unity调用:http://dev.10086.cn/iap/?action=down&areaid=1354082900
1、先要明确一点的是在Unity的Assets目录中你得有个Plugins/Android的目录,并且必须在Assets目录,否则无法将资源打包到PAK。此时,你可以尝试打一个apk的包,用压缩文件打开的目录结构是这样的:
为什么就这样了呢?我也想知道!这里记录一个路径,mac下找到Unity安装目录,右键Unity app 显示包内容:/Contents/PlaybackEngines/AndroidPlayer;Window下找到Unity安装目录:Unity\Editor\Data\PlaybackEngines\androidplayer。
2、那么我想你已经把SDK下载好了,我想你第一件事一定是先看它得接入文档咯,之后你得把它里面得Demo弄来测试一下吧?好我们生成了一个demo.apk,我用BetterZip打开是这样得:
注意红框中的内容,看到与Unity生成的APK(图一)有什么区别了吧?对,这些文件的缺失很可能就会导致让你抓狂的各种报错。比如什么什么“failed to find...”,或者官方的demo apk可以运行,而自己的apk老是报错的情况就要注意比较两者的差异了。最后我们再看看移动MM内购jar包:
看嘛,像这种移动MM内购支付SDK将资源放在了mmbilling的jar包当中了,导致Unity无法识别。所以我们要将这些必要的资源拷贝出来放在Plugins/Android对应的目录下面,一般的Plugins/Android都包含了如下目录:
a、assets 资源目录,如上图的神马图标之类的资源;
b、bin/libs目录,由于不是做android开发的,傻傻分不清楚。说是用来放第三方jar包的,但是最后发现无论你将jar包放在bin目录,libs目录,甚至直接在Android根目录都可以。哎。。太没得节操了。最好将jar包放bin目录,资源(armeabi-v7a、x86)放libs目录。
c、res目录,又是拿来放资源的。。神马情况?让assets情何以堪。瞬间混乱了。不过我讲demo.apk中的res直接拷贝到Plugins/Android目录,让Unity打包是会报错的。。哎。。
d、AndroidManifest.xml这个文件你得放在Plugins/Android下吧。
好吧,至少我们把assets资源集成进来了吧。哦,对,还有就是libs目录里面得.so资源armeabi、x86等。看看吧:
我这里把demo.apk解包后的assets下面的所有资源都添加到Plugins/Android/assets目录,将libs里面得资源都照样添加到armeabi-v7a和x86目录了,这里直接将demo的armeabi目录下得东东添加到armeabi-v7a目录就好。当然我这里将所有得第三方jar包也放在libs目录了,如:mmbilling.3.1.7.jar,还有我自己写的jar包:
3、至于怎么接入,我想你至少要看看官方的android接入文档吧。详细接入流程:http://www.cnblogs.com/alongu3d/p/3627936.html
4、再一点,关于Unity与Android交互的。说实话真的不太懂。常规做法是这样得:
a、你得新建android项目,引入Unity的class.jar:/Contents/PlaybackEngines/AndroidPlayer/relase/bin
b、继承UnityPlayerActivity:
package com.vgame.plugins; import android.os.Bundle; import com.iap.cm.IAP_CM; import com.unity3d.player.UnityPlayerActivity; public class UnityActivity extends UnityPlayerActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IAP_CM.onInit(this); } }
using (AndroidJavaClass ac = new AndroidJavaClass ("com.unity3d.player.UnityPlayer")) { using (AndroidJavaObject ao = ac.GetStatic<AndroidJavaObject> ("currentActivity")) { ao.CallStatic ("init", "appid", "appkey", "Gameobject 接受消息的对象", "回调方法"); } }
可是,我不想这么干了,我不想继承UnityPlayerActivity,于是:
using (AndroidJavaClass ac = new AndroidJavaClass ("com.iap.mm.IAPController")) { ac.CallStatic ("init", "appid", "appkey", "Gameobject 接受消息的对象", "回调方法"); }
AndroidJavaClass ac = new AndroidJavaClass ("com.iap.mm.IAPController"); ac.CallStatic ("init", "appid", "appkey", "Gameobject 接受消息的对象", "回调方法");
5、至此,剩下的CopyrightDeclaration.xml、mmiap.xml、VERSION或者res里得文件要怎么打包进apk呢?
a、确保你已将demo里面得aseets和lib下面得文件都集成到Unity的Plugins/Android文件里面,打包生成apk,这里将你打包用到keystore保存到一个文件夹如:relase什么得,随便了,就是留着备用。
b、将apk后缀名改成zip,用压缩文件打开,我这里就用BetterZip了:
此时我们可以看到aseets和lib里面得资源已经打包到apk了。
c、将缺失的CopyrightDeclaration.xml、mmiap.xml、VERSION文件添加进来:
保存并将扩展名改回apk。这样得apk我想是无法安装到手机的,你说呢?所以有必要对apk重新签名,看这里:http://blog.csdn.net/h5q8n2e7/article/details/47837653如果你是window:http://blog.sina.com.cn/s/blog_13791f8000102v2ru.html
好啦!
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/h5q8n2e7/article/details/48000787