| 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; | 
|   | 
|     public 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); | 
|   | 
|         String[] permissionStr = PlatformDiff.I.platformPermission(); | 
|         for (int i = 0; i < permissionStr.length; i++) | 
|         { | 
|             if (ContextCompat.checkSelfPermission(activity, permissionStr[i]) != PackageManager.PERMISSION_GRANTED) | 
|             { | 
|                 return false; | 
|             } | 
|         } | 
|         return true; | 
|     } | 
|   | 
|     public void requestPermissions(Activity activity) { | 
|   | 
|         try { | 
|             if (!hasPermissions(activity)) { | 
|                 ActivityCompat.requestPermissions(activity, PlatformDiff.I.platformPermission(), 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, String[] permissions) { | 
|         if (requestCode != RequestCode.QUICK) return; | 
|   | 
|   | 
|         if (hasPermissions(activity)) { | 
|             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("unity-sdk", "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); | 
|                 } | 
|                 PlatformDiff.I.LoginSuccess(); | 
|                 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); | 
|                 if (GameActivityProxy.I.activity == null) | 
|                 { | 
|                     UnityMsgHandler.sendMessageToUnity(CodeA2U.ExitGame); | 
|                     return; | 
|                 } | 
|                 LogUtil.i("SdkManager", "activity退出"); | 
|                 GameActivityProxy.I.activity.finish(); | 
|                 android.os.Process.killProcess(android.os.Process.myPid()); | 
|                 System.exit(0); | 
|   | 
|   | 
|             } | 
|   | 
|             @Override | 
|             public void onFailed(String message, String trace) { | 
|                 //退出失败,不做处理 | 
|             } | 
|         }); | 
|     } | 
|   | 
| } |