index.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. import { getShareConfigApi } from "../../api/share.api";
  2. import ShareConfigModel from "../../store/models/shareConfig.model";
  3. import DnSdk from "../../lib/dnSdk";
  4. const shareConfigModel = ShareConfigModel.getInstance();
  5. /**
  6. * 初始化分享配置
  7. */
  8. export const initShareConfig = async () => {
  9. try {
  10. shareConfigModel.clear();
  11. const shareConfigData = await getShareConfigApi()
  12. console.log("shareConfigData", shareConfigData)
  13. if(shareConfigData.length){
  14. // 从数组中随机选择一个分享配置
  15. const randomShareConfig = shareConfigData[Math.floor(Math.random() * shareConfigData.length)];
  16. shareConfigModel.save(randomShareConfig)
  17. }
  18. return Promise.resolve()
  19. } catch (error) {
  20. return Promise.reject(error)
  21. }
  22. }
  23. /**
  24. * 开启系统分享
  25. */
  26. export const openSystemShare = async () => {
  27. const shareConfig = shareConfigModel.get()
  28. if (!shareConfig) {
  29. return
  30. }
  31. try {
  32. // 开启分享按钮
  33. wx.showShareMenu({
  34. withShareTicket: true,
  35. });
  36. await initShareConfig();
  37. let shareData = buildShareData({});
  38. wx.onShareAppMessage(() => {
  39. // 腾讯广告小游戏SDK上报
  40. DnSdk.getInstance().track('SHARE', {
  41. target: 'APP_MESSAGE'
  42. });
  43. return shareData;
  44. });
  45. wx.onShareTimeline(() => {
  46. // 腾讯广告小游戏SDK上报
  47. DnSdk.getInstance().track('SHARE', {
  48. target: 'TIME_LINE'
  49. });
  50. return shareData;
  51. });
  52. wx.onCopyUrl(() => {
  53. return {
  54. query: shareData,
  55. };
  56. });
  57. // 收藏
  58. wx.onAddToFavorites(() => {
  59. // 腾讯广告小游戏SDK上报
  60. DnSdk.getInstance().track('ADD_TO_WISHLIST', {
  61. // 普通收藏(default)
  62. type: 'default',
  63. })
  64. })
  65. return Promise.resolve();
  66. } catch (error) {
  67. return Promise.reject(error);
  68. }
  69. }
  70. /**
  71. * 主动发起分享
  72. */
  73. export const share = async(data) => {
  74. const shareConfig = shareConfigModel.get()
  75. if (!shareConfig) {
  76. return
  77. }
  78. try {
  79. await initShareConfig();
  80. // 发起分享
  81. let shareData = buildShareData(data);
  82. wx.shareAppMessage(shareData);
  83. return Promise.resolve();
  84. } catch (error) {
  85. return Promise.reject(error);
  86. }
  87. }
  88. /**
  89. * 主动监听研发透传参数
  90. */
  91. export const onShareAppMessage = (data,menus=['shareAppMessage', 'shareTimeline']) => {
  92. //先off,再on
  93. wx.offShareAppMessage();
  94. wx.offShareTimeline();
  95. wx.offCopyUrl();
  96. wx.offAddToFavorites();
  97. let shareData = buildShareData(data);
  98. wx.showShareMenu({
  99. withShareTicket: true,
  100. menus:menus
  101. })
  102. wx.onShareAppMessage(() => {
  103. // 腾讯广告小游戏SDK上报
  104. DnSdk.getInstance().track('SHARE', {
  105. target: 'APP_MESSAGE'
  106. });
  107. return shareData;
  108. });
  109. wx.onShareTimeline(() => {
  110. // 腾讯广告小游戏SDK上报
  111. DnSdk.getInstance().track('SHARE', {
  112. target: 'TIME_LINE'
  113. });
  114. return shareData;
  115. });
  116. wx.onCopyUrl(() => {
  117. return {
  118. query: shareData.query,
  119. };
  120. });
  121. // 收藏
  122. wx.onAddToFavorites(() => {
  123. // 腾讯广告小游戏SDK上报
  124. DnSdk.getInstance().track('ADD_TO_WISHLIST', {
  125. // 普通收藏(default)
  126. type: 'default',
  127. })
  128. })
  129. };
  130. /**
  131. * 构建分享数据
  132. * @param data
  133. * @returns
  134. */
  135. const buildShareData = (data) => {
  136. let shareConfigInfo = shareConfigModel.get();
  137. let shareData = {
  138. title: shareConfigInfo.title,
  139. imageUrl: shareConfigInfo.imageUrl,
  140. query: shareConfigInfo.query,
  141. };
  142. let share_ext = "";
  143. // 记录分享透传参数
  144. if (data.hasOwnProperty("title") && data.title) shareData.title = data.title;
  145. if (data.hasOwnProperty("imageUrl") && data.imageUrl) shareData.imageUrl = data.imageUrl;
  146. if (data.hasOwnProperty("ext") && data.ext) share_ext = data.ext;
  147. //前面这个share_ext是研发透传进来的,后面这个是服务端传进来的
  148. shareData.query += shareConfigInfo.share_ext;
  149. if (share_ext) {
  150. shareData.query += `&share_ext=` + share_ext;
  151. }
  152. return shareData;
  153. };