import { getShareConfigApi } from "../../api/share.api"; import ShareConfigModel from "../../store/models/shareConfig.model"; const shareConfigModel = ShareConfigModel.getInstance(); /** * 初始化分享配置 */ export const initShareConfig = async () => { try { shareConfigModel.clear(); const shareConfigData = await getShareConfigApi() 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 { // 开启分享按钮 tt.showShareMenu({}); await initShareConfig(); let shareData = generateShareData({}); tt.onShareAppMessage(() => { return shareData; }); 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 = generateShareData(data); tt.shareAppMessage(shareData); return Promise.resolve(); } catch (error) { return Promise.reject(error); } } /** * 主动监听研发透传参数 */ export const onShareAppMessage = (data,menus=['shareAppMessage']) => { console.log("onShareAppMessage入参" + JSON.stringify(data)); //先off,再on tt.offShareAppMessage(); let shareData = generateShareData(data); tt.showShareMenu({}); tt.onShareAppMessage(() => { return shareData; }); }; /** * 构建分享数据 * @param data * @returns */ const generateShareData = (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; };