package com.wenting.youyiplugin; import android.app.Activity; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.content.Intent; import androidx.annotation.NonNull; import com.unity3d.player.UnityPlayer; import com.unity3d.player.UnityPlayerActivity; import com.youyi.yysdk.YouYi; import com.youyi.yysdk.callback.ExitCallBack; import com.youyi.yysdk.callback.LoginCallBack; import com.youyi.yysdk.callback.PayStatusCallBack; import java.util.HashMap; public class MainActivity extends UnityPlayerActivity implements Handler.Callback { private static final int MSG_INIT = 101; private static final int MSG_LOGIN = 102; private static final int MSG_SWITCH_ACCOUNT = 103; private static final int MSG_PAY = 104; private static final int MSG_CREATE_ROLE_LOG = 105; private static final int MSG_LOGIN_ROLE_LOG = 106; private static final int MSG_LEVEL_LOG = 107; private static final int MSG_REPORT_ACTION = 108; private static final int MSG_EXIT = 110; private final String LOG = "YOUYI_PLUGIN"; private String gameObjectName; private boolean mInited = false; private Handler mHandler = new Handler(this); private LoginCallBack mLoginCallBack = new LoginCallBack() { @Override public void login(String s) { Log.d(LOG, "login"); callUnityFunc("OnLoginSuccess", s); } @Override public void switchAccount() { Log.d(LOG, "switchAccount"); callUnityFunc("OnLogoutSuccess", ""); } }; private ExitCallBack mExitCallBack = new ExitCallBack() { @Override public void exit() { Log.d(LOG, "exit"); callUnityFunc("OnExitSuccess", ""); } @Override public void cancelExit() { Log.d(LOG, "cancelExit"); } }; private PayStatusCallBack mPayStatusCallBack = new PayStatusCallBack() { @Override public void paySuccessful() { //支付成功 Log.d(LOG, "支付成功"); callUnityFunc("OnPaySuccess", ""); } @Override public void closePay() { //取消支付 Log.d(LOG, "取消支付"); callUnityFunc("OnPayFailed", ""); } @Override public void payFailed() { //支付失败 Log.d(LOG, "支付失败"); callUnityFunc("OnPayFailed", ""); } }; private void callUnityFunc(String funcName, String paramStr) { if (TextUtils.isEmpty(this.gameObjectName)) { Log.e(LOG, "gameObject is null, please set gameObject first"); return; } UnityPlayer.UnitySendMessage(this.gameObjectName, funcName, paramStr); } public boolean handleMessage(Message msg) { switch (msg.what) { case MSG_INIT: HashMap initObj = (HashMap)msg.obj; YouYi.getInstance().init(this, initObj.get("gameId"), initObj.get("appKey"), initObj.get("gameVersion")); mInited = true; callUnityFunc("OnInitSuccess", ""); break; case MSG_LOGIN: YouYi.getInstance().login(this, mLoginCallBack); break; case MSG_SWITCH_ACCOUNT: YouYi.getInstance().switchAccountLogin(); break; case MSG_PAY: { HashMap payObj = (HashMap) msg.obj; String cpOrderId = (String) payObj.get("cpOrderId"); String amount = (String) payObj.get("amount"); String goodsId = (String) payObj.get("goodsId"); String goodsName = (String) payObj.get("goodsName"); String roleId = (String) payObj.get("roleId"); String roleName = (String) payObj.get("roleName"); String serverId = (String) payObj.get("serverId"); String serverName = (String) payObj.get("serverName"); int level = (int) payObj.get("level"); String extendParams = (String) payObj.get("extendParams"); YouYi.getInstance().pay(cpOrderId, amount, goodsId, goodsName, roleId, roleName, serverId, serverName, level, extendParams, mPayStatusCallBack); break; } case MSG_CREATE_ROLE_LOG: { HashMap createRoleLogObj = (HashMap) msg.obj; String roleId = (String) createRoleLogObj.get("roleId"); String roleName = (String) createRoleLogObj.get("roleName"); String serverId = (String) createRoleLogObj.get("serverId"); String serverName = (String) createRoleLogObj.get("serverName"); int level = (int) createRoleLogObj.get("level"); String spare = (String) createRoleLogObj.get("spare"); YouYi.getInstance().creatingRole(roleId, roleName, serverId, serverName, level, spare); break; } case MSG_LOGIN_ROLE_LOG: { HashMap createRoleLogObj = (HashMap) msg.obj; String roleId = (String) createRoleLogObj.get("roleId"); String roleName = (String) createRoleLogObj.get("roleName"); String serverId = (String) createRoleLogObj.get("serverId"); String serverName = (String) createRoleLogObj.get("serverName"); int level = (int) createRoleLogObj.get("level"); String spare = (String) createRoleLogObj.get("spare"); YouYi.getInstance().loginRole(roleId, roleName, serverId, serverName, level, spare); break; } case MSG_LEVEL_LOG: { HashMap levelLogObj = (HashMap) msg.obj; String roleId = (String) levelLogObj.get("roleId"); String roleName = (String) levelLogObj.get("roleName"); String serverId = (String) levelLogObj.get("serverId"); String serverName = (String) levelLogObj.get("serverName"); int level = (int) levelLogObj.get("level"); String spare = (String) levelLogObj.get("spare"); YouYi.getInstance().levelLog(roleId, roleName, serverId, serverName, level, spare); break; } case MSG_REPORT_ACTION: { HashMap reportActionObj = (HashMap) msg.obj; if (reportActionObj.containsKey("event")) { YouYi.getInstance().actionReport((String)reportActionObj.get("event"), reportActionObj); } break; } case MSG_EXIT: YouYi.getInstance().exit(mExitCallBack); break; } return false; } public void init(String gameObjectName) { this.gameObjectName = gameObjectName; if (mInited) { callUnityFunc("OnInitSuccess", ""); return; } String gameId = ""; String appKey = ""; String gameVersion = ""; try { PackageManager packageManager = this.getPackageManager(); ApplicationInfo appInfo = packageManager.getApplicationInfo(this.getPackageName(), PackageManager.GET_META_DATA); Bundle metaData = appInfo.metaData; gameId = String.valueOf(metaData.getInt("YouYi_GameId")); appKey = metaData.getString("YouYi_AppKey"); PackageInfo packageInfo = packageManager.getPackageInfo(this.getPackageName(), 0); if (metaData.containsKey("LEBIAN_VERCODE")) { int lebianVersion = metaData.getInt("LEBIAN_VERCODE"); int version = packageInfo.versionCode; if (lebianVersion > version) { int major = lebianVersion / 1000000; lebianVersion = lebianVersion - major * 1000000; int minor = lebianVersion / 10000; lebianVersion = lebianVersion - minor * 10000; int release = lebianVersion / 100; lebianVersion = lebianVersion - release * 100; int patch = lebianVersion; gameVersion = major + "." + minor + "." + release + "." + patch; } else { gameVersion = packageInfo.versionName; } } else { gameVersion = packageInfo.versionName; } } catch (Exception e) { e.printStackTrace(); callUnityFunc("OnInitFailed", ""); return; } Message msg = mHandler.obtainMessage(MSG_INIT); HashMap mapObj = new HashMap<>(); mapObj.put("gameId", gameId); mapObj.put("appKey", appKey); mapObj.put("gameVersion", gameVersion); msg.obj = mapObj; msg.sendToTarget(); } public void login() { mHandler.sendEmptyMessage(MSG_LOGIN); } public void switchAccountLogin() { mHandler.sendEmptyMessage(MSG_SWITCH_ACCOUNT); } public void pay(String cpOrderId, String amount, String goodsId, String goodsName, String roleId, String roleName, String serverId, String serverName, int level, String extendParams) { Message msg = mHandler.obtainMessage(MSG_PAY); HashMap mapObj = new HashMap<>(); mapObj.put("cpOrderId", cpOrderId); mapObj.put("amount", amount); mapObj.put("goodsId", goodsId); mapObj.put("goodsName", goodsName); mapObj.put("roleId", roleId); mapObj.put("roleName", roleName); mapObj.put("serverId", serverId); mapObj.put("serverName", serverName); mapObj.put("level", level); mapObj.put("extendParams", extendParams); msg.obj = mapObj; msg.sendToTarget(); } public void createRoleLog(String roleId, String roleName, String serverId, String serverName, int level, String spare) { Message msg = mHandler.obtainMessage(MSG_CREATE_ROLE_LOG); HashMap mapObj = new HashMap<>(); mapObj.put("roleId", roleId); mapObj.put("roleName", roleName); mapObj.put("serverId", serverId); mapObj.put("serverName", serverName); mapObj.put("level", level); mapObj.put("spare", spare); msg.obj = mapObj; msg.sendToTarget(); } public void loginRoleLog(String roleId, String roleName, String serverId, String serverName, int level, String spare) { Message msg = mHandler.obtainMessage(MSG_LOGIN_ROLE_LOG); HashMap mapObj = new HashMap<>(); mapObj.put("roleId", roleId); mapObj.put("roleName", roleName); mapObj.put("serverId", serverId); mapObj.put("serverName", serverName); mapObj.put("level", level); mapObj.put("spare", spare); msg.obj = mapObj; msg.sendToTarget(); } public void levelLog(String roleId, String roleName, String serverId, String serverName, int level, String spare) { Message msg = mHandler.obtainMessage(MSG_LEVEL_LOG); HashMap mapObj = new HashMap<>(); mapObj.put("roleId", roleId); mapObj.put("roleName", roleName); mapObj.put("serverId", serverId); mapObj.put("serverName", serverName); mapObj.put("level", level); mapObj.put("spare", spare); msg.obj = mapObj; msg.sendToTarget(); } public void reportAction(HashMap params) { Message msg = mHandler.obtainMessage(MSG_REPORT_ACTION); msg.obj = params; msg.sendToTarget(); } public void exit() { mHandler.sendEmptyMessage(MSG_EXIT); } // Setup activity layout @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); YouYi.getInstance().onCreate(); } // Quit Unity @Override protected void onDestroy () { super.onDestroy(); YouYi.getInstance().onDestroy(); } // Pause Unity @Override protected void onPause() { super.onPause(); YouYi.getInstance().onPause(); } // Resume Unity @Override protected void onResume() { super.onResume(); YouYi.getInstance().onResume(); } @Override protected void onStart() { super.onStart(); YouYi.getInstance().onStart(); } @Override protected void onStop() { super.onStop(); YouYi.getInstance().onStop(); } @Override protected void onRestart() { super.onRestart(); YouYi.getInstance().onRestart(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); YouYi.getInstance().onNewIntent(intent); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); YouYi.getInstance().onActivityResult(requestCode, resultCode, data); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); YouYi.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults); } }