小程序分享(转发)
要弹出分享窗口,只有2种?方式,1是点击右上角的菜单;2是在.wxml里使用表单组件<button>,如果是第一种方式,则需要在页面内.js文件中,在onShareAppMessage方法中写几句代码,随便几句,比如console.log(''),这样只是满足基本的转发;要自定义转发,需要返回一个对象,如下
onShareAppMessage: function (obj) {
let data = {}
data.title = app.globalData.shareTitle
var myIdPart = ''
if (app.globalData.id != '') {
myIdPart = '?inviter=' + app.globalData.id
}
//绝对路径;指定分享小程序的哪个页面,并可以加参数('?inviter=egid1234')
//如果不设置该参数path,则默认分享当前页面。
data.path = app.globalData.sharePageUrl + myIdPart
//自定义分享窗口的广告图,如果不设置默认是所分享的页面的截图
//图片时本地图片,貌似也可以是网络图片路径
data.imageUrl = app.globalData.shareIconUrl
return data
},
附:全局对象( app.js )app.globalData
globalData: {
id: '',
/**********************分享*************************/
shareTitle: '闪配快递,上门取件,次日达。',
//打开程序如果不是别人分享的,(inviter)传此参数;保持为固定值(0),全局使用!
//shareFixedSelfID表示无人邀请
shareFixedSelfID: 0,
//分享的页面,绝对路径
sharePageUrl: '/pages/Logins/launchPage/launchPage',
shareIconUrl: '/img/personalCenter/shareIcon.jpg',
/**********************分享*************************/
}
/*
报告邀请人(警告:绝对不要在app.js调用此方法;否则可能导致任何人邀请/分享都无效。)
*/
requestReportInviter: function (myid, inviter) {....}
如何处理别人分享带的参数?
下面代码是关于 转发, 邀请注册,获得奖励的例子。
1、接口requestReportInviter用于报告后台,‘谁’邀请了‘我’。第一个参数是当前用户的id,第二个参数是分享链接带过来的分享者的id
2、为了获取当前用户id,必须等待app.js请求接口获取到app.globalData.id;如果请求没有结束,则等待app.serverLoginCompelete请求结束后回调,再调用requestReportInviter;
3、utils.saveInviter(options.inviter) 和 let inviter = utils.getInviter()是工具类,通过本地缓存保存、获取分享者id;这即使碰巧第一次打开分享网络出错没有报告分享者成功,下次打开也能报告。
onLoad: function (options) {
//进入页面 -> 保存邀请者(如果有的话)-> 获取邀请者 -> 确保在登录成功之后,调用一次requestReportInviter向后台报告邀请者
utils.saveInviter(options.inviter)
let inviter = utils.getInviter()
if (app.globalData.isLoginOK == undefined) {
let that = this
app.serverLoginCompelete = function () {
let inviter2 = utils.getInviter()
if (inviter2 != undefined) {
app.requestReportInviter(app.globalData.id, inviter2)
} else {
app.requestReportInviter(app.globalData.id, app.globalData.shareFixedSelfID)
}
}
} else {
if (inviter != undefined) {
app.requestReportInviter(app.globalData.id, inviter)
} else {
app.requestReportInviter(app.globalData.id, app.globalData.shareFixedSelfID)
}
}
},
警告:每个分享页面必须调用requestReportInviter;小程序的根页面(默认打开页面)必须实现这个方法,保证1、如果是别人分享的,可以向后台报告分享人;2、如果是自己搜索打开的小程序,则分享人id=0;requestReportInviter接口可以多次调用,但后台需要判断,分享人id初始值为null,只有null状态可以插入值;如果是别人id=9999分享的,则插入9999;如果是自己搜索打开的小程序,则插入0;如果要优化,可以在本地缓存插入状态,如果已经插入分享人,则不需要再调用requestReportInviter接口。
自定义(优化)分享按钮:
自定义分享按钮
先自定义一个如上图样式的view(背景图片必须用base64;或设置颜色)
然后将button放入其中,button需要设置大小和view一样,背景色为透明:background-color: transparent;即使背景透明,button仍然有一个border线框,所以设置一个圆角border-radius: 7.28vmin;刚好切合背景图片,这样几乎就看不到button的外框了!
<view class='theButtonBG'>
<button class='theButton' open-type='share' bindtap='shareBtnClicked'> 邀请好友得现金</button>
</view>
.theButtonBG {
width: 91vmin;
height: 14.56vmin;
background-size: 100% 100%;
background-image: url("data:image/png;base64,iVBORw...==")
}
.theButton {
width: 100%;
height: 100%;
font-size: 15px;
color: #700014;
display: flex;
justify-content: center;
align-items: center;
border-radius: 7.28vmin;
background-color: transparent;
}
小程序无法转发到朋友圈,所以必须保存小程序码(或二维码图片),再转发到朋友圈。如果要生成小程序码,请看官方文档。可由后台生成,也可在前端生成,都可加参数。如果要生成海报,请参见【小程序生成带小程序码的海报】
网友评论