微信分享 JSSDK的使用

我現在做過的在微信中運行的項目,基本上都有微信分享功能,所以,會使用JSSDK分享頁面是非常重要的。
分享功能的代碼一般會放在beforeCreate或mounted鉤子中,代碼如下:

 this.$http.get("group/identity")
       .then(({data:{code, content, jssdk, msg}}) => {
            if (code == 0) {
                 this.group_id = content.group_id;
                 if(this.group_id){
                      this.isSignUpBtn = false;
                      this.isMyBtn = true;

                      // 這里放分享功能的代碼 

                 }
            } else {
                 MessageBox('提示', msg)
           }
    }, ({data:{msg}}) => {
          MessageBox('提示', msg);
});

假如下面是我們請求接口的數據

{
  "code": 0,
  "msg": "請求成功的消息",
  "content": "這里放數據",
  "is_mobile_user": true,
  "jssdk": {
    "appId": "wxec4d172a4f73ee6f",
    "timestamp": "1487756879",
    "nonceStr": "58ad5e4f70226",
    "signature": "418034b044c61eef9375ada45a1dc373a5e4b7db"
  }
}

一切準備就緒之后,我們來根據不同頁面的使用方式一一分解:

先說引入的問題:
// 首先,在index.html頁面先引入JSSDK文件。

<script type="text/javascript">
    var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");
    document.write(decodeURI("%3Cscript src='" + _bdhmProtocol + "res.wx.qq.com/open/js/jweixin-1.0.0.js' type='text/javascript'%3E%3C/script%3E"));
</script>

// 當然,你也可以用最簡單的方式引入
<script src='https://res.wx.qq.com/open/js/jweixin-1.0.0.js'></script>

// 我個人比較喜歡第一種。

下面就開始使用了,先來一個代碼初級版本的方式:
// 方式一,所有代碼直接寫在頁面里面上,分享出去后,用戶直接點擊分享的鏈接就回到當前這個頁,不需要拼接link,有動態參數。

// 獲取jssdk需要的數據
let jssdk = data.jssdk;
// 配置功能
wx.config({
    debug: false,
    appId: jssdk.appId,
    timestamp: parseInt(jssdk.timestamp),
    nonceStr: jssdk.nonceStr,
    signature: jssdk.signature,
    jsApiList: [
        "onMenuShareTimeline",
        "onMenuShareAppMessage"
    ]
});
wx.ready(function () {
    wx.onMenuShareTimeline({
        title: "我們的班級我們的團,快來為" + self.headerData.class + "班級榮譽而戰!", // 分享標題
        desc: "哥們兒,咱多久沒一起喝酒吃飯了,多久沒促膝長談了,Hey兄弟們!咱該聚聚了!",
        link: location.href, // 分享鏈接
        imgUrl: "https://tup.iheima.com/sport.png", // 分享圖標
        success: function () {
            // alert("成功");
        },
        cancel: function () {
            // alert("失敗")
        }
    });
    wx.onMenuShareAppMessage({
        title: "我們的班級我們的團,快來為" + self.headerData.class + "班級榮譽而戰!", // 分享標題
        desc: "哥們兒,咱多久沒一起喝酒吃飯了,多久沒促膝長談了,Hey兄弟們!咱該聚聚了!",
        link: location.href, // 分享鏈接
        imgUrl: "https://tup.iheima.com/sport.png", // 分享圖標
        success: function () {
            // alert("成功");
        },
        cancel: function () {
            // alert("失敗")
        }
    });
});
//  self.headerData.class 為需要動態傳入的參數,獲取數據的時候直接取出來就行。

// 方式二,所有代碼直接寫在頁面里面上,需要拼接link,一般放在首頁或對外分享的主頁面,沒有動態參數。

// 獲取jssdk需要的數據
let jssdk = data.jssdk;
// 配置功能
wx.config({
    debug: false,
    appId: jssdk.appId,
    timestamp: parseInt(jssdk.timestamp),
    nonceStr: jssdk.nonceStr,
    signature: jssdk.signature,
    jsApiList: [
        "onMenuShareTimeline",
        "onMenuShareAppMessage"
    ]
});
var hostName = 'https://wx.chuangyejia.com/';
var pathName = 'fe-sport/#/home';
wx.ready(function() {
    wx.onMenuShareTimeline({
        title: "第四屆黑馬運動會正在招團長,快來一戰成名!", // 分享標題
        desc: "Hey,兄弟,好久不見!3月25日,黑馬校友運動會,北京見。",
        link: process.env.NODE_ENV === 'development' ? hostName + 'dev/' + pathName : hostName + pathName, // 分享鏈接
        imgUrl: "https://tup.iheima.com/sport.png", // 分享圖標
        success: function() {
            // alert("成功");
        },
        cancel: function() {
            // alert("失敗")
        }
    });

    wx.onMenuShareAppMessage({
        title: "第四屆黑馬運動會正在招團長,快來一戰成名!", // 分享標題
        desc: "Hey,兄弟,好久不見!3月25日,黑馬校友運動會,北京見。",
        link: process.env.NODE_ENV === 'development' ? hostName + 'dev/' + pathName : hostName + pathName, // 分享鏈接
        imgUrl: "https://tup.iheima.com/sport.png", // 分享圖標
        success: function() {
            // alert("成功");
        },
        cancel: function() {
            // alert("失敗")
        }
    });
});

// 方式三,將分享的代碼單獨剝離出來成一個js文件,然后在需要的地方引入這個js文件。(推薦)
// utils.js文件中有如下代碼

const shareJs = function(jssdk, options) {
    wx.config({
        debug: false,
        appId: jssdk.appId,
        timestamp: parseInt(jssdk.timestamp),
        nonceStr: jssdk.nonceStr,
        signature: jssdk.signature,
        jsApiList: [
            "onMenuShareTimeline",
            "onMenuShareAppMessage"
        ]
    });
    var defaults = {
        title: "分享的標題",
        desc: "分享的描述",
        link: location.href, //分享頁面地址,不能為空
        imgUrl: 'https://tup.iheima.com/sport.png', //分享是封面圖片,不能為空
        success: function() {}, //分享成功觸發
        cancel: function() {} //分享取消觸發,需要時可以調用
    }
    options = Object.assign({}, defaults, options);
    wx.ready(function() {
        var thatopts = options;
        wx.onMenuShareTimeline({
            title: thatopts.title, // 分享標題
            desc: thatopts.desc, // 分享描述
            link: thatopts.link, // 分享鏈接
            imgUrl: thatopts.imgUrl, // 分享圖標
            success: function() {
                // alert("成功");
            },
            cancel: function() {
                // alert("失敗")
            }
        });
        wx.onMenuShareAppMessage({
            title: thatopts.title, // 分享標題
            desc: thatopts.desc, // 分享描述
            link: thatopts.link, // 分享鏈接
            imgUrl: thatopts.imgUrl, // 分享圖標
            success: function() {
                // alert("成功");
            },
            cancel: function() {
                // alert("失敗")
            }
        });
    });
}


module.exports = {
    shareJs
};

// 在home.vue頁面中使用。

<script type="text/ecmascript-6">
import { shareJs } from './../utils';  // 引入分享功能的js文件
// 需要拼接地址的地方
let jssdk = data.jssdk;
var hostName = 'https://wx.chuangyejia.com/';
var pathName = 'fe-sport/#/home';
let optionData = {
    title: "第四屆黑馬運動會正在招團長,快來一戰成名!",
    desc: "Hey,兄弟,好久不見!3月25日,黑馬校友運動會,北京見。",
    link: process.env.NODE_ENV === 'development' ? hostName + 'dev/' + pathName : hostName + pathName,
    imgUrl: "https://tup.iheima.com/sport.png"
};
shareJs(jssdk, optionData);


// 不需要拼接地址的地方
let jssdk = data.jssdk;
// 準備好要傳入到utils.js文件中的參數。
let optionData = {
    title: "我們的班級我們的團,快來為" + self.headerData.class + "班級榮譽而戰!",
    desc: "哥們兒,咱多久沒一起喝酒吃飯了,多久沒促膝長談了,Hey兄弟們!咱該聚聚了!",
    link: location.href,
    imgUrl: "https://tup.iheima.com/sport.png"
};
// 將jssdk和分享后展示的參數傳入
shareJs(jssdk, optionData);

//  self.headerData.class 為需要動態傳入的參數,獲取數據的時候直接取出來就行。

// 或者還可以像下面這樣寫,先將分享的內容準備后,然后以更簡潔的方式賦值給專入到utils.js中。

<script>
let fromPath = '';
beforeRouteEnter (to, from, next) {
      fromPath = from.path;
      next();
},
// 獲取fromPath
</script>
let toLink = location.href;
let titleDetail = "我們的班級我們的團,快來為" + self.headerData.class + "班級榮譽而戰!";
let destDetail = "哥們兒,咱多久沒一起喝酒吃飯了,多久沒促膝長談了,Hey兄弟們!咱該聚聚了!";
// 根據不同的情況來修改分享后顯示的文案。
if(fromPath.substr(-1) == "/"){
      toLink = "http://wx.chuangyejia.com/mobile/sport/whoami";
      titleDetail = "商場王者,快來測試你是王者榮耀里的誰?";
      destDetail = "黑馬運動會開幕在即,眾多商業大佬已整裝待發,速來測試你的王者基因,你更適合加入哪支黑馬戰隊?"
}

let myJssdk = jssdk;
let optionData = {
      title: titleDetail,
      desc: destDetail,
      link: toLink,
      imgUrl: "https://tup.iheima.com/sport.png"
};
shareJs(myJssdk, optionData);

有了上面的這些代碼之后,下一次再遇到這類需求時,我就更得心應手了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容