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 {
|
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);
|
}
|
|
}
|
catch (Exception e) {
|
LogUtil.i("SdkManager", "requestPermissions 初始化SDK失败");
|
}
|
}
|
|
public void onRequestPermissionsResult(Activity activity, int requestCode, int[] grantResults) {
|
if (requestCode != RequestCode.QUICK) return;
|
|
//1768渠道一定需要权限
|
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("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);
|
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) {
|
//退出失败,不做处理
|
}
|
});
|
}
|
|
}
|