app.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. import {
  2. SendEvent,
  3. } from '/utils/util.js'
  4. // import {
  5. // getChapterList
  6. // } from '../../api/api.js'
  7. // app.js
  8. // 引入阅读器插件
  9. const novelPlugin = requirePlugin('novel-plugin')
  10. import {
  11. userLogin,
  12. getChapterUnlockStatus,
  13. getNovelDetail,
  14. addBrowsingHistory
  15. } from './api/api'
  16. App({
  17. onLaunch(options) {
  18. console.log('场景值:', options, options.scene);
  19. novelPlugin.setLoggerConfig({
  20. info: true,
  21. debug: true,
  22. log: true,
  23. warn: true,
  24. error: true,
  25. })
  26. // 监听进入插件页事件
  27. novelPlugin.onPageLoad(onNovelPluginLoad)
  28. // 展示本地存储能力
  29. const logs = wx.getStorageSync('logs') || []
  30. logs.unshift(Date.now())
  31. wx.setStorageSync('logs', logs)
  32. },
  33. // 登录方法
  34. login() {
  35. return new Promise((resolve, reject) => {
  36. // 检查登录状态
  37. if (this.checkLoginStatus()) {
  38. resolve();
  39. return;
  40. }
  41. wx.login({
  42. success: res => {
  43. userLogin({
  44. "appid": "wxa7a33088566e1292",
  45. "channel": 1,
  46. "srcType": "0",
  47. "srcAppId": "",
  48. "srcId": "",
  49. "cusId": "",
  50. "inviter": "",
  51. "promotionId": "",
  52. "inviterPromotionId": "",
  53. "system": "pc",
  54. "type": "inner",
  55. "inner": 1,
  56. code: res.code,
  57. }).then(res => {
  58. console.log(res);
  59. wx.setStorageSync('accessToken', res.accessToken);
  60. this.globalData.isLogin = true;
  61. resolve(res);
  62. }).catch(err => {
  63. this.globalData.isLogin = false;
  64. reject(err);
  65. })
  66. },
  67. fail: err => {
  68. this.globalData.isLogin = false;
  69. reject(err);
  70. }
  71. })
  72. })
  73. },
  74. // 检查登录状态
  75. checkLoginStatus() {
  76. const token = wx.getStorageSync('accessToken');
  77. return !!token && this.globalData.isLogin;
  78. },
  79. globalData: {
  80. userInfo: null,
  81. isLogin: false,
  82. novelManager: {},
  83. uuid: '',
  84. isShowDialog: false,
  85. novelId: '',
  86. unlockChapterNum: 1,
  87. bookmarkAdNum: 3
  88. }
  89. })
  90. // 插件初始化回调
  91. async function onNovelPluginLoad(data) {
  92. // data.id - 阅读器实例 id,每个插件页对应一个阅读器实例
  93. const novelManager = novelPlugin.getNovelManager(data.id)
  94. getApp().globalData.novelManager = novelManager
  95. if (getApp().globalData.isShowDialog) {
  96. novelManager.setFullScreenComponentStatus({
  97. show: true,
  98. })
  99. }
  100. let pluginInfo = novelManager.getPluginInfo();
  101. let innerBookId = pluginInfo.query?.innerBookId;
  102. let unlockStatus = await getChapterUnlockStatus({
  103. novelId: innerBookId
  104. });
  105. let bookDetail = await getNovelDetail(innerBookId);
  106. getApp().globalData.novelId = bookDetail.id
  107. console.log("bookDetail", bookDetail);
  108. if (unlockStatus && Array.isArray(unlockStatus.status)) {
  109. const contents = unlockStatus.status.map((lockState, index) => {
  110. return {
  111. index: index,
  112. status: lockState,
  113. };
  114. });
  115. novelManager.setContents({
  116. contents: contents,
  117. });
  118. novelManager.setChargeWay({
  119. globalConfig: {
  120. mode: 1,
  121. buttonText: '解锁',
  122. showButton: true,
  123. tip: '看完广告之后可继续阅读',
  124. }
  125. })
  126. let chapterConfigs = []
  127. for (let index = 0; index < bookDetail.latestChapterNo; index++) {
  128. console.log(index + 1)
  129. if ((index + 1) % getApp().globalData.bookmarkAdNum === 0) {
  130. chapterConfigs.push({
  131. chapterIndex: index,
  132. blocks: [
  133. {
  134. type: 3,
  135. unitId: 'adunit-343af082b8c8ea18'
  136. }
  137. ]
  138. })
  139. }
  140. }
  141. novelManager.setAdBlock({
  142. chapterConfigs: chapterConfigs
  143. })
  144. }
  145. function startRead(res) {
  146. console.log('开始阅读', res);
  147. updateBrowsingHistory(res);
  148. }
  149. function updateBrowsingHistory(res) {
  150. let params = {
  151. novelAuthor: bookDetail.author,
  152. novelCover: bookDetail.cover,
  153. novelId: bookDetail.id,
  154. novelTitle: bookDetail.title,
  155. status: bookDetail.status
  156. }
  157. addBrowsingHistory(params);
  158. }
  159. // 监听用户行为事件
  160. novelManager.onUserTriggerEvent(res => {
  161. const {
  162. event_id
  163. } = res;
  164. console.log('用户行为:', event_id, res);
  165. // 根据不同的事件类型处理
  166. switch (event_id) {
  167. case 'start_read': // 开始阅读
  168. console.log('开始阅读章节:', res.chapter_id);
  169. SendEvent('start_read', {
  170. page: '开始阅读'
  171. })
  172. break;
  173. case 'click_startread': // 点击开始阅读
  174. SendEvent('click_startread', {
  175. page: '点击开始阅读'
  176. })
  177. startRead(res);
  178. break;
  179. case 'leave_readpage': // 离开阅读页
  180. SendEvent('leave_readpage', {
  181. page: '离开阅读页'
  182. })
  183. console.log('阅读时长:', res.read_time);
  184. break;
  185. case 'change_chapter': // 切换章节
  186. SendEvent('change_chapter', {
  187. page: '切换到章节'
  188. })
  189. console.log('切换到章节:', res.chapter_id);
  190. break;
  191. case 'get_chapter': // 获取章节数据
  192. SendEvent('get_chapter', {
  193. page: '获取章节数据'
  194. })
  195. console.log("get_chapter", res);
  196. console.log('章节状态:', res.pay_status);
  197. break;
  198. default:
  199. break;
  200. }
  201. })
  202. }