MainPresenter.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. package org.cocos2dx.javascript.presenter;
  2. import android.content.pm.ApplicationInfo;
  3. import android.content.pm.PackageManager;
  4. import android.graphics.Color;
  5. import android.os.Handler;
  6. import android.os.Message;
  7. import android.os.Process;
  8. import android.support.annotation.NonNull;
  9. import android.text.TextUtils;
  10. import android.view.KeyEvent;
  11. import android.webkit.JavascriptInterface;
  12. import android.widget.Toast;
  13. import com.alipay.sdk.app.PayTask;
  14. import com.edufound.mobile.wxapi.WXPayEntryActivity;
  15. import com.google.gson.Gson;
  16. import com.mobile.auth.gatewayauth.PhoneNumberAuthHelper;
  17. import com.mobile.auth.gatewayauth.TokenResultListener;
  18. import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram;
  19. import com.tencent.mm.opensdk.modelpay.PayReq;
  20. import com.tencent.mm.opensdk.openapi.IWXAPI;
  21. import com.tencent.mm.opensdk.openapi.WXAPIFactory;
  22. import com.umeng.commonsdk.UMConfigure;
  23. import org.cocos2dx.javascript.AppActivity;
  24. import org.cocos2dx.javascript.bean.AliPayResult;
  25. import org.cocos2dx.javascript.util.Consts;
  26. import org.cocos2dx.javascript.util.DeviceUtil;
  27. import org.cocos2dx.javascript.util.DeviceUuidFactory;
  28. import org.cocos2dx.javascript.util.Logger;
  29. import org.cocos2dx.javascript.util.PackageUtil;
  30. import org.cocos2dx.lib.Cocos2dxJavascriptJavaBridge;
  31. import org.json.JSONException;
  32. import org.json.JSONObject;
  33. import java.util.HashMap;
  34. import java.util.Map;
  35. import static org.cocos2dx.lib.Cocos2dxHelper.runOnGLThread;
  36. public class MainPresenter {
  37. private static AppActivity mActivity;
  38. private static DeviceUtil mDeviceUtil;
  39. private static PackageUtil mPackageUtil;
  40. private static Gson mGson;
  41. private static boolean autoLogin;
  42. PhoneNumberAuthHelper mPhoneNumberAuthHelper;
  43. private static String loginToken;
  44. //微信api
  45. private static IWXAPI WX_API;
  46. //微信appid
  47. public static String WX_APPID = "wx51acc19c8f7a0f6f";
  48. public static String WX_SECRET = "e830d45f497025041269ef6221140c3d";
  49. //channel
  50. public static String mChannelCode;
  51. public MainPresenter(AppActivity activity) {
  52. mActivity = activity;
  53. mGson = new Gson();
  54. mDeviceUtil = new DeviceUtil();
  55. mPackageUtil = new PackageUtil(activity);
  56. new DeviceUuidFactory(Consts.mApplicatonContext);
  57. mPhoneNumberAuthHelper = PhoneNumberAuthHelper.getInstance(mActivity, mTokenResultListener);
  58. mPhoneNumberAuthHelper.setAuthSDKInfo("BzFbe8Ud13a0fixI18bD2CRzO5U7iz4Xf7hS5aiftwGJLOBypQraiKdFd5IHgK9wTYW9Plr6+m8pH3cHqSjCOImr8HXf3NYTUCOyePsoUaKrX9qQGIbSZ7KvVMoyUY0FIUsA4hXiv873ZS6uIdMg5aU2Xx9hh+y0bAbsl0PnXQOShlZ/sdyRj8JiQibEel6LlvwFiy5f3l3ML3ojVvCNVhe6aH4f/Plx5hBcRRIf5Bv3oAY6FY6n6pNwNmCLUDRiy2A3bWp2gH6N6uTTaOZi308ylelFPZ17");
  59. mPhoneNumberAuthHelper.checkEnvAvailable(2);
  60. WX_API = WXAPIFactory.createWXAPI(Consts.mApplicatonContext, WX_APPID);
  61. WX_API.registerApp(WX_APPID);
  62. // mPhoneNumberAuthHelper.getVerifyToken(5000);
  63. // handler.sendEmptyMessageDelayed(1, 5000);
  64. }
  65. Handler handler = new Handler(new Handler.Callback() {
  66. @Override
  67. public boolean handleMessage(@NonNull Message message) {
  68. switch (message.what) {
  69. case 1:
  70. mPhoneNumberAuthHelper.getLoginToken(mActivity, 5000);
  71. break;
  72. }
  73. return false;
  74. }
  75. });
  76. public static String getVersionCode() {
  77. return mDeviceUtil.getVersionCode(mActivity);
  78. }
  79. public static void showToast(final String message) {
  80. mActivity.runOnUiThread(new Runnable() {
  81. @Override
  82. public void run() {
  83. Toast.makeText(mActivity, message, Toast.LENGTH_SHORT).show();
  84. }
  85. });
  86. }
  87. public static String getSystemAppsJson() {
  88. return mGson.toJson(mPackageUtil.getSystemAppList()).toString();
  89. }
  90. public static String getOtherAppsJson() {
  91. return mGson.toJson(mPackageUtil.getOtherAppList()).toString();
  92. }
  93. public static void hideGameScene() {
  94. mActivity.runOnUiThread(new Runnable() {
  95. @Override
  96. public void run() {
  97. // mActivity.getGLSurfaceView().setVisibility(View.GONE);
  98. mActivity.getGLSurfaceView().setZOrderOnTop(true);
  99. // mActivity.getGLSurfaceView().setBackgroundColor(Color.TRANSPARENT);
  100. }
  101. });
  102. }
  103. public static void hideSplashImage() {
  104. mActivity.runOnUiThread(new Runnable() {
  105. @Override
  106. public void run() {
  107. mActivity.removeSplashImage();
  108. }
  109. });
  110. }
  111. public static void exitApp() {
  112. mActivity.runOnUiThread(new Runnable() {
  113. @Override
  114. public void run() {
  115. mActivity.finish();
  116. android.os.Process.killProcess(Process.myPid());
  117. }
  118. });
  119. }
  120. //返回一键登录初始化成功还是失败
  121. public static String getAutoLoginSuccess() {
  122. Logger.e("autoLogin:" + autoLogin);
  123. return String.valueOf(autoLogin);
  124. }
  125. //返回deviceCode
  126. public static String getLoginToken() {
  127. Logger.e("getLoginToken:" + loginToken);
  128. return loginToken;
  129. }
  130. //返回deviceCode
  131. public static String getDeviceCode() {
  132. Logger.e("调用getDeviceCode:" + DeviceUuidFactory.getUuid().toString());
  133. return DeviceUuidFactory.getUuid().toString();
  134. }
  135. public static void WeChatPay(String json) {
  136. if (!WX_API.isWXAppInstalled()) {
  137. Toast.makeText(mActivity, "请安装微信", Toast.LENGTH_SHORT).show();
  138. return;
  139. }
  140. Message msg = new Message();
  141. msg.obj = json;
  142. msg.what = 0xffbcd14;
  143. resultHandler.sendMessageDelayed(msg, 0);
  144. }
  145. public static void ALIPay(final String orderInfo) {
  146. Runnable payRunnable = new Runnable() {
  147. @Override
  148. public void run() {
  149. PayTask alipay = new PayTask(mActivity);
  150. Map<String, String> result = alipay.payV2(orderInfo, true);
  151. Message msg = new Message();
  152. msg.what = 0xffbcd15;
  153. msg.obj = result;
  154. resultHandler.sendMessage(msg);
  155. }
  156. };
  157. Thread payThread = new Thread(payRunnable);
  158. payThread.start();
  159. }
  160. @JavascriptInterface
  161. public void toMiniProgram(String programId, String path) {
  162. if (!WX_API.isWXAppInstalled()) {
  163. Toast.makeText(mActivity, "请安装微信", Toast.LENGTH_SHORT).show();
  164. return;
  165. }
  166. WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
  167. req.userName = programId; // 填小程序原始id
  168. req.path = path; //拉起小程序页面的可带参路径,不填默认拉起小程序首页
  169. req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;// 可选打开 开发版,体验版和正式版
  170. WX_API.sendReq(req);
  171. }
  172. public boolean onKeyDown(int keyCode, KeyEvent event) {
  173. switch (keyCode) {
  174. case KeyEvent.KEYCODE_BACK:
  175. case KeyEvent.KEYCODE_ESCAPE:
  176. mActivity.runOnGLThread(new Runnable() {
  177. @Override
  178. public void run() {
  179. Cocos2dxJavascriptJavaBridge.evalString("PUBLIC.keyBack()");
  180. }
  181. });
  182. return true;
  183. }
  184. return false;
  185. }
  186. TokenResultListener mTokenResultListener = new TokenResultListener() {
  187. @Override
  188. public void onTokenSuccess(String json) {
  189. try {
  190. JSONObject object = new JSONObject(json);
  191. String code = object.getString("code");
  192. autoLogin = true;
  193. loginToken = object.getString("token");
  194. } catch (JSONException e) {
  195. e.printStackTrace();
  196. }
  197. }
  198. @Override
  199. public void onTokenFailed(String json) {
  200. try {
  201. JSONObject object = new JSONObject(json);
  202. int code = Integer.valueOf(object.getString("code"));
  203. switch (code) {
  204. case 700000:
  205. case 700001:
  206. case 700002:
  207. case 700003:
  208. case 700004:
  209. break;
  210. default:
  211. autoLogin = false;
  212. break;
  213. }
  214. // Toast.makeText(mActivity, "errorCode:" + object.getString("code") + "--errorMsg:" + object.getString("msg"), Toast.LENGTH_LONG).show();
  215. } catch (JSONException e) {
  216. e.printStackTrace();
  217. }
  218. }
  219. };
  220. public static Handler resultHandler = new Handler(new Handler.Callback() {
  221. @Override
  222. public boolean handleMessage(Message msg) {
  223. switch (msg.what) {
  224. case 0xffbcd13:
  225. //微信回参回调
  226. WXPayEntryActivity.payBack bean = (WXPayEntryActivity.payBack) msg.obj;
  227. Map<String, String> map = new HashMap<>();
  228. map.put("errorCode", bean.errorCode + "");
  229. map.put("errStr", bean.errStr);
  230. map.put("transaction", bean.transaction);
  231. map.put("openId", bean.openId);
  232. final String wechatCallBackJson = mGson.toJson(map);
  233. mActivity.runOnGLThread(new Runnable() {
  234. @Override
  235. public void run() {
  236. Cocos2dxJavascriptJavaBridge.evalString("PUBLIC.WeChatPayCallBack('" + wechatCallBackJson + "')");
  237. }
  238. });
  239. break;
  240. case 0xffbcd14:
  241. //微信支付
  242. try {
  243. String jsonmessage = msg.obj.toString();
  244. if (jsonmessage != null && jsonmessage.length() > 0) {
  245. JSONObject json = new JSONObject(jsonmessage);
  246. if (null != json) {
  247. PayReq req = new PayReq();
  248. req.appId = json.getString("appid");
  249. req.partnerId = json.getString("partnerid");
  250. req.prepayId = json.getString("prepayid");
  251. req.nonceStr = json.getString("noncestr");
  252. req.timeStamp = json.getString("timestamp");
  253. req.packageValue = json.getString("package");
  254. req.sign = json.getString("sign");
  255. WX_API.sendReq(req);
  256. } else {
  257. Logger.e("返回错误" + json.getString("retmsg"));
  258. }
  259. } else {
  260. Logger.e("服务器请求错误");
  261. }
  262. } catch (Exception e) {
  263. Logger.e("异常:" + e.getMessage());
  264. }
  265. break;
  266. case 0xffbcd15:
  267. //支付宝支付
  268. AliPayResult payResult = new AliPayResult((Map<String, String>) msg.obj);
  269. final String resultInfo = payResult.getResult();// 同步返回需要验证的信息
  270. final String resultStatus = payResult.getResultStatus();
  271. Logger.e("resultInfo:" + resultInfo);
  272. Logger.e("resultStatus:" + resultStatus);
  273. // if (resultStatus.equals("4000")) {
  274. // Toast.makeText(mActivity, "未找到支付宝客户端", Toast.LENGTH_SHORT).show();
  275. // } else {
  276. mActivity.runOnGLThread(new Runnable() {
  277. @Override
  278. public void run() {
  279. Cocos2dxJavascriptJavaBridge.evalString("PUBLIC.AliPayCallback('" + resultInfo + "','" + resultStatus + "')");
  280. }
  281. });
  282. // }
  283. break;
  284. }
  285. return false;
  286. }
  287. });
  288. /*
  289. * 设置整体的window背景颜色(16进制)
  290. * */
  291. public static void setWindowFrameColor(final String color) {
  292. Logger.e("设置颜色:" + color);
  293. mActivity.runOnUiThread(new Runnable() {
  294. @Override
  295. public void run() {
  296. mActivity.getWindowFrame().setBackgroundColor(Color.parseColor(color));
  297. }
  298. });
  299. }
  300. public static String getChannelName() {
  301. if (mChannelCode != null || !mChannelCode.equals("")) {
  302. return mChannelCode;
  303. } else {
  304. try {
  305. PackageManager packageManager = Consts.mApplicatonContext.getPackageManager();
  306. if (packageManager != null) {
  307. //注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo
  308. ApplicationInfo applicationInfo = packageManager.
  309. getApplicationInfo(Consts.mApplicatonContext.getPackageName(), PackageManager.GET_META_DATA);
  310. if (applicationInfo != null) {
  311. if (applicationInfo.metaData != null) {
  312. mChannelCode = String.valueOf(applicationInfo.metaData.get("UMENG_CHANNEL"));
  313. }
  314. }
  315. }
  316. } catch (Exception e) {
  317. e.printStackTrace();
  318. }
  319. }
  320. return mChannelCode;
  321. }
  322. }