package com.secondworld.universalsdk; import android.Manifest; import android.app.Activity; import android.app.AlertDialog; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.Settings; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v4.content.FileProvider; import android.text.method.QwertyKeyListener; import android.util.Log; import android.widget.Toast; import com.quicksdk.QuickSDK; import com.quicksdk.Sdk; import com.quicksdk.User; import com.quicksdk.entity.GameRoleInfo; import com.quicksdk.entity.OrderInfo; import com.quicksdk.Payment; import com.secondworld.univeralsdk.R; import com.unity3d.player.UnityPlayer; import org.json.JSONException; import org.json.JSONObject; import java.io.File; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; import cn.jpush.android.api.JPushInterface; import cn.jpush.android.data.JPushLocalNotification; public class H2EngineSDK { private static final String TAG = "H2EngineSDK"; private static String APP_ID = ""; private static boolean PushEnable = false; public static void HandleUnityMessage(String json) { LogUtil.i(TAG, "收到Unity发来的信息: " + json); Activity _activity = UnityPlayer.currentActivity; try { JSONObject _json = new JSONObject(json); int _code = _json.getInt("code"); switch (_code) { case CodeU2A.Init: APP_ID = _json.getString("appID"); init(_activity); break; case CodeU2A.CopyOneAsset: FileUtil.copy(_activity, _json.getString("fileName")); break; case CodeU2A.AssetCopy: FileUtil.copyAssets(_activity); break; case CodeU2A.BatteryListenStart: BatteryUtil.getInstance().start(_activity); break; case CodeU2A.BatteryListenStop: BatteryUtil.getInstance().stop(_activity); break; case CodeU2A.UniqueID: break; case CodeU2A.CopyContent: CopyContent(_activity, _json.getString("content")); break; case CodeU2A.OpenWebView: WebViewUtil.OpenWebView(_activity, _json.getString("url")); break; case CodeU2A.RestartApp: RestartApp(_activity); break; case CodeU2A.InstallAPK: InstallApp(_activity, _json.getString("path")); break; case CodeU2A.ExteneralStorage: GetExternalStorage(); break; case CodeU2A.RequestPermission: break; case CodeU2A.RequestManifestPermissions: break; case CodeU2A.FreePlatformInit: break; case CodeU2A.FreePlatformLogin: QuickPlatformUtil.getInstance().login(_activity); break; case CodeU2A.FreePlatformSwitchAccount: break; case CodeU2A.FreePlatformLogout: QuickPlatformUtil.getInstance().logout(_activity); break; case CodeU2A.FreePlatformPay: JSONObject _extraData = new JSONObject(); String _appid = com.quicksdk.Extend.getInstance().getExtrasConfig("zfappid"); if (_appid == "") { //没有打包的自定义参数则取配置表 _appid = APP_ID; } _extraData.put("appid", _appid); _extraData.put("cpinfo", _json.getString("cpInfo")); _extraData.put("cporderid", _json.getString("orderId")); try { // YJPlatformUtil.getInstance().payExtend(_activity, // _json.getString("title"), // _json.getString("cpInfo"), // (float) _json.getDouble("mount"), // URLEncoder.encode(_extraData.toString(), // "utf-8")); // if (_yjAppID.contains("mzgame") // || _yjAppID.contains("ucgame") // || _yjAppID.contains("yybgame")) // { // QuickPlatformUtil.getInstance().pay(_activity, // _json.getString("title"), // _json.getString("cpInfo"), // (float) _json.getDouble("mount"), // URLEncoder.encode( // _extraData.toString(), // "utf-8")); // } // else // { // QuickPlatformUtil.getInstance().charge(_activity, // _json.getString("title"), // (float) _json.getDouble("mount"), // URLEncoder.encode( // _extraData.toString(), // "utf-8")); // } GameRoleInfo roleInfo3 = new GameRoleInfo(); roleInfo3.setServerID(_json.getString("sid")); roleInfo3.setServerName(_json.getString("serverName")); roleInfo3.setGameRoleName(_json.getString("roleName").trim().replace(" ", "")); roleInfo3.setGameRoleID(_json.getString("roleID")); roleInfo3.setGameBalance(_json.getString("money")); roleInfo3.setVipLevel(_json.getString("vipLevel")); //设置当前用户vip等级,必须为数字整型字符串,请勿传"vip1"等类似字符串 roleInfo3.setGameUserLevel(_json.getString("level"));//设置游戏角色等级 roleInfo3.setPartyName(_json.getString("familyName").trim().replace(" ", ""));//设置帮派名称 roleInfo3.setRoleCreateTime(_json.getString("createTime")); //UC,当乐与1881,TT渠道必传,值为10位数时间戳 roleInfo3.setPartyId("1100"); //360渠道参数,设置帮派id,必须为整型字符串 roleInfo3.setGameRolePower("38"); //360,TT语音渠道参数,设置角色战力,必须为整型字符串 roleInfo3.setPartyRoleId("11"); //360渠道参数,设置角色在帮派中的id roleInfo3.setPartyRoleName("帮主"); //360渠道参数,设置角色在帮派中的名称 roleInfo3.setProfessionId("38"); //360渠道参数,设置角色职业id,必须为整型字符串 roleInfo3.setProfession("法师"); //360渠道参数,设置角色职业名称 roleInfo3.setFriendlist( "无"); //360渠道参数,设置好友关系列表,格式请参考:http://open.quicksdk.net/help/detail/aid/190 OrderInfo orderInfo = new OrderInfo(); orderInfo.setCpOrderID(_json.getString("orderId")); orderInfo.setGoodsName(_json.getString("title"));//商品名称,不带数量 orderInfo.setCount(1);//游戏币数量 orderInfo.setAmount((float) _json.getDouble("mount")); orderInfo.setGoodsID(_json.getString("cpInfo")); orderInfo.setGoodsDesc(_json.getString("title")); //orderInfo.setPrice(0.1); orderInfo.setExtrasParams( URLEncoder.encode(_extraData.toString(), "utf-8")); Payment.getInstance().pay(_activity, orderInfo, roleInfo3); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } break; case CodeU2A.PayFinished: QuickPlatformUtil.getInstance().payProcessing = false; break; case CodeU2A.CreateRole: GameRoleInfo roleInfo = new GameRoleInfo(); roleInfo.setServerID(_json.getString("sid")); roleInfo.setServerName(_json.getString("serverName")); roleInfo.setGameRoleName(_json.getString("roleName").trim().replace(" ", "")); roleInfo.setGameRoleID(_json.getString("roleID")); roleInfo.setGameBalance(_json.getString("money")); roleInfo.setVipLevel( _json.getString("vipLevel")); //设置当前用户vip等级,必须为数字整型字符串,请勿传"vip1"等类似字符串 roleInfo.setGameUserLevel(_json.getString("level"));//设置游戏角色等级 roleInfo.setPartyName(_json.getString("familyName").trim().replace(" ", ""));//设置帮派名称 roleInfo.setRoleCreateTime( _json.getString("createTime")); //UC,当乐与1881,TT渠道必传,值为10位数时间戳 roleInfo.setPartyId("1100"); //360渠道参数,设置帮派id,必须为整型字符串 roleInfo.setGameRolePower("38"); //360,TT语音渠道参数,设置角色战力,必须为整型字符串 roleInfo.setPartyRoleId("11"); //360渠道参数,设置角色在帮派中的id roleInfo.setPartyRoleName("帮主"); //360渠道参数,设置角色在帮派中的名称 roleInfo.setProfessionId("38"); //360渠道参数,设置角色职业id,必须为整型字符串 roleInfo.setProfession("法师"); //360渠道参数,设置角色职业名称 roleInfo.setFriendlist( "无"); //360渠道参数,设置好友关系列表,格式请参考:http://open.quicksdk.net/help/detail/aid/190 User.getInstance().setGameRoleInfo(_activity, roleInfo, true); // QuickPlatformUtil.getInstance().createRole(_activity, // _json.getString("sid"), // _json.getString("serverName"), // _json.getString("roleID"), // _json.getString("roleName").trim() // .replace(" ", ""), // _json.getString("level"), // _json.getString("familyName").trim() // .replace(" ", ""), // _json.getString("createTime"), // _json.getString("vipLevel"), // _json.getString("money")); break; case CodeU2A.RoleLogin: GameRoleInfo roleInfo1 = new GameRoleInfo(); roleInfo1.setServerID(_json.getString("sid")); roleInfo1.setServerName(_json.getString("serverName")); roleInfo1.setGameRoleName(_json.getString("roleName").trim().replace(" ", "")); roleInfo1.setGameRoleID(_json.getString("roleID")); roleInfo1.setGameBalance(_json.getString("money")); roleInfo1.setVipLevel( _json.getString("vipLevel")); //设置当前用户vip等级,必须为数字整型字符串,请勿传"vip1"等类似字符串 roleInfo1.setGameUserLevel(_json.getString("level"));//设置游戏角色等级 roleInfo1.setPartyName(_json.getString("familyName").trim().replace(" ", ""));//设置帮派名称 roleInfo1.setRoleCreateTime( _json.getString("createTime")); //UC,当乐与1881,TT渠道必传,值为10位数时间戳 roleInfo1.setPartyId("1100"); //360渠道参数,设置帮派id,必须为整型字符串 roleInfo1.setGameRolePower("38"); //360,TT语音渠道参数,设置角色战力,必须为整型字符串 roleInfo1.setPartyRoleId("11"); //360渠道参数,设置角色在帮派中的id roleInfo1.setPartyRoleName("帮主"); //360渠道参数,设置角色在帮派中的名称 roleInfo1.setProfessionId("38"); //360渠道参数,设置角色职业id,必须为整型字符串 roleInfo1.setProfession("法师"); //360渠道参数,设置角色职业名称 roleInfo1.setFriendlist( "无"); //360渠道参数,设置好友关系列表,格式请参考:http://open.quicksdk.net/help/detail/aid/190 User.getInstance().setGameRoleInfo(_activity, roleInfo1, false); // QuickPlatformUtil.getInstance().enterWorld(_activity, // _json.getString("sid"), // _json.getString("serverName"), // _json.getString("roleID"), // _json.getString("roleName").trim() // .replace(" ", ""), // _json.getString("level"), // _json.getString("familyName").trim() // .replace(" ", ""), // _json.getString("vipLevel"), // _json.getString("money")); verifyRealName(_activity); break; case CodeU2A.RoleLevelUp: GameRoleInfo roleInfo2 = new GameRoleInfo(); roleInfo2.setServerID(_json.getString("sid")); roleInfo2.setServerName(_json.getString("serverName")); roleInfo2.setGameRoleName(_json.getString("roleName").trim().replace(" ", "")); roleInfo2.setGameRoleID(_json.getString("roleID")); roleInfo2.setGameBalance(_json.getString("money")); roleInfo2.setVipLevel( _json.getString("vipLevel")); //设置当前用户vip等级,必须为数字整型字符串,请勿传"vip1"等类似字符串 roleInfo2.setGameUserLevel(_json.getString("level"));//设置游戏角色等级 roleInfo2.setPartyName(_json.getString("familyName").trim().replace(" ", ""));//设置帮派名称 roleInfo2.setRoleCreateTime( _json.getString("createTime")); //UC,当乐与1881,TT渠道必传,值为10位数时间戳 roleInfo2.setPartyId("1100"); //360渠道参数,设置帮派id,必须为整型字符串 roleInfo2.setGameRolePower("38"); //360,TT语音渠道参数,设置角色战力,必须为整型字符串 roleInfo2.setPartyRoleId("11"); //360渠道参数,设置角色在帮派中的id roleInfo2.setPartyRoleName("帮主"); //360渠道参数,设置角色在帮派中的名称 roleInfo2.setProfessionId("38"); //360渠道参数,设置角色职业id,必须为整型字符串 roleInfo2.setProfession("法师"); //360渠道参数,设置角色职业名称 roleInfo2.setFriendlist( "无"); //360渠道参数,设置好友关系列表,格式请参考:http://open.quicksdk.net/help/detail/aid/190 User.getInstance().setGameRoleInfo(_activity, roleInfo2, false); // QuickPlatformUtil.getInstance().levelUp(_activity, // _json.getString("sid"), // _json.getString("serverName"), // _json.getString("roleID"), // _json.getString("roleName").trim() // .replace(" ", ""), // _json.getString("level"), // _json.getString("familyName").trim() // .replace(" ", ""), // _json.getString("createTime"), // _json.getString("levelUpTime"), // _json.getString("vipLevel"), // _json.getString("money")); break; case CodeU2A.ClientPackage: break; case CodeU2A.JPushAddLocalMessage: addLocalNotification(_activity, _json.getInt("id"), _json.getString("title"), _json.getString("content"), _json.getLong("fireTime")); break; case CodeU2A.JPushRemoveLocalMessage: removeNotification(_activity, _json.getInt("id")); break; case CodeU2A.TencentLogin: //QuickPlatformUtil.getInstance().loginTencent(_activity, _json.getString("param")); break; case CodeU2A.SendRegistEvent: //QuickPlatformUtil.getInstance().SendRegisterEvent(); break; } } catch (JSONException e) { e.printStackTrace(); } } // 本地推送 public static void addLocalNotification(Activity activity, int id, String title, String content, long fireTime) { if (PushEnable) { try { JPushLocalNotification ln = new JPushLocalNotification(); ln.setBuilderId(0);// 设置样式 ln.setNotificationId(id);// id ln.setTitle(title);// 标题 ln.setContent(content);// 内容 ln.setBroadcastTime(fireTime);// 等待时间 JPushInterface.addLocalNotification(activity, ln); } catch (Exception e) { e.printStackTrace(); } } } public static void removeNotification(Activity activity, int id) { if (PushEnable) { JPushInterface.removeLocalNotification(activity, id); } } public static void GetExternalStorage() { Map _msg = new HashMap<>(); _msg.put("code", CodeA2U.ExternalStorage); _msg.put("path", Environment.getExternalStorageDirectory().getAbsolutePath()); UniversalUtil.sendMessageToUnity(_msg); } public static void InstallApp(Activity activity, String path) { File _file = new File(path); if (_file == null) { LogUtil.i(TAG, "找不到给定地址的apk: " + path); return; } try { Intent _intent = new Intent(Intent.ACTION_VIEW); if (Build.VERSION.SDK_INT >= 23) { _intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); Uri _contentUri = FileProvider.getUriForFile(activity, "com.shandangceshi.snxxz.fileProvider", _file); _intent.setDataAndType(_contentUri, "application/vnd.android.package-archive"); } else { _intent.setDataAndType(Uri.fromFile(_file), "application/vnd.android.package-archive"); _intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } activity.startActivity(_intent); } catch (Exception e) { e.printStackTrace(); Toast.makeText(activity, "没有找到打开此类文件的程序", Toast.LENGTH_SHORT).show(); } } public static void CopyContent(final Activity activity, final String content) { activity.runOnUiThread(new Runnable() { @Override public void run() { ClipboardManager _mgr = (ClipboardManager) activity.getSystemService( Context.CLIPBOARD_SERVICE); ClipData _data = ClipData.newPlainText("playerId", content); _mgr.setPrimaryClip(_data); } }); } public static void RestartApp(final Activity activity) { activity.runOnUiThread(new Runnable() { @Override public void run() { new Thread() { public void run() { String _pn = activity.getPackageName(); PackageManager _pm = activity.getPackageManager(); Intent _l = _pm.getLaunchIntentForPackage(_pn); _l.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); activity.startActivity(_l); android.os.Process.killProcess(android.os.Process.myPid()); } }.start(); activity.finish(); } }); } public static void init(final Activity activity) { final int _memoryTotal = (int) (UniversalUtil.getMemTotal() / 1024); if (_memoryTotal < 1024) { LogUtil.i(TAG, "检测设备内存不满足运行程序标准"); AlertDialog.Builder _builder = new AlertDialog.Builder(activity); _builder.setIcon(R.drawable.app_icon); _builder.setTitle("警告"); _builder.setMessage("您的手机内存不足,无法正常运行游戏"); _builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { android.os.Process.killProcess(android.os.Process.myPid()); } }); _builder.show(); return; } //PushEnable = activity.getPackageName().equals("com.xjaz.sp"); new Thread(new Runnable() { @Override public void run() { LogUtil.i(TAG, "开始执行初始化"); GetExternalStorage(); // ------------------------------- 设备信息 ------------------------------- Map _msgStruct = new HashMap<>(); _msgStruct.put("code", CodeA2U.DeviceInfo); _msgStruct.put("userAgent", System.getProperty("http.agent")); _msgStruct.put("mac", UniqueID.getLocalMac(activity)); _msgStruct.put("imei", UniqueID.getDeviceId(activity)); _msgStruct.put("android_id", Settings.System.getString(activity.getContentResolver(), Settings.System.ANDROID_ID)); _msgStruct.put("unique_id", UniqueID.get(activity)); _msgStruct.put("memoryTotal", _memoryTotal); UniversalUtil.sendMessageToUnity(_msgStruct); // ------------------------------- 极光推送 ------------------------------- String _registrationID = "0"; if (PushEnable) { JPushInterface.setDebugMode(true); JPushInterface.init(activity); final long _waitingTime = System.currentTimeMillis(); while (true) { // 等待获取极光registrationID if (!JPushInterface.getRegistrationID(activity).equals("")) { _registrationID = JPushInterface.getRegistrationID(activity); break; } long _escapeTime = System.currentTimeMillis() - _waitingTime; if (_escapeTime > 3000) { LogUtil.w(TAG, "等待获取极光推送registrationID超时: 3秒"); break; } } } _msgStruct.clear(); _msgStruct.put("code", CodeA2U.PushClientID); _msgStruct.put("clientID", _registrationID); UniversalUtil.sendMessageToUnity(_msgStruct); _msgStruct.clear(); _msgStruct.put("code", CodeA2U.SdkInitComplete); _msgStruct.put("channelPlatform", "quick"); //根据appid是否相同和后台配置 可调整混服和专服 //打包工具可添加自定义参数 String _appid = com.quicksdk.Extend.getInstance().getExtrasConfig("zfappid"); if (_appid == "") { //没有打包的自定义参数则取配置表 _appid = APP_ID; } //通知到unity中的账号已经加上渠道ID,保证appid和spid唯一对应, 需要注意和sdk交互时使用最原始的uid _msgStruct.put("yj_appid", _appid); _msgStruct.put("yj_spid", _appid); UniversalUtil.sendMessageToUnity(_msgStruct); LogUtil.i(TAG, "初始化执行完毕"); } }).start(); } public static void onCreate(Activity activity, Bundle savedInstanceState) { Sdk.getInstance().onCreate(activity); try { // check权限 if ((ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) || (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) { // 没有 , 申请权限 权限数组 ActivityCompat.requestPermissions(activity, new String[] { Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE }, 1); } else { QuickPlatformUtil.getInstance().onCreate(); Sdk.getInstance().init(activity,"96065423134516611008224414549989", "69623854"); } } catch (Exception e) { QuickPlatformUtil.getInstance().onCreate(); Sdk.getInstance().init(activity, "96065423134516611008224414549989", "69623854"); } QuickSDK.getInstance().setIsLandScape(true); } private static boolean m_IsFocus = true; public static void onWindowFocusChanged(boolean b) { if (b) { if (QuickPlatformUtil.getInstance().payProcessing) { Map _msgStruct = new HashMap<>(); _msgStruct.put("code", CodeA2U.FreePlatformPayCancel); UniversalUtil.sendMessageToUnity(_msgStruct); QuickPlatformUtil.getInstance().payProcessing = false; } } m_IsFocus = b; } public static void onNewIntent(final Activity activity, final Intent intent) { Sdk.getInstance().onNewIntent(intent); } public static void onActivityResult(int requestCode, int resultCode, final Intent data, final Activity activity) { Sdk.getInstance().onActivityResult(activity, requestCode, resultCode, data); } public static void onConfigurationChanged(final Configuration newConfig) {} public static void onRestart(final Activity activity) { Sdk.getInstance().onRestart(activity); } public static void onStart(final Activity activity) { Sdk.getInstance().onStart(activity); } public static void onPause(final Activity activity) { Sdk.getInstance().onPause(activity); } public static void onResume(final Activity activity) { Sdk.getInstance().onResume(activity); } public static void onStop(final Activity activity) { Sdk.getInstance().onStop(activity); } public static void onDestroy(final Activity activity) { Sdk.getInstance().onDestroy(activity); } private static void verifyRealName(final Activity activity) { activity.runOnUiThread(new Runnable() { @Override public void run() { // 判断渠道是否支持实名认证功能 if (com.quicksdk.Extend.getInstance().isFunctionSupported(com.quicksdk.FuncType.REAL_NAME_REGISTER)) { com.quicksdk.Extend.getInstance().callFunctionWithParamsCallBack(activity, com.quicksdk.FuncType.REAL_NAME_REGISTER, new com.quicksdk.BaseCallBack() { @Override public void onSuccess(Object... arg0) { if (arg0 != null && arg0.length > 0) { JSONObject jsonObject = (JSONObject) arg0[0]; Log.d("json", "==========" + jsonObject.toString()); try { // 用户id String uid = jsonObject.getString("uid"); // 年龄, 如果渠道没返回默认为-1 int age = jsonObject.getInt("age"); // 是否已实名 true表示已实名 // false表示未实名,如果渠道没返回默认为false boolean realName = jsonObject.getBoolean("realName"); // oppo实名认证失败之后是否可以继续游戏 true表示可以 // false表示不可以,如果渠道没返回默认为true boolean resumeGame = jsonObject.getBoolean("resumeGame"); // 预留字段,如果渠道没返回默认为""的字符串 String other = jsonObject.getString("other"); // 游戏根据返回信息做对应的逻辑处理 } catch (JSONException e) { } } } @Override public void onFailed(Object... arg0) { } }); } } }); } }