ワンクリックで
weapp-share-timeline
微信小程序分享到朋友圈开发指南。当开发朋友圈分享功能、配置 onShareTimeline、适配单页模式、处理场景值 1154、navigationBarFit 布局调整时使用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
微信小程序分享到朋友圈开发指南。当开发朋友圈分享功能、配置 onShareTimeline、适配单页模式、处理场景值 1154、navigationBarFit 布局调整时使用。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Transpile React Web applications (v18+) into Taro 4.x code optimized for WeChat Mini Program. Use this skill when converting React components, pages, or utilities to Taro-compatible code with proper JSX element mapping, event handler transformation, navigation/routing conversion, and API shim layer.
微信小程序聊天工具开发指南。当开发聊天工具分包、配置 chatTools、发送消息到群聊、动态消息、获取群成员信息、wx.openChatTool、wx.getChatToolInfo 时使用。
| name | weapp-share-timeline |
| description | 微信小程序分享到朋友圈开发指南。当开发朋友圈分享功能、配置 onShareTimeline、适配单页模式、处理场景值 1154、navigationBarFit 布局调整时使用。 |
基础库 2.11.3+ 支持,Android/iOS 微信 8.0.24+
页面必须同时满足两个条件才能分享到朋友圈:
onShareAppMessageonShareTimelinePage({
// 1. 必须先启用"发送给朋友"
onShareAppMessage() {
return {
title: '分享标题',
path: '/pages/article/index?id=123',
imageUrl: '/images/share.png'
}
},
// 2. 再启用"分享到朋友圈"
onShareTimeline() {
return {
title: '朋友圈分享标题',
query: 'id=123', // 注意:不是 path,是 query
imageUrl: '/images/timeline-share.png'
}
}
})
import Taro, { useShareAppMessage, useShareTimeline } from '@tarojs/taro'
function ArticlePage() {
// 1. 必须先启用"发送给朋友"
useShareAppMessage(() => ({
title: '分享标题',
path: '/pages/article/index?id=123',
imageUrl: '/images/share.png'
}))
// 2. 再启用"分享到朋友圈"
useShareTimeline(() => ({
title: '朋友圈分享标题',
query: 'id=123',
imageUrl: '/images/timeline-share.png'
}))
return <View>文章内容</View>
}
export default ArticlePage
| 属性 | 类型 | 说明 |
|---|---|---|
| title | string | 分享标题,默认为小程序名称 |
| query | string | 自定义页面路径中携带的参数,如 id=123&type=news |
| imageUrl | string | 分享图片 URL,支持本地或网络图片 |
注意:onShareTimeline 使用 query 而非 path,不支持自定义页面路径。
用户从朋友圈打开分享的小程序页面时,进入"单页模式",这是一个特殊的受限运行环境。
scene === 1154// 原生小程序
const scene = wx.getLaunchOptionsSync().scene
const isSinglePage = scene === 1154
// Taro
import Taro from '@tarojs/taro'
const launchOptions = Taro.getLaunchOptionsSync()
const isSinglePage = launchOptions.scene === 1154
// 或使用 wx.getApiCategory (基础库 2.22.1+)
const apiCategory = wx.getApiCategory()
const isBrowseOnly = apiCategory === 'browseOnly' // 朋友圈快照页
import Taro, { useLoad } from '@tarojs/taro'
import { View, Text, Button } from '@tarojs/components'
import { useState } from 'react'
function ArticlePage() {
const [isSinglePage, setIsSinglePage] = useState(false)
const [article, setArticle] = useState(null)
useLoad(() => {
const scene = Taro.getLaunchOptionsSync().scene
setIsSinglePage(scene === 1154)
// 单页模式下使用未登录访问方式获取数据
fetchArticle()
})
const fetchArticle = async () => {
// 单页模式下无登录态,需使用公开接口
const res = await Taro.request({
url: 'https://api.example.com/public/article',
data: { id: articleId }
})
setArticle(res.data)
}
return (
<View className="article-page">
<View className="content">
<Text>{article?.title}</Text>
<RichText nodes={article?.content} />
</View>
{/* 单页模式下隐藏需要登录的交互 */}
{!isSinglePage && (
<View className="actions">
<Button onClick={handleLike}>点赞</Button>
<Button onClick={handleComment}>评论</Button>
</View>
)}
</View>
)
}
在页面 JSON 中配置 navigationBarFit 来调整顶部导航栏与页面的相交状态:
{
"navigationBarTitleText": "文章详情",
"navigationBarFit": "squeezed"
}
| 值 | 说明 |
|---|---|
float | 导航栏浮动在页面上方(默认) |
squeezed | 页面被导航栏挤压,从导航栏下方开始布局 |
| 组件 | 说明 |
|---|---|
button open-type | 开放能力按钮 |
camera | 相机组件 |
form | 表单组件 |
navigator | 导航组件 |
web-view | 网页容器 |
live-pusher | 直播推流 |
| 分类 | API |
|---|---|
| 登录 | wx.login、wx.checkSession、wx.getUserInfo、wx.getUserProfile |
| 路由 | wx.navigateTo、wx.redirectTo、wx.reLaunch、wx.switchTab、wx.navigateBack |
| 媒体 | wx.chooseImage、wx.chooseMedia、wx.chooseVideo、wx.saveImageToPhotosAlbum |
| 位置 | wx.openLocation、wx.chooseLocation、wx.startLocationUpdate |
| 支付 | wx.requestPayment |
| 分享 | wx.showShareMenu、wx.hideShareMenu、wx.updateShareMenu、wx.getShareInfo |
| 设备 | 蓝牙、Wi-Fi、NFC、剪贴板、扫码、电话 |
| 广告 | ad 组件、wx.createRewardedVideoAd、wx.createInterstitialAd |
分享到朋友圈适用于纯内容展示场景:
// 推荐:文章、新闻、产品详情等内容页
function ArticlePage() {
useShareTimeline(() => ({
title: article.title,
query: `id=${article.id}`,
imageUrl: article.cover
}))
// ...
}
// 不推荐:需要大量交互的页面
function ShoppingCartPage() {
// 购物车需要登录,不适合分享到朋友圈
}
function ContentPage() {
const [isSinglePage, setIsSinglePage] = useState(false)
useLoad(() => {
setIsSinglePage(Taro.getLaunchOptionsSync().scene === 1154)
})
const handleAction = () => {
if (isSinglePage) {
// 单页模式下引导用户打开完整小程序
Taro.showToast({
title: '请点击下方"前往小程序"使用完整功能',
icon: 'none',
duration: 2000
})
return
}
// 正常模式下执行操作
doSomething()
}
return (
<View>
<Button onClick={handleAction}>
{isSinglePage ? '前往小程序操作' : '立即操作'}
</Button>
</View>
)
}
// 单页模式下无登录态,设计公开接口
const fetchData = async (articleId: string) => {
// 使用不需要登录的公开接口
const res = await Taro.request({
url: `${API_BASE}/public/articles/${articleId}`,
method: 'GET'
// 不传 token
})
return res.data
}
function ContentPage() {
const [isSinglePage, setIsSinglePage] = useState(false)
useLoad(() => {
setIsSinglePage(Taro.getLaunchOptionsSync().scene === 1154)
})
return (
<View
className="page"
style={{
// 单页模式下底部有操作栏,需要额外 padding
paddingBottom: isSinglePage ? '80px' : 'env(safe-area-inset-bottom)'
}}
>
{/* 页面内容 */}
</View>
)
}
如果使用云开发,需在云函数中开启未登录访问:
// 云函数 config.json
{
"permissions": {
"openapi": []
},
"overrideUserSecurityRules": {
"allow": true // 允许未登录访问
}
}
A: 检查以下几点:
onShareAppMessage 和 onShareTimelineA: 单页模式无登录态,需要:
query 参数传递A:
详见 reference.md