share.js 4.4 KB

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