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.secondworld.sdk.utils.CodeA2U; import com.secondworld.sdk.utils.LogUtil; import com.secondworld.sdk.utils.RequestCode; import com.smwl.smsdk.abstrat.SMInitListener; import com.smwl.smsdk.abstrat.SMLoginListener; import com.smwl.smsdk.abstrat.SMPayListener; import com.smwl.smsdk.app.SMPlatformManager; import com.smwl.smsdk.bean.PayInfo; import com.smwl.smsdk.bean.RoleInfo; import com.smwl.smsdk.bean.SMUserInfo; 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; 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.register(PlatformDiff.I.platformProductCode(), PlatformDiff.I.platformProductKey()); // QuickSdkMgr.I.init(activity); // } LogUtil.i("requestPermissions","x7申请权限,游戏直接启动初始化"); 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.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestCode.QUICK); } } public void onRequestPermissionsResult(Activity activity, int requestCode, int[] grantResults) { LogUtil.i("onRequestPermissionsResult",String.format("%d-%d", requestCode, grantResults[0])); if (requestCode != RequestCode.QUICK) return; // if (hasPermissions(activity)) { // //申请成功 // 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) requestPermissions(activity); } public void init(Activity activity) { sdkInitState = SdkInitState.LOADING; } public void login() { switch (sdkInitState) { case FAILED: case UNKNOWN: { if (GameActivityProxy.I.activity == null) return; if (hasPermissions(GameActivityProxy.I.activity)) { Toast.makeText(GameAppProxy.app, "异常请重启游戏", Toast.LENGTH_LONG).show(); } break; } case SUCCEED: { GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { //用户登陆进入游戏和用户登出退出游戏的回调 SMPlatformManager.getInstance ().login (GameActivityProxy.I.activity, new SMLoginListener() { @Override public void onLoginSuccess(SMUserInfo loginInfo) { //客户端登录成功后,会通过如下方式得到token值,游戏客户端传token给自己服务器 LogUtil.e("SdkManager", "登录成功"); try { args.clear(); JSONObject info = new JSONObject(); info.put("token", loginInfo.getTokenkey()); args.put("info", info); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginOk, args); } catch (JSONException e) { e.printStackTrace(); LogUtil.e("SdkManager 登录成功", e); } } @Override public void onLoginFailed(String reason) { LogUtil.e("SdkManager", "登录失败:"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); } @Override public void onLoginCancell(String reason) { //登陆取消 LogUtil.e("SdkManager", "登录失败:"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); } @Override public void onLogoutSuccess() { //登出的前提是:已经登录成功了 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLogoutOk); } }); } }); break; } case LOADING: { Toast.makeText(GameAppProxy.app, "正在初始化中,请稍等!", Toast.LENGTH_LONG).show(); break; } } } public void setGameRoleInfo(RoleInfo roleInfo) { if (GameActivityProxy.I.activity == null) return; GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { SMPlatformManager.getInstance().smAfterChooseRoleSendInfo(GameActivityProxy.I.activity, roleInfo); } }); } public void pay(PayInfo payInfo) { if (GameActivityProxy.I.activity == null) return; GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { SMPlatformManager.getInstance ().Pay (GameActivityProxy.I.activity, payInfo, new SMPayListener() { @Override public void onPaySuccess(Object obj) { //支付成功 //sdkOrderID:quick订单号 cpOrderID:游戏订单号 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayOk); } @Override public void onPayFailed(Object obj) { //支付失败 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayFail); } @Override public void onPayCancell(Object obj) { //支付取消 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayCancel); } }); } }); } public void register(String productCode, String productKey) { this.productCode = productCode; this.productKey = productKey; //程序的入口执行初始化操作:一般放在游戏入口的activity里面用主线程调用 SMPlatformManager.getInstance().init(GameActivityProxy.I.activity, productCode, new SMInitListener() { @Override public void onSuccess() { sdkInitState = SdkInitState.SUCCEED; LogUtil.debug("SdkManager", "初始化成功"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitOk); } @Override public void onFail(String reason) { //初始化失败 sdkInitState = SdkInitState.FAILED; LogUtil.e("SdkManager", "初始化失败 msg:" + reason); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitFail); } }); } }