(function(window) { var Share={}; Share.info = { id: '', name: '', head_image: "_www/images/icon/A/144.png", introduce: '' }; /** * 更新分享服務 */ var shares = null; function getSerivces() { plus.share.getServices(function(s) { shares = {}; for (var i in s) { var t = s[i]; shares[t.id] = t; } }, function(e) { console.log("獲取分享服務列表失敗:" + e.message); }); }; function shareAction(id, ex) { var s = null; if (!id || !(s = shares[id])) { console.log("無效的分享服務!"); return; } if (s.authenticated) { console.log("---已受權---"); shareMessage(s, ex); } else { console.log("---未受權---"); //TODO 受權沒法回調,有bug s.authorize(function() { console.log('受權成功...') shareMessage(s, ex); }, function(e) { console.log("認證受權失敗:" + e.code + " - " + e.message); }); } }; var sharecount = 0; /** * 發送分享消息 * @param */ function shareMessage(s, ex) { plus.nativeUI.showWaiting(); setTimeout(plus.nativeUI.closeWaiting,5000);//TODO 5秒後自動關閉等待,不然若是用戶分享出去後選擇‘留在微信’,再手動回到app的時候,waiting沒法關閉 var msg = { extra: { scene: ex } }; msg.href = "分享的網址" + "share?hid=" + Share.info.id; msg.title = "我在xxxx等你——" + Share.info._name; msg.content = Share.info.introduce; //取本地圖片 var img = plus.io.convertAbsoluteFileSystem(Share.info.head_image.replace('file://', '')); console.log(img); msg.thumbs = [img]; if (sharecount > 0) { //若是本地圖片過大,致使分享失敗,遞歸時從新分享獲取默認圖片 msg.thumbs = ["_www/images/icon/A/144.png"]; } console.log(JSON.stringify(msg)); s.send(msg, function() { plus.nativeUI.closeWaiting(); var strtmp = "分享到\"" + s.description + "\"成功! "; console.log(strtmp); plus.nativeUI.toast(strtmp, { verticalAlign: 'center' }); sharecount = 0; }, function(e) { plus.nativeUI.closeWaiting(); if (e.code == -2) { plus.nativeUI.toast('已取消分享', { verticalAlign: 'center' }); sharecount = 0; } else if (e.code == -3 || e.code == -8) { console.log(e.code); if (++sharecount < 2) { //TODO 分享失敗多是圖片過大的問題,遞歸取默認圖片從新分享 shareMessage(s, ex); } else { sharecount = 0; plus.nativeUI.toast('分享失敗', { verticalAlign: 'center' }); } }else{ console.error('分享失敗:'+JSON.stringify(e)) } console.log("分享到\"" + s.description + "\"失敗: " + e.code + " - " + e.message); }); }; function share() { bhref = true; var ids = [{ id: "weixin", ex: "WXSceneSession" }, { id: "weixin", ex: "WXSceneTimeline" }], bts = [{ title: "發送給微信好友" }, { title: "分享到微信朋友圈" }]; plus.nativeUI.actionSheet({ cancel: "取消", buttons: bts }, function(e) { var i = e.index; if (i > 0) { shareAction(ids[i - 1].id, ids[i - 1].ex); } } ); }; Share.share=share; window.Share = Share; mui.plusReady(function() { getSerivces(); }); })(window)