# mpShare 小程序分享

此功能,是对uni的onShareAppMessage 生命周期 (opens new window)的封装。

这里说的小程序,指的是"微信小程序、百度小程序、头条小程序、QQ小程序,支付宝小程序等"。

由于小程序的分享(微信、头条平台),需要监听页面的onShareAppMessage生命周期,小程序需要在页面声明了此生命周期,点击右上角的"胶囊"才会有分享功能, 而一般情况下,我们希望每个页面都可以分享,那就需要每个页面都写一遍这个生命周期,是很繁琐的。

基于以上,uView通过mixin的形式,给每一个页面注入了onShareAppMessage生命周期,让您简单引入,无需任何后续操作,即可让每一个页面都有分享功能(仅针对小程序)。

# 平台差异说明

App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序
x x

# 基本使用

需要注意的是,小程序(uni)没有提供类似"getNavigationBarTitle"这样的接口,所以我们无法获取当前页面导航栏的标题,换言之,我们想要每个页面个性化的 分享标题,需要手动设置,否则默认为小程序的名称

注意:

分享功能是默认关闭的,但是我们写好各项配置,您只要在main.js中引入对应的文件即可,我们没有默认引入,是因为某些用户并不需要此功能。

打开小程序分享功能:

// main.js

// 其他内容

import mpShare from './uni_modules/vk-uview-ui/libs/mixin/mpShare.js';
Vue.mixin(mpShare)

// 其他内容

完整的 main.js 参考

import App from './App'

// 引入 uView UI
import uView from './uni_modules/vk-uview-ui';
import mpShare from './uni_modules/vk-uview-ui/libs/mixin/mpShare.js';

// #ifdef VUE2

import Vue from 'vue'

// 使用 uView UI
Vue.use(uView);

Vue.mixin(mpShare)

Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
	...App
})
app.$mount()

// #endif

// #ifdef VUE3

import { createSSRApp } from 'vue'
export function createApp() {
	const app = createSSRApp(App)

	// 使用 uView UI
	app.use(uView)
	
	app.mixin(mpShare)

	return {
		app
	}
}

// #endif

分享功能,一般有三个参数,如下:

// 该对象已集成到this.$u中,内部属性如下
this.$u.mpShare = {
	title: '', // 默认为小程序名称,可自定义
	path: '', // 默认为当前页面路径,一般无需修改,QQ小程序不支持
	// 分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径。
	// 支持PNG及JPG,默认为当前页面的截图
	imageUrl: '' 
}

以上这些,uView已通过mixin集成,当某一个页面您需要自定义分享信息时,可以通过"this.$u.mpShare"对进行修改,在页面的onLoad生命周期修改即可。

export default {
	onLoad() {
		this.$u.mpShare.title = '天苍苍野茫茫,风吹草低见牛羊';
	}
}

# 重写"onShareAppMessage"生命周期

如果您基于自己的一些业务逻辑,需要更加自定义的实现逻辑,可以在页面中重写onShareAppMessage生命周期即可覆盖uView通过mixin监听的onShareAppMessage生命周期。

export default {
	// 这里如果写成onShareAppMessage: res => { ... }形式的箭头函数,在内部会无法获得this
	onShareAppMessage(res) {
		if (res.from === 'button') {// 来自页面内分享按钮
			console.log(res.target)
		}
		return {
			title: '自定义分享标题',
			path: '/pages/test/test?id=123'
		}
    }
}

# 分享到朋友圈 1.7.2

此功能为微信小程序最新加入的功能,仅适用于微信小程序,uView也全局监听了此生命周期。

同理,你也可以在页面中重写onShareTimeline生命周期即可覆盖uView通过mixin监听的onShareTimeline生命周期。

export default {
	onShareTimeline(res) {
		if (res.from === 'button') {// 来自页面内分享按钮
			console.log(res.target)
		}
		return {
			title: '自定义分享标题',
			path: '/pages/test/test?id=123'
		}
    }
}