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 {@Overrideprotected 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
好啦!
總結
以上是生活随笔為你收集整理的Unity接入移动MM支付(Android)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Coursera 申请助学金流程和材料
- 下一篇: Android自定义华为睡眠,Andro