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 android.support.v4.app.ActivityCompat; import android.support.v4.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 com.secondworld.sdk.PlatformDiff; import org.json.JSONException; import org.json.JSONObject; public class QuickSdkMgr extends PlatformSdkMgr { public static QuickSdkMgr I = new QuickSdkMgr(); String productCode; String productKey; public String channelID; 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); return 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.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); // } else { // QuickSdkMgr.I.register(PlatformDiff.I.platformProductCode(), PlatformDiff.I.platformProductKey()); // QuickSdkMgr.I.init(activity); // } // } catch (Exception e) { // //QuickSdkMgr.I.init(activity); // ActivityCompat.requestPermissions(activity, new String[]{ // Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); // } // ActivityCompat.requestPermissions(activity, new String[]{ // Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); try { if (false) { ActivityCompat.requestPermissions(activity, new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); } else { QuickSdkMgr.I.register(PlatformDiff.I.platformProductCode(), PlatformDiff.I.platformProductKey()); QuickSdkMgr.I.init(activity); } } catch (Exception e) { LogUtil.i("SdkManager", "requestPermissions 初始化SDK失败"); } } public void onRequestPermissionsResult(Activity activity, int requestCode, int[] grantResults) { if (requestCode != RequestCode.QUICK) return; //1768渠道一定需要权限 if (true) { LogUtil.i("SdkManager", "onRequestPermissionsResult 申请成功"); //申请成功 QuickSdkMgr.I.register(PlatformDiff.I.platformProductCode(), PlatformDiff.I.platformProductKey()); 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) { LogUtil.i("SdkManager", "onActivityResult"); 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); GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { 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); GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { 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); GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { 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); GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { 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(); channelID = com.quicksdk.Extend.getInstance().getExtrasConfig("channel"); if (channelID == null || channelID.isEmpty()) channelID = com.quicksdk.Extend.getInstance().getChannelType() + ""; String account = userInfo.getUID() + "@" + channelID; 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) { //退出失败,不做处理 } }); } }