Unity接入移動MM支付(Android)

來源:互聯網
上載者:User

標籤:android   支付   unity3d   移動   apk   

移動沒有用於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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.