hch
2022-07-25 0f720197c208158d13ba2bb7da49fdde4dceb1a7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
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);
//            }
            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.e("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);
                }
            });
    }
 
}