摘要:本篇文章就記錄我的做微信分享信息定制的過程和踩坑總結。但是,這就要求在每個組件中都加微信分享代碼,會導致維護困難。
在微信瀏覽器內打開任何網頁,若不配置分享接口,微信會默認使用如下信息作為分享信息:
默認標題:HTML的title
默認連接:當前頁面的地址,即location.href
默認圖片:會取當前頁面body內最前面的一張符合條件的圖片(尺寸必須大于300px × 300px)
默認摘要:當前頁面的地址,即location.href
即在微信里打開一個不對微信瀏覽器做特殊處理的網站,點擊右上角分享,分享出去的消息就是下面這樣的:
在很多時候,默認的分享的圖片和摘要都是達不到預期的。本篇文章就記錄我的做微信分享信息定制的過程和踩坑總結。
一.必要的準備微信認證過的公共號
一個備案過的域名
必要的后臺服務(用于獲取微信jssdk的初始化signature信息)
二.配置過程說明:appId和signature都應后臺得到,具體的寫法可以參考官方文檔。
參考:https://mp.weixin.qq.com/wiki(微信網頁開發->微信JS-SDK說明文檔->附錄6-DEMO頁面和示例代碼)
? 先登錄微信公眾平臺進入“公眾號設置”的“功能設置”里填寫“JS接口安全域名”。
? 在需要調用JS接口的頁面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/...
說明:在angular2中,可直接在index.html頁面中引入,這樣每個頁面都會引入。
所有需要使用JS-SDK的頁面必須先注入配置信息,否則將無法調用。
wx.config({ ? ? debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數 ? ? appId: "", // 必填,公眾號的唯一標識 ? ? timestamp: , // 必填,生成簽名的時間戳 ? ? nonceStr: "", // 必填,生成簽名的隨機串 ? ? signature: "",// 必填。注意,signature應由后臺返回 ? ? jsApiList: ["onMenuShareTimeline","onMenuShareAppMessage","onMenuShareQQ"] // 必填 });
wx.ready(function () { wx.onMenuShareAppMessage({ //配置分享給朋友接口 title: "分享的標題", // 分享標題 desc: "這是一個測試分享", // 分享描述 link: location.href, // 分享鏈接 imgUrl: "", // 分享圖標 type: "", // 分享類型,music、video或link,不填默認為link dataUrl: "", // 如果type是music或video,則要提供數據鏈接,默認為空 success: function () { // 用戶確認分享后執行的回調函數 }, cancel: function () { // 用戶取消分享后執行的回調函數 } }) });
至此,分享功能大功告成。但是,這就要求在每個組件中都加微信分享代碼,會導致維護困難。
由于Angular2加載每個組件都被包在根組件里,因此可以只在根組件中配置公共的分享配置信息,即可給所有的頁面添加優化的分享操作。配置思路如下:
在根組件里配置公共的初始化分享接口信息;
在每次加載頁面時,為該頁面添加初始化分享;
有一套默認的分享配置,且在頁面中使用id配置分享的信息,如頁面未配置分享信息,則使用默認配置;
基于以上思路,最終的實現代碼如下:
//*說明:AppComponent必須為根組件 export class AppComponent implements OnInit,AfterViewInit { ... ngAfterViewInit() { this.configWXShare(); //在根組件中配置分享 } //配置分享 private configWX() { this.router.events.subscribe((val) => { if (val instanceof NavigationEnd) { //綁定路由變化事件,每次新轉到一個頁面即 let page = this; page.commonService.getWXJsInitConfig().then(obj => { page.commonService.configWXJs(obj, [ "onMenuShareTimeline", "onMenuShareAppMessage", "onMenuShareQQ"]); }); setTimeout(function () { //默認的分享信息 let shareData = {title: "分享的標題" , link: location.href , desc: "分享的描述" , imgUrl: page.getShareImgUrl() }; //獲取頁面中配置的分享信息,如未配置則使用默認信息 shareData["title"] = document.getElementById("shareTitle") ?document.getElementById("shareTitle").innerText : shareData.title; shareData["imgUrl"] = document.getElementById("shareImg") ? document.getElementById("shareImg").getAttribute("src") : shareData.imgUrl; shareData["desc"] = document.getElementById("shareDesc") ? document.getElementById("shareDesc").innerText : shareData.desc; wx.ready(function () { wx.onMenuShareAppMessage(shareData); // 分享微信 wx.onMenuShareTimeline(shareData); // 分享到朋友圈 wx.onMenuShareQQ(shareData); // 分享到QQ }); }, 2000); //說明:根組件初始化完成,子組件的異步請求數據可能還未返回,因此在2秒后注冊分享。 } }); } //自動獲取分享的縮略圖 private getDefaultShareImgUrl() { let shareImg = document.getElementById("shareImg"); if (shareImg) { return shareImg.getAttribute("src"); } let imgList = document.querySelectorAll("img"); for (let i = 0; imgList[i]; i++) { var imgSrc = imgList[i].getAttribute("src"); if (imgSrc.startsWith("http://") || imgSrc.startsWith("https://")) { return imgSrc } } }
至此,只在一處配置,可以靈活配置的分享完成了。
完成:最終的分享是這樣:
附錄.踩坑記錄提示{"errMsg":"config:invalid signature"}
造成這個情況的可能性比較多。不過主要有以下三個原因:
確認簽名算法正確,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁面工具進行校驗。
確定wx.config中nonceStr和timestamp的字母大小寫是否正確【常見錯誤】
確認config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/81978.html
摘要:最近做個移動端的應用,要實現自定義微信分享功能,實現過程中遇到一些小小的坑,這里分享一下。后來微信放出了,開始對端提供豐富強大的官方接口支持,也逐漸淡出了開發者的視野。 最近做個移動端的H5應用,要實現自定義微信分享功能,實現過程中遇到一些小小的坑,這里分享一下。 以前微信官方是沒有正式支持微信分享的自定義接口(包括圖片、標題、描述)的,然而有一些大神找到了WeixinJSBridge...
摘要:最近做個移動端的應用,要實現自定義微信分享功能,實現過程中遇到一些小小的坑,這里分享一下。后來微信放出了,開始對端提供豐富強大的官方接口支持,也逐漸淡出了開發者的視野。 最近做個移動端的H5應用,要實現自定義微信分享功能,實現過程中遇到一些小小的坑,這里分享一下。 以前微信官方是沒有正式支持微信分享的自定義接口(包括圖片、標題、描述)的,然而有一些大神找到了WeixinJSBridge...
摘要:路由守衛內觸發更新簽名獲取真實有效微信簽名此處需要自行處理在路由守衛內更新簽名,保證是使用當前頁面,是使用目標路由完整地址再加上域名使用簽名調用在使用的頁面通過取出緩存的微信簽名,然后進行簽名。 背景 手機型號: 型號:iphone 7 / iphone xs max版本:ios 10.3.1 / ios 12.1微信版本:WeChat 6.7.3 問題還原: Vue應用(vue-ro...
摘要:微信分享的內容,從視覺上看有三個部分標題描述圖片。聲明年月日,微信宣布未接入的網站將統一顯示默認縮略圖所以在某些時候,訂制內容是極為必要的。 微信分享的內容,從視覺上看有三個部分:標題、描述、圖片。如果不使用微信的 jssdk 進行訂制的話,微信會截取一張大概 300*300 并且距離 標簽最近的一張圖片作為需要的圖片;標題會選取中的內容;描述則會是該頁面的 URL。 聲明:2017年...
閱讀 3090·2021-11-22 13:54
閱讀 842·2021-11-04 16:08
閱讀 4540·2021-10-11 11:09
閱讀 3605·2021-09-22 16:05
閱讀 936·2019-08-30 15:54
閱讀 397·2019-08-30 15:44
閱讀 603·2019-08-30 14:05
閱讀 1025·2019-08-30 12:46