import { getShareConfigApi } from "../../api/share.api"; import ShareConfigModel from "../../store/models/shareConfig.model"; import DnSdk from "../../lib/dnSdk"; const shareConfigModel = ShareConfigModel.getInstance(); /** * 初始化分享配置 */ export const initShareConfig = async () => { try { shareConfigModel.clear(); const shareConfigData = await getShareConfigApi() console.log("shareConfigData", shareConfigData) if(shareConfigData.length){ // 从数组中随机选择一个分享配置 const randomShareConfig = shareConfigData[Math.floor(Math.random() * shareConfigData.length)]; shareConfigModel.save(randomShareConfig) } return Promise.resolve() } catch (error) { return Promise.reject(error) } } /** * 开启系统分享 */ export const openSystemShare = async () => { const shareConfig = shareConfigModel.get() if (!shareConfig) { return } try { // 开启分享按钮 wx.showShareMenu({ withShareTicket: true, }); await initShareConfig(); let shareData = buildShareData({}); wx.onShareAppMessage(() => { // 腾讯广告小游戏SDK上报 DnSdk.getInstance().track('SHARE', { target: 'APP_MESSAGE' }); return shareData; }); wx.onShareTimeline(() => { // 腾讯广告小游戏SDK上报 DnSdk.getInstance().track('SHARE', { target: 'TIME_LINE' }); return shareData; }); wx.onCopyUrl(() => { return { query: shareData, }; }); // 收藏 wx.onAddToFavorites(() => { // 腾讯广告小游戏SDK上报 DnSdk.getInstance().track('ADD_TO_WISHLIST', { // 普通收藏(default) type: 'default', }) }) return Promise.resolve(); } catch (error) { return Promise.reject(error); } } /** * 主动发起分享 */ export const share = async(data) => { const shareConfig = shareConfigModel.get() if (!shareConfig) { return } try { await initShareConfig(); // 发起分享 let shareData = buildShareData(data); wx.shareAppMessage(shareData); return Promise.resolve(); } catch (error) { return Promise.reject(error); } } /** * 主动监听研发透传参数 */ export const onShareAppMessage = (data,menus=['shareAppMessage', 'shareTimeline']) => { //先off,再on wx.offShareAppMessage(); wx.offShareTimeline(); wx.offCopyUrl(); wx.offAddToFavorites(); let shareData = buildShareData(data); wx.showShareMenu({ withShareTicket: true, menus:menus }) wx.onShareAppMessage(() => { // 腾讯广告小游戏SDK上报 DnSdk.getInstance().track('SHARE', { target: 'APP_MESSAGE' }); return shareData; }); wx.onShareTimeline(() => { // 腾讯广告小游戏SDK上报 DnSdk.getInstance().track('SHARE', { target: 'TIME_LINE' }); return shareData; }); wx.onCopyUrl(() => { return { query: shareData.query, }; }); // 收藏 wx.onAddToFavorites(() => { // 腾讯广告小游戏SDK上报 DnSdk.getInstance().track('ADD_TO_WISHLIST', { // 普通收藏(default) type: 'default', }) }) }; /** * 构建分享数据 * @param data * @returns */ const buildShareData = (data) => { let shareConfigInfo = shareConfigModel.get(); let shareData = { title: shareConfigInfo.title, imageUrl: shareConfigInfo.imageUrl, query: shareConfigInfo.query, }; let share_ext = ""; // 记录分享透传参数 if (data.hasOwnProperty("title") && data.title) shareData.title = data.title; if (data.hasOwnProperty("imageUrl") && data.imageUrl) shareData.imageUrl = data.imageUrl; if (data.hasOwnProperty("ext") && data.ext) share_ext = data.ext; //前面这个share_ext是研发透传进来的,后面这个是服务端传进来的 shareData.query += shareConfigInfo.share_ext; if (share_ext) { shareData.query += `&share_ext=` + share_ext; } return shareData; };