235 lines
4.4 KiB
Markdown
235 lines
4.4 KiB
Markdown
|
|
# 微信小程序分享功能使用指南
|
|||
|
|
|
|||
|
|
## 功能说明
|
|||
|
|
|
|||
|
|
提供了完整的微信小程序分享功能,包括:
|
|||
|
|
- 分享给好友
|
|||
|
|
- 分享到朋友圈
|
|||
|
|
- 保存图片到相册
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
### 1. 基础分享(在页面中)
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<template>
|
|||
|
|
<view>
|
|||
|
|
<button open-type="share">分享给好友</button>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script setup>
|
|||
|
|
import { createShareMessage, createShareTimeline } from '@/utils/share'
|
|||
|
|
|
|||
|
|
// 分享给好友
|
|||
|
|
function onShareAppMessage() {
|
|||
|
|
return createShareMessage({
|
|||
|
|
title: '分享标题',
|
|||
|
|
path: '/pages/index/index?id=123',
|
|||
|
|
imageUrl: 'https://example.com/share.jpg'
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 分享到朋友圈(需要在 app.json 中配置)
|
|||
|
|
function onShareTimeline() {
|
|||
|
|
return createShareTimeline({
|
|||
|
|
title: '朋友圈标题',
|
|||
|
|
query: 'id=123',
|
|||
|
|
imageUrl: 'https://example.com/share.jpg'
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 导出分享方法
|
|||
|
|
defineExpose({
|
|||
|
|
onShareAppMessage,
|
|||
|
|
onShareTimeline
|
|||
|
|
})
|
|||
|
|
</script>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 使用分享组件
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<template>
|
|||
|
|
<view>
|
|||
|
|
<share-actions
|
|||
|
|
@save="handleSave"
|
|||
|
|
:show-save="true"
|
|||
|
|
:show-share="true"
|
|||
|
|
save-text="保存图片"
|
|||
|
|
share-text="分享微信"
|
|||
|
|
/>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script setup>
|
|||
|
|
import { saveImageToAlbum, createShareMessage } from '@/utils/share'
|
|||
|
|
import shareActions from '@/components/share-actions.vue'
|
|||
|
|
|
|||
|
|
// 保存图片
|
|||
|
|
async function handleSave() {
|
|||
|
|
const imagePath = 'https://example.com/image.jpg'
|
|||
|
|
await saveImageToAlbum(imagePath)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 分享配置
|
|||
|
|
function onShareAppMessage() {
|
|||
|
|
return createShareMessage({
|
|||
|
|
title: '分享标题',
|
|||
|
|
path: '/pages/index/index'
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
defineExpose({
|
|||
|
|
onShareAppMessage
|
|||
|
|
})
|
|||
|
|
</script>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 保存二维码图片
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<template>
|
|||
|
|
<view>
|
|||
|
|
<uqrcode ref="qrcode" canvasId="qrcode" :value="qrcodeUrl" />
|
|||
|
|
<button @click="saveQrcode">保存二维码</button>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script setup>
|
|||
|
|
import { ref } from 'vue'
|
|||
|
|
import { saveImageToAlbum } from '@/utils/share'
|
|||
|
|
import { toast } from '@/utils/widget'
|
|||
|
|
|
|||
|
|
const qrcode = ref(null)
|
|||
|
|
const qrcodeUrl = ref('https://example.com')
|
|||
|
|
|
|||
|
|
async function saveQrcode() {
|
|||
|
|
try {
|
|||
|
|
if (!qrcode.value) {
|
|||
|
|
toast('二维码未加载完成')
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取二维码临时文件路径
|
|||
|
|
const tempFilePath = qrcode.value.toTempFilePath()
|
|||
|
|
if (tempFilePath) {
|
|||
|
|
await saveImageToAlbum(tempFilePath)
|
|||
|
|
} else {
|
|||
|
|
toast('获取二维码失败')
|
|||
|
|
}
|
|||
|
|
} catch (err) {
|
|||
|
|
console.error('保存失败:', err)
|
|||
|
|
toast('保存失败')
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 动态分享内容
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<script setup>
|
|||
|
|
import { ref, computed } from 'vue'
|
|||
|
|
import { createShareMessage } from '@/utils/share'
|
|||
|
|
|
|||
|
|
const currentItem = ref({
|
|||
|
|
id: '123',
|
|||
|
|
title: '商品标题',
|
|||
|
|
image: 'https://example.com/product.jpg'
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
// 动态生成分享配置
|
|||
|
|
function onShareAppMessage() {
|
|||
|
|
return createShareMessage({
|
|||
|
|
title: currentItem.value.title,
|
|||
|
|
path: `/pages/detail/detail?id=${currentItem.value.id}`,
|
|||
|
|
imageUrl: currentItem.value.image
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
defineExpose({
|
|||
|
|
onShareAppMessage
|
|||
|
|
})
|
|||
|
|
</script>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 配置说明
|
|||
|
|
|
|||
|
|
### 1. 启用分享到朋友圈
|
|||
|
|
|
|||
|
|
在 `pages.json` 中配置页面:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"path": "pages/index/index",
|
|||
|
|
"style": {
|
|||
|
|
"navigationBarTitleText": "首页",
|
|||
|
|
"enableShareTimeline": true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 全局分享配置
|
|||
|
|
|
|||
|
|
在 `App.vue` 中配置全局分享:
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<script>
|
|||
|
|
export default {
|
|||
|
|
onShareAppMessage() {
|
|||
|
|
return {
|
|||
|
|
title: '默认分享标题',
|
|||
|
|
path: '/pages/index/index'
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
onShareTimeline() {
|
|||
|
|
return {
|
|||
|
|
title: '默认朋友圈标题'
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</script>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## API 说明
|
|||
|
|
|
|||
|
|
### createShareMessage(options)
|
|||
|
|
|
|||
|
|
创建分享给好友的配置
|
|||
|
|
|
|||
|
|
**参数:**
|
|||
|
|
- `title` (string): 分享标题
|
|||
|
|
- `path` (string): 分享路径
|
|||
|
|
- `imageUrl` (string): 分享图片URL
|
|||
|
|
|
|||
|
|
**返回:** 分享配置对象
|
|||
|
|
|
|||
|
|
### createShareTimeline(options)
|
|||
|
|
|
|||
|
|
创建分享到朋友圈的配置
|
|||
|
|
|
|||
|
|
**参数:**
|
|||
|
|
- `title` (string): 分享标题
|
|||
|
|
- `query` (string): 分享路径参数
|
|||
|
|
- `imageUrl` (string): 分享图片URL
|
|||
|
|
|
|||
|
|
**返回:** 分享配置对象
|
|||
|
|
|
|||
|
|
### saveImageToAlbum(filePath)
|
|||
|
|
|
|||
|
|
保存图片到相册
|
|||
|
|
|
|||
|
|
**参数:**
|
|||
|
|
- `filePath` (string): 图片路径(本地临时路径或网络路径)
|
|||
|
|
|
|||
|
|
**返回:** Promise<boolean>
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. 分享图片建议尺寸:5:4,推荐 500x400px
|
|||
|
|
2. 分享路径必须是已注册的页面路径
|
|||
|
|
3. 保存图片需要用户授权相册权限
|
|||
|
|
4. 分享到朋友圈需要在页面配置中启用
|
|||
|
|
5. 网络图片会自动下载后保存到相册
|