Unity整合華為遊戲服務SDK方式(四):Unity整合Android外掛
原理介紹
該整合思路是android studio整合sdk後改為library匯出,作為外掛給unity使用,unity通過gradle配置整合sdk。即通過android外掛 實現sdk介面的呼叫,但是實際sdk整合在unity實現。
Unity端
首先,unity處理場景Scene,我這裡建立佈局如下:
建立c#指令碼檔案,並編寫點選事件,以初始化為例,程式碼如下:
定義一個互動物件:
AndroidJavaObject androidSdkObject = null;
在Start中獲取物件例項,其中“”中為安卓封裝sdk的包名+類名,我這裡實現sdk介面呼叫放在MainActivity中。
void Start()
{
androidSdkObject = new AndroidJavaObject("com.example.lianyungame.library.MainActivity");
}
點選unity中init按鈕,實現呼叫android 中的sdk初始化方法,需要在指令碼檔案新增如下方法,包含呼叫init介面方法和接收sdk初始化結果方法:
public void initial()
{
//呼叫android介面
Debug.Log("initial");
androidSdkObject.Call("init");
}
指令碼中處理初始化回撥方法:
public void initSuccess()
{
Debug.Log("initSuccess");
}
public void initFailed(string str)
{
Debug.Log("initFailed:" + str);
}
指令碼檔案方法處理完成後將該指令碼檔案拖到對應的ui上新增元件:
操作後可以看到指令碼檔案已掛載到畫布Canvas上,如圖:
到這裡unity的程式碼互動處理完成。
Android端
接下來處理android程式碼:
Android Studio中新建工程並參考華為官方sdk整合文件整合遊戲服務sdk,並處理與unity互動邏輯。因為android java類要繼承UnityPlayerActivity類,所以還需要將unity目錄下的Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Classes\classes.jar拷貝到android專案launcher/libs目錄下,並新增對該jar包的依賴。
Android studio整合sdk參考文件:
以實現遊戲初始化介面為例,在呼叫介面後把結果通過UnityPlayer.UnitySendMessage回撥給unity。
public void init() {
AccountAuthParams params = AccountAuthParams.DEFAULT_AUTH_REQUEST_PARAM_GAME;
JosAppsClient appsClient = JosApps.getJosAppsClient(UnityPlayer.currentActivity);
Task<Void> initTask;
ResourceLoaderUtil.setmContext(UnityPlayer.currentActivity);
initTask = appsClient.init(
new AppParams(params, new AntiAddictionCallback() {
@Override
public void onExit() {
UnityPlayer.UnitySendMessage("Canvas", "exit", "");
}
}));
initTask.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(UnityPlayer.currentActivity, "init success", Toast.LENGTH_LONG).show();
UnityPlayer.UnitySendMessage("Canvas", "initSuccess", "");
}
}).addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(Exception e) {
Toast.makeText(UnityPlayer.currentActivity, "init failed", Toast.LENGTH_LONG).show();
if (e instanceof ApiException) {
ApiException apiException = (ApiException) e;
int statusCode = apiException.getStatusCode();
Toast.makeText(UnityPlayer.currentActivity, "init failed,statusCode is " + statusCode, Toast.LENGTH_LONG).show();
if (statusCode == JosStatusCodes.JOS_PRIVACY_PROTOCOL_REJECTED) { // 錯誤碼為7401時表示使用者未同意華為聯運隱私協議
Log.i(TAG, "has reject the protocol");
// 此處您需禁止玩家進入遊戲
UnityPlayer.UnitySendMessage("Canvas", "initFailed", "has reject the protocol");
} else if (statusCode == GamesStatusCodes.GAME_STATE_NETWORK_ERROR) { // 錯誤碼7002表示網路異常
Log.i(TAG, "Network error");
// 此處您可提示玩家檢查網路,請不要重複呼叫init介面,否則斷網情況下可能會造成手機高耗電。
UnityPlayer.UnitySendMessage("Canvas", "initFailed", "Network error");
} else if (statusCode == 907135003) {
// 907135003表示玩家取消HMS Core升級或元件升級
Log.d(TAG, "init statusCode=" + statusCode);
init();
} else {
// 在此處實現其他錯誤碼的處理
UnityPlayer.UnitySendMessage("Canvas", "initFailed", "other error");
}
}
}
});
}
可以自行編寫Ui介面,編譯測試介面沒問題後將專案改為library匯出,提取jar包。
1. 修改application為library
2. 去掉包名
3. 編譯後找到編譯檔案,解壓後把根目錄下的classes.jar拷貝到unity的Assets>Plugins>Android>libs目錄下
回到unity打包
Unity專案中新增sdk整合配置:
1、baseProjectTemplate.gradle 檔案中新增AppGallery Connect plugin 以及 Maven repository,如下:
buildscript {
repositories {**ARTIFACTORYREPOSITORY**
google()
jcenter()
maven { url 'http://developer.huawei.com/repo/' }
}
}
dependencies {
classpath 'com.huawei.agconnect:agcp:1.4.2.300'
}
repositories {**ARTIFACTORYREPOSITORY**
google()
jcenter()
maven { url 'http://developer.huawei.com/repo/' }
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
}
2、launcherTemplate.gradle和mainTemplate.gradle分別新增構建依賴。
dependencies {
implementation project(':unityLibrary')
implementation 'com.huawei.hms:game:6.1.0.301'
implementation 'com.huawei.hms:hwid:6.4.0.300'
implementation 'com.huawei.hms:iap:6.1.0.300'
}
3、Json檔案需要在manifest檔案中配置appid,否則呼叫介面異常:
<meta-data
android:name="com.huawei.hms.client.appid"
android:value="appid=xxx">
</meta-data>
然後檢查包名與華為後臺包名一致,簽名編譯執行並打包測試。
1、開啟unity File>Build Settings...目錄:
2、切換到Android平臺,點選Play Settings…:
3、左邊選中Player,開啟Other Settings,勾選Override Default Package Name並重寫包名,Minimun API Level選中19(sdk要求最低為19)。
4、選中Player,開啟Publishing Settings,設定簽名。
5、返回上一個頁面,選中場景,點選Build打包即可。其他介面類似,可自行整合並調測。
- HMS Core AR Engine 2D圖片/3D物體跟蹤技術 助力打造更智慧AR互動體驗
- 【Codelabs挑戰賽—定製訊息和配置】HarmonyOS定製告白訊息
- HMS Core 3D精準室內定位技術,打造“店鋪級”出行體驗
- 【開發者必讀】2022年移動應用出海趨勢洞察白皮書
- Unity整合華為遊戲服務SDK方式(三):Unity匯出為Android工程
- Unity整合華為遊戲服務SDK方式(四):Unity整合Android外掛
- Unity整合華為遊戲服務SDK方式(一):整合Unity官方遊戲SDK
- Unity整合華為遊戲服務SDK方式(二):整合Unity-Plugins外掛
- 助力OpenHarmony生態蓬勃發展 千元開發板免費試用
- 遊戲版號恢復發放後,還有一個好訊息……
- 10分鐘參與中國信通院研發效能調查問卷,白皮書盲盒、電腦包、創意抱枕等你來拿!!!(友情提醒,最後5天)
- 開發者必讀:2022年移動應用趨勢洞察白皮書
- 【HarmonyOS】【ArkUI】研究了半天,鴻蒙 JS實現餅狀圖終於成功啦!分享一下
- 超簡單整合HMS ML Kit實現最大臉微笑抓拍
- 如何快速自檢是否成功整合華為聯運遊戲SDK 6.1.0.301版本
- 超簡單整合華為HMS MLKit 機器學習服務 銀行卡識別SDK,一鍵實現銀行卡繫結
- 手把手教你如何分析華為Ads Kit 日誌
- 如何在Flutter中整合華為雲函式服務
- 華為遊戲登入,解析憑證Access Token介面報{“error”:“invalid session”}
- 呼叫華為Order服務驗證購買Token介面時返回Connection reset