package com.secondworld.sdk; import android.Manifest; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.provider.Settings; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import android.widget.Toast; import com.quicksdk.BaseCallBack; import com.quicksdk.Extend; import com.quicksdk.FuncType; import com.quicksdk.Payment; 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.entity.UserInfo; import com.quicksdk.notifier.ExitNotifier; import com.quicksdk.notifier.InitNotifier; import com.quicksdk.notifier.LoginNotifier; import com.quicksdk.notifier.LogoutNotifier; import com.quicksdk.notifier.PayNotifier; import com.quicksdk.notifier.SwitchAccountNotifier; import com.secondworld.sdk.utils.CodeA2U; import com.secondworld.sdk.utils.LogUtil; import com.secondworld.sdk.utils.RequestCode; import com.unity3d.player.UnityPlayer; import org.json.JSONException; import org.json.JSONObject; public class QuickSdkMgr extends PlatformSdkMgr { public static QuickSdkMgr I = new QuickSdkMgr(); String productCode; String productKey; int REQUEST_RECORD_PERMISSION_SETTING = 110; private boolean hasPermissions(Activity activity) { return (ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED); } public void requestPermissions(Activity activity) { try { // check权限 if (!hasPermissions(activity)) { // 没有则申请权限 ActivityCompat.requestPermissions(activity, new String[]{ Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); } else { QuickSdkMgr.I.init(activity); } } catch (Exception e) { QuickSdkMgr.I.init(activity); } } public void onRequestPermissionsResult(Activity activity, int requestCode, int[] grantResults) { if (requestCode != RequestCode.QUICK) return; if (hasPermissions(activity)) { QuickSdkMgr.I.init(activity); return; } final AlertDialog.Builder normalDialog = new AlertDialog.Builder(activity); normalDialog.setTitle("权限设置"); normalDialog.setMessage("游戏需要部分权限才能正常运行,请前往设置中打开电话权限与存储权限"); normalDialog.setPositiveButton("前往设置", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", activity.getPackageName(), null); intent.setData(uri); activity.startActivityForResult(intent, REQUEST_RECORD_PERMISSION_SETTING); dialog.dismiss(); } }); normalDialog.setNegativeButton("退出", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { GameAppProxy.appExit(); } }); // 显示 normalDialog.show(); } public void onActivityResult(Activity activity, int requestCode) { if (requestCode == REQUEST_RECORD_PERMISSION_SETTING) requestPermissions(activity); } public void init(Activity activity) { sdkInitState = SdkInitState.LOADING; Sdk.getInstance().init(activity, productCode, productKey); } public void login() { switch (sdkInitState) { case FAILED: case UNKNOWN: { if (GameActivityProxy.I.activity == null) return; if (hasPermissions(GameActivityProxy.I.activity)) { init(BtGameMain.I.activity); Toast.makeText(GameAppProxy.app, "正在初始化中,请稍等", Toast.LENGTH_LONG).show(); } break; } case SUCCEED: { User.getInstance().login(GameActivityProxy.I.activity); break; } case LOADING: { Toast.makeText(GameAppProxy.app, "正在初始化中,请稍等", Toast.LENGTH_LONG).show(); break; } } } public void loginOut() { if (GameActivityProxy.I.activity == null) return; User.getInstance().logout(GameActivityProxy.I.activity); } public void setGameRoleInfo(GameRoleInfo roleInfo, boolean createRole) { if (GameActivityProxy.I.activity == null) return; User.getInstance().setGameRoleInfo(GameActivityProxy.I.activity, roleInfo, createRole); } public void pay(OrderInfo orderInfo, GameRoleInfo roleInfo) { if (GameActivityProxy.I.activity == null) return; Payment.getInstance().pay(GameActivityProxy.I.activity, orderInfo, roleInfo); } public void verifyRealName() { if (GameActivityProxy.I.activity == null) return; // 判断渠道是否支持实名认证功能 if (Extend.getInstance().isFunctionSupported(FuncType.REAL_NAME_REGISTER)) { Extend.getInstance().callFunctionWithParamsCallBack(GameActivityProxy.I.activity, FuncType.REAL_NAME_REGISTER, new BaseCallBack() { @Override public void onSuccess(Object... arg0) { if (arg0 != null && arg0.length > 0) { JSONObject jsonObject = (JSONObject) arg0[0]; 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) { } }); } } public void register(String productCode, String productKey) { this.productCode = productCode; this.productKey = productKey; QuickSDK.getInstance().setInitNotifier(new InitNotifier() { @Override public void onSuccess() { //初始化成功 sdkInitState = SdkInitState.SUCCEED; LogUtil.debug("SdkManager", "初始化成功"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitOk); } @Override public void onFailed(String message, String trace) { //初始化失败 sdkInitState = SdkInitState.FAILED; LogUtil.e("SdkManager", "初始化失败 msg:" + message); LogUtil.e("SdkManager", "初始化失败 trace:" + trace); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitFail); } }); QuickSDK.getInstance().setLoginNotifier(new LoginNotifier() { @Override public void onSuccess(UserInfo userInfo) { //登录成功,获取到用户信息userInfo //通过userInfo中的UID、token做服务器登录认证 LogUtil.e("SdkManager", "登录成功"); try { args.clear(); JSONObject info = new JSONObject(); String cid = com.quicksdk.Extend.getInstance().getExtrasConfig("cid"); if (cid == null || cid.isEmpty()) cid = com.quicksdk.Extend.getInstance().getChannelType() + ""; String account = userInfo.getUID() + "@" + cid; info.put("account", account); info.put("userName", userInfo.getUID()); info.put("token", userInfo.getToken()); args.put("info", info); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginOk, args); } catch (JSONException e) { e.printStackTrace(); LogUtil.e("SdkManager 登录成功", e); } verifyRealName(); } @Override public void onCancel() { //登录取消 LogUtil.e("SdkManager", "登录失败:"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); } @Override public void onFailed(final String message, String trace) { //登录失败 LogUtil.e("SdkManager", "登录失败:"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); } }); QuickSDK.getInstance().setLogoutNotifier(new LogoutNotifier() { @Override public void onSuccess() { //注销成功 //注销成功,需要把游戏切换回登陆前的场景,并重新弹出登录框等操作 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLogoutOk); } @Override public void onFailed(String message, String trace) { //注销失败,不做处理 } }); QuickSDK.getInstance().setSwitchAccountNotifier(new SwitchAccountNotifier() { @Override public void onSuccess(UserInfo userInfo) { //切换账号成功的回调,返回新账号的userInfo LogUtil.e("SdkManager", "切换账号成功"); try { args.clear(); JSONObject info = new JSONObject(); String cid = com.quicksdk.Extend.getInstance().getExtrasConfig("cid"); if (cid == null || cid.isEmpty()) cid = com.quicksdk.Extend.getInstance().getChannelType() + ""; String account = userInfo.getUID() + "@" + cid; info.put("account", account); info.put("userName", userInfo.getUID()); info.put("token", userInfo.getToken()); args.put("info", info); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformSwitchAccountOk, args); } catch (JSONException e) { e.printStackTrace(); LogUtil.e("SdkManager 登录成功", e); } } @Override public void onCancel() { //切换账号取消 } @Override public void onFailed(String message, String trace) { //切换账号失败 } }); QuickSDK.getInstance().setPayNotifier(new PayNotifier() { @Override public void onSuccess(String sdkOrderID, String cpOrderID, String extrasParams) { //支付成功 //sdkOrderID:quick订单号 cpOrderID:游戏订单号 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayOk); } @Override public void onCancel(String cpOrderID) { //支付取消 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayCancel); } @Override public void onFailed(String cpOrderID, String message, String trace) { //支付失败 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayFail); } }); QuickSDK.getInstance().setExitNotifier(new ExitNotifier() { @Override public void onSuccess() { //退出成功,游戏在此做自身的退出逻辑处理 UnityMsgHandler.sendMessageToUnity(CodeA2U.ExitGame); } @Override public void onFailed(String message, String trace) { //退出失败,不做处理 } }); } }