Untiy 接入 移动MM 详解 转
http://www.cnblogs.com/alongu3d/p/3627936.html
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Untiy 接入 移動MM 詳解
? ? ? ??
?第一次接到師傅的任務(wù)(小龍),準備著手寫untiy接入第三方SDK的文章(android?方向),第一次寫故而寫的不好的地方不要吐槽。如有興趣可加63438968(untiy?開發(fā)群)進行探討。
??本文主要已?unity?和android工程為基礎(chǔ)進行解析分析。其次因目前各地sdk平臺與unity程序有不兼容問題,故而導致了在發(fā)布后會缺少文件。本文也提供了一個解決方案供大家參考。
具體工程可加群63438968?進行下載。如有美術(shù)人員可加?185762832?
???? 20140324?熊熊家族-樹袋熊宗宗Boss
?
?
?
一eclipse???
1.1?在接到接入哪家平臺之后,首先做的第一件事,是登錄到這個平臺官網(wǎng),下載最新的SDK,按照開發(fā)文檔內(nèi)容進行查找,找到哪段代碼是對應(yīng)的什么方法。并新建工程,寫成自己的方法。以下已移動MM(2.3.0)?為例做介紹。?
移動MM官網(wǎng)?http://dev.10086.cn/iap/?action=down&areaid=1354082900?
開發(fā)文檔在工程內(nèi)
1.2?下載完成之后,打開移動MM?的demo。放在android手機上,先進行了解,并將demo中的?對應(yīng)的代碼找出來。
1.3?確定之后就可以寫自己的工程了。接入工程有幾個地方需要注意,首先是jay包?,jay包即是第三方平臺的jay包如圖所示:
?
其中?armeabi?mmBilling.2.3.0.jar是移動MM平臺必須放入的(在下載的SDK內(nèi)會找到),android-support-v4.jay是android工程自動生成的。
Unit-classes.jar(在unity引擎內(nèi)可以找到,如果找不到就直接搜索classes.jar即可)是?unity的jay包?
備注:導入方式除了正常的拖拽到libs內(nèi)?,也可以在Properties-Java?Build?Path-Libraries-點擊“Add?JARs…”按鈕,在彈出窗口中,選中jar文件,但此方法是按照絕對路徑,故如果工程換位置的話,會導致查找不到j(luò)ar。故而不建議采取此方法。如圖
?
1.4?添加完成jar之后就需要?在配置文件AndroidManifest.xml中添加必要的聲明文件。如圖:(如果需要可在demo中查找到)
?
?
備注:以上是前期準備工作,具體的APPID、APPKEY、PAYCODE,以及硬件計費軟件計費等參數(shù)。可登錄到官網(wǎng)注冊并且開發(fā)應(yīng)用即可獲取相應(yīng)的參數(shù)。
1.5?準備好了就可以進行開發(fā)了。以下內(nèi)容指示做舉例?并不一一將代碼展現(xiàn)出來。
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內(nèi)傳參過來。
因unity?掉sdk平臺代碼,會使用主線程,并修改UI,但大部分在修改主UI的時候會出現(xiàn)致命錯誤,故而需要添加在子線程中。添加子線程現(xiàn)在總結(jié)了三種方法,供大家參考。
其一: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(){
?
}});
?
以上三種方式都可實現(xiàn)在子線程?完成邏輯處理。具體看哪個用的上手就用那個?并不統(tǒng)一。
1.6?在完成所有接入之后?就需要寫回調(diào)?方法了。而返回給unity?需要使用到
UnityPlayer.UnitySendMessage(Deductiontomonitor,?DeductionSuccess,?result);備注:???里面三個參數(shù)都是string?格式,如需要傳回其他類型可進行轉(zhuǎn)換即可。
第一個參數(shù)?:untiy內(nèi)GameObject物體的名稱?如圖??如我unity工程內(nèi)需要處理邏輯的物體名稱是GameObject則將Deductiontomonitor改成GameObject即可。
第二個參數(shù):?GameObject?物體內(nèi)所掛方法名?
第三個參數(shù):?result??是返回的參數(shù),根據(jù)需要傳遞不同參數(shù)。?
?
1.7?android工程在將方法都寫好之后?,就需要打包jay。步驟如下:
工程右鍵-export?-?JAR?file?-next-Browse(選擇存放的路徑)-finish即可
?
備注:以上是android工程?,具體代碼加群在群共享內(nèi)。
?
二、Unity??
2.1?新建unity工程,并在工程內(nèi)新建文件?文件名必須是Plugins(untiy啟動順序此為第三啟動順序,如果其他文件untiy是在初始化的時候是不訪問的)在Plugins內(nèi)創(chuàng)建文件Android也就是android插件?。然后添加文件如圖:
?
添加四個文件?:配置文件?、?bin(android?打包的jay)、libs(?第三方平臺的sdk的jay包)??res(資源文件)?其他無用的?就都刪掉,避免出現(xiàn)未知問題。?
?
2.2?將unity?修改成?android工程?
?
畫了四個橫線
第一是發(fā)布之后公司的名稱?
第二是發(fā)布之后應(yīng)用的名稱
第三是android工程的包名,必須一致,否則會出問題。如果不知道可打開AndroidManifest內(nèi)找:
?
第四是?包含兩個參數(shù)?一個是ARMv7?ARMv6?其中ARMv6是低端機的意思,目前在?untiy版本3.5.6內(nèi)還存在,更高版本此選項已無。?對于低端機?如果不選擇ARMv6而發(fā)布android應(yīng)用,在低端機是無法運行的。
?
2.3?以上是?unity的準備工作,做好之后?就可以寫unity掉android的代碼了
同樣只是舉例,具體代碼?請在群共享內(nèi)下載?
?
備注:?using?是c#的方法,這個方法非常有用?在using?()中新建的對象,會在{}結(jié)束的時候自動關(guān)閉和釋放,不需要你手動進行。
其一:AndroidJavaClass?jc?=?new?AndroidJavaClass("com.unity3d.player.UnityPlayer")
androidJavaClass英文直意?安卓java類。括號內(nèi)的
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?
內(nèi)有?介紹?
其三?
?jo.Call("Init",APPID,APPKEY);
意思是訪問android工程?內(nèi)的Init?方法,并傳遞兩個參數(shù)?。
Android工程對于代碼
?
這樣就可以使?unity?訪問?android工程。
?
2.4?回調(diào):在很多時候?unity調(diào)用android之后?還需要android返回給unity信息,如支付之后,用戶是?支付成功、支付失敗、還是支付取消。都需要返回給unity,并進行相應(yīng)邏輯處理。
2.4.1?在android工程內(nèi)
?
而unity對應(yīng)的代碼是
?
這樣即可實現(xiàn)?android?回調(diào)unity?
2.5?寫完?調(diào)用和回調(diào)方法之后。在給大家分享一個工廠代碼,即方便unity?代碼之間的調(diào)用,如圖:
?
如進行調(diào)用的話,直接? YDMM.Instance.Init(appId,appkey);??即可
2.6?寫完之后即可進行發(fā)布了。但在發(fā)布的時候?經(jīng)常會出現(xiàn)?無法發(fā)布APK的問題,這種問題多為?bin?libs?res這三個文件導致,不是多放文件就是少放文件了。導致資源找不到等問題。多注意?多看各個平臺的開發(fā)文檔即可。
?
?
三?、?在發(fā)布出去APK后?也算是大功告成了。但有的sdk平臺?如移動MM?、多盟、百度移動聯(lián)盟、都有兼容問題,即在APK根目錄下該有的文件并未自動生成,而這時候就需要自己手動添加了。?如何找到缺少文件呢,這時可以打開對應(yīng)的SDK平臺?找到demo?這demo工程內(nèi)會有eclipse自動生成的APK?。將他的后綴改成zip?即可發(fā)現(xiàn)缺少的文件?如圖:
?
改成zip之后打開會發(fā)現(xiàn)根目錄多了?一些文件,而unity發(fā)布之后的apk并沒有
?
?
這時?就需要手動將缺少的文件?拷貝到自己的apk里頭。
3.2?添加以后?還并未操作完成,因android有自己的簽名系統(tǒng),平白的給這簽名里頭加東西,會導致手機不認識這個程序,故而在添加完成之后?還需要將添加后的APK?進行?重新簽名,簽名軟件有很多。不做過多介紹。在本群內(nèi)?會提供一個簽名軟件,供大家使用。
備注:?移動MM?在全部接入完成之后,可以在移動MM平臺進行發(fā)布,但在發(fā)布的時候會遇到無法上傳的問題,本人在發(fā)布的時候也遇到該問題,后來換了個瀏覽器解決了該問題。如有類似問題這樣操作即可。
?
四、??以上是移動MM?的接入。以下是日后?更新內(nèi)容
4.1 ?如有不會的可在群內(nèi)進行發(fā)問咨詢
?
?
4.2??以上內(nèi)容包含了?廣告、短信支付、內(nèi)支付后續(xù)會逐步更新完善,另外像廣大群友咨詢?nèi)绾胃玫慕尤攵嗉襍DK平臺。目前這塊不是很熟悉。同時接入8家SKD?,但是是進行一一整合的,很不方便管理。尋求網(wǎng)友出教學,簡化接入方法。以下是聯(lián)系方式以及各大平臺sdk的鏈接地址:
?
開發(fā)群號:63438968??博客地址:http://www.cnblogs.com/alongu3d/?
設(shè)計師群: 185762832?
?
雨松momo?博客地址:http://www.xuanyusong.com/??第18?和19片如果是初學者建議看一下。
?
?
| Tapjoy_SDK | https://dashboard.tapjoy.com/sdk |
| 有米廣告 | http://www.youmi.net/apps/sdk |
| Google?Admob | https://developers.google.com/mobile-ads-sdk/docs/dfp/fundamentals#play |
| 艾德思奇 | http://mobi.adsage.cn/ac/?adsage_ticket=eyJ0b2tlbiI6IjI3YTkxMjU1OWY5ZjVlYjRmOWU4MTg0OGI3ZDI2NmE4IiwiaG9zdCI6InJzdnIzIn0= |
| 移動游戲基地 | 版本需要找客服要http://g.10086.cn/spbbs/search.php??? |
| 電信愛游戲 | 版本需要找客服要? |
| Google?Play?內(nèi)支付 | http://prime31.com/plugins |
| Domob?多盟?廣告 | http://www.domob.cn/developers/SDKdownload.htm |
| Domob?多盟?積分墻 | http://www.domob.cn/developers/SDKdownload.htm |
| 新浪微博? | http://open.weibo.com/wiki/SDK#Android_SDK |
| 微信SDK | http://open.weixin.qq.com/document/gettingstart/android/ |
| 聯(lián)通VAC | 需要找接口人 |
| 機鋒支付 | http://www.gfan.com/dev/gpay/ |
| 360手機網(wǎng)游SDK | http://openapi.360.cn/page/sdk_cms |
| 百度移動聯(lián)盟廣告 | http://munion.baidu.com/about.html#/sdk/mobSdk |
| 百度移動聯(lián)盟積分墻 | http://munion.baidu.com/about.html#/sdk/statSdk |
| 移動MM? | http://dev.10086.cn/iap/?action=down&areaid=1354082900 |
| 米迪 | http://www.miidi.net/static/developers/sdk.htm |
| SmartMad億動智道 | http://ads.smartmad.com/selfservice/app/downloadList.m |
| 91SDK | http://bbs.18183.com/forum-91sdk-1.html? |
| UCsdk | http://bbs.9game.cn/thread-3183827-1-1.html |
?
?
???????????20140324?熊熊家族-樹袋熊宗宗Boss
總結(jié)
以上是生活随笔為你收集整理的Untiy 接入 移动MM 详解 转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自定义QGraphicsItem
- 下一篇: mysql获取年龄_sql获取时间、年龄