游戏分享需按平台和内容类型适配:微信小游戏须在onShareAppMessage中return配置对象;Android需用FileProvider处理URI并避免EXTRA_TEXT与EXTRA_STREAM冲突;iOS需集成各SDK并配置白名单,且回调不可靠。

游戏分享功能不是调用一个接口就能跑通的事,得看目标平台(微信、QQ、iOS、Android)和分享内容类型(链接、图片、小游戏、App内场景),不同组合的接入方式和限制差异极大。
微信小游戏分享必须用 wx.shareAppMessage,且仅限 onShareAppMessage 生命周期内触发
这是硬性限制,直接在按钮点击里调 wx.shareAppMessage 会报错 shareAppMessage is not available。必须提前在 Page 或 Component 的定义中声明 onShareAppMessage 函数,用户点右上角菜单或调用 wx.showShareMenu 后才能唤起分享面板。
- 分享文案、图片、路径都得在这个函数里 return 一个对象,不能异步获取后再 return
- 如果想动态传参(比如分享当前关卡),得把参数拼进
path字段,例如path: 'pages/game/game?level=5' - 自定义图片必须是本地临时路径或项目内静态资源,网络图地址会被微信忽略
Android 原生层调用系统分享需注意 Intent 的 Intent.EXTRA_TEXT 和 Intent.EXTRA_STREAM 冲突
很多开发者想同时分享文字+截图,但直接 putExtra 两个字段,部分机型(尤其 MIUI、ColorOS)只显示文字、不带图。根本原因是 Intent.EXTRA_STREAM 要求 URI 权限,而 Intent.EXTRA_TEXT 优先级更高,会覆盖掉附件行为。
- 纯文字分享:用
Intent.ACTION_SEND+Intent.EXTRA_TEXT即可 - 带图分享:必须只用
Intent.EXTRA_STREAM,文字作为图片的描述写在Intent.EXTRA_SUBJECT,或者把文字压进图片里再分享 - 截图后记得用
FileProvider生成合法 content:// URI,否则 Android 7.0+ 直接崩溃
iOS 分享到微信/微博等 App,UIActivityViewController 默认不包含这些入口
系统原生分享面板默认只显示“信息”“邮件”“AirDrop”,微信、QQ、微博等第三方入口需要它们自己注册了 UIActivity 才会出现。多数情况下,这些 App 在 iOS 上已不再主动注册,所以你看到的面板里没有它们。
- 要支持微信分享,必须集成微信官方 SDK,并调用
WXApi的sendReq:方法,不能依赖系统面板 - 微博、QQ 同理,各自 SDK 提供独立分享流程,且要求在
Info.plist中配置对应的 URL Scheme 和LSApplicationQueriesSchemes - 即使配置齐全,iOS 14+ 还可能因 ATT 弹窗未授权、后台刷新被禁等原因导致分享失败,需加 try-catch 并降级为复制链接
最常被忽略的是分享回调——微信 SDK 的 onResp:、Android 的 onActivityResult、iOS 的 application:openURL: 都不是 100% 可靠触发,尤其在多进程或后台切回时容易丢失。别指望靠它们做关键逻辑,比如“分享成功才解锁成就”,这类状态应该和服务端对齐,而不是依赖客户端回调。











