Unity接入移动MM支付(Android)

移动没有用于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);
	}
}

Unity方面:

		using (AndroidJavaClass ac = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"))
		{
			using (AndroidJavaObject ao = ac.GetStatic<AndroidJavaObject> ("currentActivity"))
			{
				ao.CallStatic ("init", "appid", "appkey", "Gameobject 接受消息的对象", "回调方法");
			}
		}

当然,你得在UnityActivity写上init方法并且是静态的。

可是,我不想这么干了,我不想继承UnityPlayerActivity,于是:

		using (AndroidJavaClass ac = new AndroidJavaClass ("com.iap.mm.IAPController"))
		{
			ac.CallStatic ("init", "appid", "appkey", "Gameobject 接受消息的对象", "回调方法");
		}

但是,很遗憾的是这样无法调用到init的,根本没反应。这是为什么呢?不知道。估计是using这活把ac给我回收了,好吧:

		AndroidJavaClass ac = new AndroidJavaClass ("com.iap.mm.IAPController");
		ac.CallStatic ("init", "appid", "appkey", "Gameobject 接受消息的对象", "回调方法");

成功了!当然你不要忘了将com.iap.mm.IAPController的工程打个jar包放在Plugins/Android/bin目录中哟!

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

好啦!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值