聖誕節和元旦團隊策劃了兩個活動,都涉及到了在多個平臺下的分享,如何按照產品要求實現多平臺下一致的分享效果,包括分享文案的動態生成,在沒有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下一樣有效)下也有設置分享內容的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進行分享,該方法的好處在於能夠在非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。 效果以下:
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可獲得分享參數。代碼以下:
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
不共存。效果以下:
微博提供了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-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瀏覽器也提供了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 |
分享面板 |
調起分享面板的效果以下:
調起微博:
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 | 分享面板 |
調起分享面板的效果以下:
特別聲明: 文本轉載@Crazy_Urus 發佈在掘金的《移動端H5多平臺分享實踐》一文。如需轉載,煩請註明原文出處:http://www.javashuo.com/article/p-dsapahvf-cx.html
著做權歸做者全部。
商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
原文: https://www.w3cplus.com/mobile/h5-share.html © w3cplus.com