移動端H5多平臺分享實踐--摘抄

編輯推薦: 掘金是一個高質量的技術社區,從 CSS 到 Vue.js,性能優化到開源類庫,讓你不錯過前端開發的每個技術乾貨。 點擊連接查看最新前端內容,或到各大應用市場搜索「 掘金」下載APP,技術乾貨盡在掌握中。javascript

聖誕節和元旦團隊策劃了兩個活動,都涉及到了在多個平臺下的分享,如何按照產品要求實現多平臺下一致的分享效果,包括分享文案的動態生成,在沒有Native的幫助下是比較困難的。咱們研究了不少分享方案,獲得了一套較爲完整的分享方案。php

微信的分享

微信下的分享經過調用微信提供的JS-SDK和引導用戶點擊右上角完成。使用微信的JS-SDK須要引入以下.js文件:css

<script src="//res.wx.qq.com/open/js/jweixin-1.3.1.js"></script> 

設置分享內容的代碼以下:html

wx.config({
    debug: false, appId: '公衆號的appid', timestamp: '時間戳', nonceStr: '隨機字符串', signature: '簽名', jsApiList: [ 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone', 'showOptionMenu', 'hideAllNonBaseMenuItem', 'showAllNonBaseMenuItem' ] }); wx.ready(function() { const share = { title: '分享標題(朋友圈只顯示標題)', desc: '分享內容', imgUrl: '圖片URL', link: '分享連接(最好是後臺JS安全域名)', success: function() { hideMaskLayer(); // 分享成功,隱藏引導用戶分享的浮層 }, cancel: function() { } }; wx.onMenuShareAppMessage(share); // 微信好友 wx.onMenuShareTimeline(share); // 朋友圈 wx.onMenuShareQQ(share); // QQ wx.onMenuShareQZone(share); // QQ空間 wx.onMenuShareWeibo(share); // 騰訊微博 }); 

其中wx.config中的參數由服務端獲得,具體可參見微信的開發文檔注意在公衆號後臺設置JS安全域名。效果以下:前端

微信的分享

微信的分享

QQ/TIM的分享

經過JavaScript API分享

QQ(如下無特殊說明TIM下一樣有效)下也有設置分享內容的API,一樣須要先引用JSBridge相關的文件:java

<script src="//open.mobile.qq.com/sdk/qqapi.js"></script> 

設置分享內容的代碼以下:node

const share = { title: '分享標題,最大45字節', desc: '分享內容,最大60字節', image_url: '圖片URL', share_url: '分享連接' }; mqq.data.setShareInfo(share, callback); 

須要注意的是:分享連接長度不能超過120字節,而且必須跟頁面URL同一個域名,不然設置不生效;分享的圖片最小須要200 * 200,不然分享到QQ空間時會被過濾掉。設置完分享內容後,可經過API調用喚起QQ的分享面板,免去引導的過程。web

mqq.ui.showShareMenu();

還有一種方法,QQ提供了監聽點擊分享平臺的事件,當點擊Native分享面板中的分享平臺時,會觸發此事件,QQ默認的分享行爲將再也不執行。代碼以下:sql

mqq.ui.setOnShareHandler(function (platform) { mqq.ui.shareMessage({ title: '分享標題', desc: '分享內容', share_type: platform, share_url: '分享連接', image_url: '圖片URL', sourceName: '掌上理工大', back: true }, function() { }); }); 

其中platform是分享平臺類型,取值以下:shell

編號 分享平臺 編號 分享平臺
0 QQ好友 1 QQ空間
2 微信好友 3 微信朋友圈

經過meta標籤分享

QQ也支持經過設置meta標籤訂義分享內容。經過定義itemprop可設置分享內容,同時爲了更好的兼容其它平臺,咱們也引入了Open Graph標準。代碼以下:

<meta itemprop="name" property="og:title" content="分享標題"> <meta property="og:url" content="分享連接"> <meta itemprop="image" property="og:image" content="圖片URL"> <meta name="description" itemprop="description" property="og:description" content="分享描述"> 

須要注意的是,meta標籤須要是服務端渲染輸出,經過JavaScript生成或修改無效。

經過URL Scheme喚起QQ分享

還能夠經過URL Scheme喚起QQ進行分享,該方法的好處在於能夠在非QQ環境下喚起QQ實現分享,缺點在於不能設置分享圖片。代碼以下:

const share = { title: '分享標題', desc: '分享內容', share_url: '分享連接' }; const url_scheme = '//share/to_fri?src_type=web&version=1&file_type=news&share_id=1103437993&title=' + Base64.encode(share.title) + '&thirdAppDisplayName=5o6M5LiK55CG5bel5aSn&url=' + Base64.encode(share.share_url) + '&description=' + Base64.encode(share.desc); location.assign('mqqapi:' + url_scheme); setTimeout(function() { location.assign('timapi:' + url_scheme); }, 2000); 

其中分享的參數在拼入URL中時須要Base64編碼。爲了支持TIM下的分享,咱們引入了延時函數,若是喚起QQ失敗該定時器將會執行喚起TIM,喚起成功離開了此頁面將不會執行。QQ和TIM均安裝時優先喚起QQ。 效果以下:

經過URL Scheme喚起QQ分享

經過分享組件的URL實現

QQ空間提供了分享組件,經過分析該組件可獲得分享URL的參數。代碼以下:

const share = { title: '分享標題', desc: '分享內容', image_url: ['圖片URL'], share_url: '分享連接' }; let image_urls = share.image_url.map(function(image) { return encodeURIComponent(image); }); location.replace('https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=' + encodeURIComponent(share.share_url) + '&site=掌上理工大&title=' + share.title + '&pics=' + image_urls.join('|') + '&summary=' + share.desc); 

其中可支持多圖片的分享,圖片URL用豎線分隔。該方法優勢在於一樣支持非QQ環境下的分享。非QQ下用戶登陸後便可分享,QQ下可免登直接分享。效果以下:

經過分享組件的URL實現

微博的分享

經過分享組件的URL實現

微博一樣提供了分享組件,經過分析URL可獲得分享參數。代碼以下:

const share = {
    title: '分享標題',
    image_url: '圖片URL',
    share_url: '分享連接'
};
location.replace('https://service.weibo.com/share/share.php?url=' + encodeURIComponent(share.share_url) + '&title=' + share.title + '&appkey=277159429&&ralateUid=1855112015&pic=' + share.image_url + '&searchPic=true'); 

其中appKey參數可選,若是設置微博將會顯示分享來源爲key對應的應用名稱(應用可在這裏註冊);ralateUid參數可選,指定微博用戶id,會在微博尾部@此用戶;searchPic用於控制是否自動爬取頁面的圖片,和pic不共存。效果以下:

經過分享組件的URL實現

經過微博API自動發送微博

微博提供了API可經過服務端調用接口直接發送一條微博。

POST https://api.weibo.com/2/statuses/share.json 

參數以下:

  必選 類型及範圍 說明編號
access_token string 採用OAuth受權方式爲必填參數,OAuth受權後得到
status string 用戶分享到微博的文本內容,必須URL Encode,文本中不能包含「#話題詞#」,同時文本中必須包含至少一個分享的URL,且該URL的域名須要在後臺設置。
pic binary 用戶分享到微博的圖片,僅支持.jpeg.gif.png圖片,上傳圖片大小限制爲5M。上傳圖片時,POST方式提交請求,須要採用multipart/form-data編碼方式。
rip string 開發者上報的操做用戶真實IP,好比:211.156.0.1

具體可參見微博分享平臺

經過JS API分享

微博一樣有提供JS-SDK可供調用Native的方法,在使用前須要在微博開放平臺申請輕應用,並設置安全域名。 使用微信的JS-SDK須要引入以下.js文件:

<script src="//tjs.sjs.sinajs.cn/open/thirdpart/js/jsapi/mobile.js"></script> 

一樣須要先設置初始化參數。

WeiboJS.init({ appkey : '輕應用key', debug: false, timestamp: '時間戳', noncestr: '隨機字符串', signature: '簽名', scope: ['openMenu', 'setMenuItems', 'menuItemSelected', 'setSharingContent'] }, function() { }); 

3個關於分享的JS API可供使用。

openMenu

該API可調起Native的分享面板。

WeiboJS.invoke('openMenu');

setSharingContent

該API可設置分享的內容。

WeiboJS.invoke('openMenu', {
    icon: share.title,
    desc: share.desc,
    icon: share.image_url
});

invokeMenuItem

該API能夠直接觸發分享面板中點擊相應菜單項。

WeiboJS.invoke('invokeMenuItem', { 
    code: platform
});

其中platform是分享平臺類型,取值以下:

編號 分享平臺 編號 分享平臺
1001 微博 1002 微博好友圈
1003 微博私信 1004 微信好友
1005 微信朋友圈 1006 微米好友
1007 微米圈 1008 來往(點點蟲)好友
1009 來往(點點蟲)動態 1010 QQ好友
1011 QQ空間 1101 短信
2001 系統瀏覽器 2002 複製連接

經過使用API 1 + API 2(最佳)或API 2 + API 3便可實現分享。具體可參見微博的開發文檔

支付寶的分享

支付寶一樣提供了JS API,能夠很方便的設置分享內容和喚起Native分享面板;不足之處在於不支持分享到QQ、微信等平臺。使用支付寶的JS-SDK須要引入以下js文件:

<script src="//a.alipayobjects.com/g/h5-lib/alipayjsapi/3.0.6/alipayjsapi.inc.min.js"></script> 

代碼以下:

const share = { title: '分享標題', content: '分享內容', image: '圖片URL', url: '分享連接', captureScreen: false, showToolBar: false }; ap.share(share, function() { }); 

效果以下:

支付寶的分享

UC瀏覽器的分享

UC瀏覽器也提供了JS API調用Native的分享,支持喚起分享面板和分享到具體平臺。代碼以下:

const share = { title: '分享標題', desc: '分享內容', image_url: '圖片URL', share_url: '分享連接' }; const isiOS = /(iPhone|iPad|iPod)/.test(navigator.userAgent); // 判斷應用平臺 if (isiOS) { if (ucbrowser.web_shareEX) { ucbrowser.web_shareEX( JSON.stringify({ title: share.title, content: share.desc, sourceUrl: share.share_url, imageUrl: share.image_url, source: '掌上理工大', target: platform }) ) } else { ucbrowser.web_share(share.title, share.desc, share.share_url, platform, '', '掌上理工大', share.image_url); } } else ucweb.startRequest('shell.page_share', [share.title, share.desc, share.share_url, platform, '', '掌上理工大', share.image_url]); 

其中platform是分享平臺類型,取值以下:

Android編號 iOS編號 分享平臺
'WechatFriends' 'kWeixinFriend' 微信好友
'WechatTimeline' 'kWeixin' 微信朋友圈
'QQ' 'kQQ' QQ好友
'Qzone' 'kQZone' QQ空間
'SinaWeibo' 'kSinaWeibo' 微博
undefined undefined 分享面板

調起分享面板的效果以下:

UC瀏覽器的分享

調起微博:

UC瀏覽器的分享

QQ瀏覽器的分享

QQ瀏覽器也提供了JS API調用Native的分享,一樣支持喚起分享面板、生成二維碼和分享到具體平臺。 首先須要引入以下JS文件:

<script src="//jsapi.qq.com/get?api=app.share"></script> 

代碼以下:

browser.app.share({ title: share.title, description: share.desc, url: share.share_url, img_url: share.image_url, from: '掌上理工大', to_app: platform }); 

其中platform是分享平臺類型,取值以下:

編號 分享平臺 編號 分享平臺
1 微信好友 8 微信朋友圈
4 QQ好友 3 QQ空間
11 微博 5 更多
7 生成二維碼 10 複製連接
undefined 分享面板    

調起分享面板的效果以下:

QQ瀏覽器的分享

特別聲明: 文本轉載@Crazy_Urus 發佈在掘金的《移動端H5多平臺分享實踐》一文。如需轉載,煩請註明原文出處:http://www.javashuo.com/article/p-dsapahvf-cx.html

著做權歸做者全部。
商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
原文: https://www.w3cplus.com/mobile/h5-share.html © w3cplus.com

相關文章
相關標籤/搜索