um-share-core

1.2.5 • Public • Published

um-share-core

如需能获取openid,建议设置oid, 其中trackcode和root_track_code,在metinfo设置的都应该是从url地址参数读的,首次可能只有root_track_code,后面的传播可以只设置trackcode(都传的话服务端会取trackcode),getNextTrackCode换取的追踪码是放到下个分享链接中的,不是放到metainfo中的

Usage

const umShareCore = require('um-share-core');

// TODO: DEMONSTRATE API

DEMO

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Webpack App</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
</head>

<body>
    <script>
        function replaceParamVal(oUrl, paramName, replaceWith) {
            var re = new RegExp("(" + paramName + "=)([^&]*)", "gi");
            var nUrl = oUrl.replace(re, replaceWith);
            nUrl = nUrl.replace("&&", '&');
            return nUrl;
        }
        function getQueryVariable(variable){
            let query = window.location.search.substring(1);
            let vars = query.split("&");
            for (let i=0;i<vars.length;i++) {
                    let pair = vars[i].split("=");
                    if(pair[0] == variable){return pair[1];}
            }
            return('');
        }
        // 获取jssdk签名
        fetch(`http://100.88.239.221:8081/`)
        .then(function(response) {
            return response.json();
        })
        .then(function(myJson) {
            wx.config({
                debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                appId: 'wx43596bfcbff2a514', // 必填,公众号的唯一标识
                ...myJson,
                jsApiList: ['updateAppMessageShareData','updateTimelineShareData','onMenuShareTimeline','onMenuShareAppMessage'] // 必填,需要使用的JS接口列表
            });
        });

        wx.ready(function () {
            var sharelink = location.href;
            // 设置metaInfo
            shareCore.setMetaInfo({appkey:"lttd", oid: 'xxxxxxxxxxxx', nickname: '昵称', avator: '头像', uid: 'unionid', trackkey: '_tk', trackcode: getQueryVariable('_tk'), root_track_key: '_rtk', root_track_code: getQueryVariable('_rtk'), trackurl: location.href });
            // 发送pv事件需要先设置好metainfo
            shareCore.enter({ page_name: document.title, page: location.href }, function () {

            });

            // 获取追踪码
            shareCore.getNextTrackCode(function (data) {
                var metinfo = shareCore.getMetaInfo();
                // 更新下一个链接中的trackcode
                var  newsharelink = sharelink;
                if(!metinfo.trackcode){
                    newsharelink = `${newsharelink}&${metinfo.trackkey}=${data}`;
                }else{
                    newsharelink = replaceParamVal(sharelink, metinfo.trackkey, `${metinfo.trackkey}=${data}`);
                }
                // 如果想把下一个url 中的root_track_code剔除,注意也可以不剔除,后台会按照 trackcode root_track_code url 优先级由高到低来取,服务端记录的trackcode中已经包含root_track_code
                console.log(newsharelink);
                var shareinfo = { title: document.title, imgUrl: 'https://img.alicdn.com/tfs/TB1tmkCctTfau8jSZFwXXX1mVXa-1280-1280.png', desc: '描述', link: newsharelink};
                wx.updateAppMessageShareData({
                    ...shareinfo,
                    success: function () {
                        // 设置成功
                        shareCore.trackShare(Object.assign({},shareinfo,{scene:'wx.updateAppMessageShareData'}));
                        console.log('wx.updateAppMessageShareData')
                    }
                })
                wx.updateTimelineShareData({
                    ...shareinfo,
                    success: function () {
                        shareCore.trackShare(Object.assign({},shareinfo,{scene:'wx.updateTimelineShareData'}));
                        console.log('wx.updateTimelineShareData')
                        // 设置成功
                    }
                })
                wx.onMenuShareTimeline({
                    ...shareinfo,
                    success: function () {
                        // 用户点击了分享后执行的回调函数
                        shareCore.trackShare(Object.assign({},shareinfo,{scene:'wx.onMenuShareTimeline'}));
                        console.log('wx.onMenuShareTimeline')
                    }
                })
                wx.onMenuShareAppMessage({
                    ...shareinfo, 
                    type: '', // 分享类型,music、video或link,不填默认为link
                    dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
                    success: function () {
                        shareCore.trackShare(Object.assign({},shareinfo,{scene:'wx.onMenuShareAppMessage'}));
                        console.log('wx.onMenuShareAppMessage')
                        // 用户点击了分享后执行的回调函数
                    }
                });


            });
            // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
        });
        wx.error(function (res) {
            console.log(res, '错误')
            // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
        });
    </script>
</body>

</html>

types

declare namespace ShareCore {
    export interface MetaInfo {
        /** js版本不需要传递,自动添加 */
        jsver?: string;
        /** appkey,目前用不到,建议吧appId传进来,以区分不同的微信小程序 */
        appkey?: string;
        /** openid 如果想统计到微信的openid,则此处必填*/
        oid: string;
        /** 来源urlkey 可不填 */
        fromkey?: string;
        /** 来源urlvalue 可不填*/
        from?: string;
        /** 追踪码对应的urlkey */
        trackkey?: string;
        /** 来源追踪码 如果是二次传播则为必填参数,开发者通过url地址中有无参数来决定是否传*/
        trackcode: string;
        /** 原始追踪码 首次传播为必填*/
        root_track_code: string;
        /** 原始来源key */
        root_track_key?: string;
        /** 当前页面地址 */
        trackurl?: string;
        /** unionid */
        uid?: string;
        /** 昵称 */
        nickname?: string;
        /** 头像 */
        avator?: string;
    }
    export interface Shareinfo {
        /** 分享标题 */
        title?: string,
        /** 分享描述 */
        desc?: string,
        /** 分享图片 */
        imgUrl?: string,
        /** 分享链接 */
        link: string,
        /** 分享场景 */
        scene: string
    }
    export interface EventPackage {
        
    }
    export interface PageConfig {
        /** 页面地址 */
        page: string,
        /** 页面名称 */ 
        page_name?: string
    }
    /** 设置日志公共字段*/
    export function setMetaInfo(MetaInfo: MetaInfo): MetaInfo;
    /** 获取日志公共字段*/
    export function getMetaInfo(): MetaInfo;
    /** 自定义事件*/
    export function trackEvent(id: string, data: EventPackage, type: number, callback?: any): void;
    /** 发起分享事件 */
    export function trackShare(data: Shareinfo): void;
    /** 进入页面事件 */
    export function enter(config: PageConfig, callback?: Function): void;
    /** 获取分享link的追踪码 */
    export function getNextTrackCode(callback?: Function): void;
}

Readme

Keywords

none

Package Sidebar

Install

npm i um-share-core

Weekly Downloads

0

Version

1.2.5

License

ISC

Unpacked Size

16.7 kB

Total Files

4

Last publish

Collaborators

  • umengplus