| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- 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;
- };
|