MiddleAuth.js 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. cc.Class({
  2. /**
  3. * 收到JNI发上来的事件
  4. *
  5. * @author Pyden
  6. * @date 2020-03-11
  7. * @param {Object} eventData
  8. */
  9. handleEvent (eventData) {
  10. /* eventData参数:
  11. * @param {String} sdkName
  12. * @param {String} eventKey
  13. * @param {Integer} code
  14. * @param {String} errorMsg
  15. * @param {Object} data
  16. */
  17. /*
  18. 授权回调事件,eventKey如下:
  19. auth_login_result // SDK授权完成
  20. eventData.data // 授权信息
  21. auth_logout_result // SDK账号登出
  22. eventData.data // 授权信息
  23. auth_change_account // SDK切换账号完成
  24. eventData.data // 授权信息
  25. auth_exit // 退出游戏
  26. 获取实名认证回调事件,eventKey如下:
  27. auth_real_name_info // 回调实名认证信息
  28. eventData.data.age {Integer} 年龄
  29. eventData.data.isAdult {Boolean} 是否成年
  30. eventData.data.isRealName {Boolean} 是否已实名
  31. eventData.data.isEndGame {Boolean} 是否结束游戏
  32. */
  33. let eventKey = eventData.eventKey;
  34. switch (eventKey) {
  35. case 'auth_login_result': {
  36. let authInfo = eventData.data;
  37. if (!authInfo) {
  38. authInfo = this.getAuthInfo(eventKey.sdkName);
  39. }
  40. // 游客不更新
  41. if (authInfo && authInfo.authType != JMC.AUTHORIZE_TYPE.GUEST) {
  42. this._currentAuthInfo = authInfo;
  43. }
  44. cc.game.emit('e_middle_auth_login_result', eventData);
  45. break;
  46. }
  47. case 'auth_logout_result': {
  48. let authInfo = eventData.data;
  49. if (!authInfo) {
  50. authInfo = this.getAuthInfo(eventKey.sdkName);
  51. }
  52. // 游客不更新
  53. if (authInfo && authInfo.authType != JMC.AUTHORIZE_TYPE.GUEST) {
  54. this._currentAuthInfo = authInfo;
  55. }
  56. cc.game.emit('e_middle_auth_logout_result', eventData);
  57. break;
  58. }
  59. case 'auth_change_account': {
  60. let authInfo = eventData.data;
  61. if (!authInfo) {
  62. authInfo = this.getAuthInfo(eventKey.sdkName);
  63. }
  64. // 游客不更新
  65. if (authInfo && authInfo.authType != JMC.AUTHORIZE_TYPE.GUEST) {
  66. this._currentAuthInfo = authInfo;
  67. }
  68. cc.game.emit('e_middle_auth_change_account', eventData);
  69. break;
  70. }
  71. case 'auth_exit': {
  72. cc.game.end();
  73. break;
  74. }
  75. case 'auth_real_name_info': {
  76. cc.game.emit('e_middle_auth_real_name_info', eventData);
  77. break;
  78. }
  79. default:
  80. break;
  81. }
  82. },
  83. /**
  84. * 获取授权模块的配置信息
  85. *
  86. * @author Pyden
  87. * @date 2020-03-23
  88. * @returns {Object}
  89. * config.list 授权类型信息列表
  90. */
  91. getConfig () {
  92. if (!this._config) {
  93. let gameConfig = G.MiddleMgr.getGameConfig();
  94. if (gameConfig && gameConfig.auth) {
  95. this._config = gameConfig.auth;
  96. }
  97. }
  98. return this._config;
  99. },
  100. /**
  101. * 获取SDK授权信息列表 authorize_authorizeTypeList
  102. *
  103. * @author Pyden
  104. * @date 2020-03-11
  105. * @returns {Array}
  106. * sdkName
  107. * authType {JMC.AUTHORIZE_TYPE}
  108. */
  109. getAuthTypeInfoList () {
  110. let config = this.getConfig() || {};
  111. return config.list;
  112. },
  113. /**
  114. * 获取当前授权信息
  115. * 注意:收到授权成功信息事件后,需要更新授权信息
  116. *
  117. * @author Pyden
  118. * @date 2020-03-11
  119. * @returns {Object}
  120. * sdkName 当前正在授权/授权完成的sdk名称
  121. * authType 当前正在授权/授权完成的授权方式
  122. * authStatus {JMC.AUTH_STATUS} 授权状态 authorize_isAuthorizeLoginSuccess
  123. * isWaitAuth 是否正在授权 authorize_isWaitAuthorizeLogin
  124. * uuid 用于绑定游戏账号的uuid
  125. * nickname 昵称
  126. * headUrl 头像地址
  127. */
  128. getCurrentAuthInfo () {
  129. if (!this._currentAuthInfo) {
  130. // 优先取授权成功的,没有授权成功的话,就选第一个
  131. let authTypeInfoList = this.getAuthTypeInfoList();
  132. let ret;
  133. for (const v of authTypeInfoList) {
  134. let info = this.getAuthInfo(v.sdkName);
  135. if (!ret) {
  136. ret = info;
  137. } else {
  138. if (info.authStatus == JMC.AUTH_STATUS.LOGIN_SUCCESS) {
  139. ret = info;
  140. break;
  141. }
  142. }
  143. }
  144. this._currentAuthInfo = ret;
  145. }
  146. return this._currentAuthInfo;
  147. },
  148. /**
  149. * 获取绑定账号的唯一标识
  150. *
  151. * @author Pyden
  152. * @date 2020-03-23
  153. * @returns {String}
  154. */
  155. getUUID () {
  156. let authInfo = this.getCurrentAuthInfo() || {};
  157. return authInfo.uuid;
  158. },
  159. /**
  160. * SDK授权登录 authorize_loginWithType
  161. *
  162. * @author Pyden
  163. * @date 2020-03-11
  164. * @param {String} sdkName
  165. * @param {Integer} authType
  166. */
  167. login (sdkName, authType) {
  168. let isGuest = (authType == JMC.AUTHORIZE_TYPE.GUEST);
  169. G.MiddleMgr.handleEvent({
  170. module: 'auth',
  171. eventKey: 'auth_login_result',
  172. code: 200,
  173. data: {
  174. sdkName: 'Web',
  175. authType: authType,
  176. authStatus: JMC.AUTH_STATUS.LOGIN_SUCCESS,
  177. isWaitAuth: false,
  178. loginType: JMC.LOGIN_TYPE.NORMAL,
  179. uuid: 'ssmjh5_' + G.MiddleDevice.getUDID(),
  180. isGuest: isGuest
  181. }
  182. });
  183. },
  184. /**
  185. * SDK切换账号 authorize_changeLoginWay authorize_showLogin
  186. *
  187. * @author Pyden
  188. * @date 2020-03-11
  189. * @param {String} sdkName
  190. * @returns {Boolean} 返回值表示是否回到授权界面重新授权
  191. */
  192. logout (sdkName) {
  193. return false;
  194. },
  195. /**
  196. * 获取授权信息
  197. *
  198. * @author Pyden
  199. * @date 2020-03-23
  200. * @param {String} sdkName
  201. * @returns
  202. * sdkName 当前正在授权/授权完成的sdk名称
  203. * authType 当前正在授权/授权完成的授权方式
  204. * authStatus 授权状态 authorize_isAuthorizeLoginSuccess
  205. * isWaitAuth 是否正在授权 authorize_isWaitAuthorizeLogin
  206. * uuid 用于绑定游戏账号的uuid
  207. * nickname 昵称
  208. * headUrl 头像地址
  209. */
  210. getAuthInfo (sdkName) {
  211. return {
  212. sdkName: 'Web授权',
  213. authType: JMC.AUTHORIZE_TYPE.NORMAL,
  214. authStatus: JMC.AUTH_STATUS.LOGIN_SUCCESS,
  215. isWaitAuth: false,
  216. loginType: JMC.LOGIN_TYPE.NORMAL,
  217. uuid: 'ssmjh5_' + G.MiddleDevice.getUDID(),
  218. nickname: undefined,
  219. headUrl: undefined
  220. };
  221. },
  222. /**
  223. * 是否支持获取实名信息 authorize_isSupportCertification
  224. *
  225. * @author Pyden
  226. * @date 2020-03-11
  227. * @returns {Boolean}
  228. */
  229. isSupportRealName () {
  230. return false;
  231. },
  232. /**
  233. * 获取游戏实名信息(异步回调 auth_real_name_info) authorize_getCertificationInfo
  234. *
  235. * @author Pyden
  236. * @date 2020-03-11
  237. */
  238. requestRealNameInfo () {
  239. G.MiddleMgr.handleEvent({
  240. module: 'auth',
  241. eventKey: 'auth_real_name_info',
  242. code: 500,
  243. errorMsg: '不支持实名认证'
  244. });
  245. },
  246. /**
  247. * 是否支持打开实名认证弹框 authorize_isSupportOpenCertification
  248. *
  249. * @author Pyden
  250. * @date 2020-03-11
  251. * @returns {Boolean}
  252. */
  253. isSupportOpenRealNameAlert () {
  254. return false;
  255. },
  256. /**
  257. * 打开实名认证弹框 authorize_openCertificationIntent
  258. *
  259. * @author Pyden
  260. * @date 2020-03-11
  261. * @returns {Boolean} 返回值表示是否支持打开实名认证弹框
  262. */
  263. openRealNameAlert () {
  264. return false;
  265. },
  266. /**
  267. * 展示SDK的退出弹框 authorize_showExit
  268. *
  269. * @author Pyden
  270. * @date 2020-03-11
  271. * @returns {Boolean} 返回值表示是否在SDK展示了退出弹框
  272. */
  273. showExitAlert () {
  274. return false;
  275. },
  276. /**
  277. * 调用SDK的退出逻辑 authorize_exit
  278. *
  279. * @author Pyden
  280. * @date 2020-03-11
  281. * @returns {Boolean} 返回值表示是否在SDK退出了游戏
  282. */
  283. exitGame () {
  284. return false;
  285. },
  286. /**
  287. * 是否从游戏中心启动 authorize_isLaunchFromCenter
  288. *
  289. * @author Pyden
  290. * @date 2020-03-11
  291. * @returns {Boolean}
  292. */
  293. isLaunchFromCenter () {
  294. return false;
  295. },
  296. /**
  297. * 打开游戏中心 authorize_openGameCenter
  298. *
  299. * @author Pyden
  300. * @date 2020-03-11
  301. * @returns {Boolean} 返回值表示是否支持打开游戏中心
  302. */
  303. openGameCenter () {
  304. return false;
  305. },
  306. /**
  307. * 跳转社区 authorize_goToSocialCenter
  308. *
  309. * @author Pyden
  310. * @date 2020-03-11
  311. * @returns {Boolean} 返回值表示是否支持跳转社区
  312. */
  313. openSocialCenter () {
  314. return false;
  315. },
  316. /**
  317. * 玩家信息上报 authorize_setPlayerMoreInfo
  318. *
  319. * @author Pyden
  320. * @date 2020-03-11
  321. * @param {Object} playerInfo
  322. * playerInfo.uid
  323. * playerInfo.level
  324. * playerInfo.nickname
  325. */
  326. uploadPlayerInfo (playerInfo) {
  327. },
  328. /**
  329. * 玩家开局上报 reportGameStart
  330. *
  331. * @author Pyden
  332. * @date 2020-03-11
  333. * @param {Object} playerInfo
  334. * playerInfo.uid
  335. * playerInfo.level
  336. * playerInfo.nickname
  337. */
  338. uploadGameStart (playerInfo) {
  339. }
  340. });