新功能
可选授权
用户现在可以拒绝特定权限范围(scopes)并继续使用您的 Mini。授权不再是“全有或全无”的模式——如果用户拒绝了某个权限范围,您的 Mini 应优雅地降级功能,而不是阻断整个体验。如果您的 Mini 在权限被拒绝时直接崩溃或失败,请使用以下新提供的钩子(hooks)进行更新。
useCheckScopesConsent 钩子
在运行时检查用户已授予哪些权限范围。使用此钩子来有条件地渲染依赖于特定权限范围的功能。
用法:
import {useCheckScopesConsent} from '@shopify/shop-minis-react' function MyMini() { const {scopes} = useCheckScopesConsent() if (scopes.includes('product_lists:write')) { returnuseRequestScopesConsent 钩子
在用户之前拒绝后重新请求授权。该钩子必须从用户交互中调用——您不能自动重新提示。适用于那些通过授予授权来解锁明确的用户发起操作的流程。
用法:
import {useRequestScopesConsent} from '@shopify/shop-minis-react' function GrantAccessButton() { const {requestScopesConsent} = useRequestScopesConsent() return ( <button onClick={() => requestScopesConsent(['product_lists:write'])}> Enable saving products </button> ) }useCheckPermissions 钩子
与作用域不同,useCheckPermissions 允许您的 Mini 在调用需要特定权限的操作之前检查操作系统级别的权限(如相机、照片库等)。
用法:
import {useCheckPermissions} from '@shopify/shop-minis-react' function CameraFeature() { const {permissions} = useCheckPermissions(['camera']) if (permissions.camera === 'granted') { return <CameraView /> } return <RequestCameraButton /> }request_blocked 哨兵
当用户拒绝某个作用域或权限且平台不再重新提示时,相关钩子现在返回 request_blocked 哨兵值而不是 null。这使您能够区分“尚未询问”和“已询问但被阻止”,并相应地调整用户界面。有关完整状态机的详细信息,请参阅 shopify.dev 上的 Scopes Consent 文档。
意图(Intents)
意图是 Shop 应用与 Shop Minis 之间的一种新型通信层。Shop 应用会在具有上下文相关性的时刻(例如商品详情页)启动您的 Mini,并传递相应的上下文信息(通常是商品)。对于合作伙伴而言,这开辟了一条新的分发路径:不再仅依赖“探索”标签页,您的 Mini 可以在买家意图最强的地方展示。
目前支持两种意图:
| 意图 | 用途 |
|---|---|
| try_on | 虚拟试穿 Minis — 服装、配饰或任何可穿戴物品 |
| view_in | AR 和空间放置 Minis — 家具、装饰品或任何可在空间中可视化的物品 |
如果您的 Mini 符合支持的意图之一,或者您有其他用例(如食谱制作、礼品推荐、自定义配置等),请联系 Shop Minis 团队——我们目前正在招募合作伙伴,并积极评估新的意图。
useIntent Hook
解析启动您的 Mini 的意图。使用此功能读取 Shop 应用传入的上下文,并将用户路由到正确的体验页面。
用法:
import {useIntent} from '@shopify/shop-minis-react' function MyMini() { const intent = useIntent() if (intent?.action === 'try_on') { return <TryOn productId={intent.productId} /> } return <DefaultExperience /> }异步存储限制
为了保持 Mini 的快速运行,我们引入了对 useAsyncStorage 和 useSecureStorage 的限制:
- 每个 Mini 最多 10 个键
- 每个键 1 MB
大多数 Mini 都远低于这两个限制。异步存储旨在用于小型结构化数据——如果您要持久化较大的资产(如图片),请使用专用的上传钩子并存储生成的 URL,而不是原始字节。
Product Hooks 上的 availableForSale
产品钩子现在在变体上暴露 availableForSale,并且 SDK 的商务按钮(AddToCartButton、BuyNowButton)开箱即用即可处理缺货状态。如果您渲染产品卡片或构建自定义商务流程,请在让用户添加到购物车之前检查 availableForSale。
CLI 中的 pnpm 支持
npx minis create 现在支持与 npm 和 yarn 并列检测和使用 pnpm。
用法:
npx minis create # Select pnpm when prompted文档更新
作用域同意
shopify.dev 上的 Scopes Consent 页面已更新以反映可选同意机制。它现在记录了完整状态机(已授予、已拒绝、request_blocked),并包含针对新 useCheckScopesConsent、useRequestScopesConsent 和 useCheckPermissions 钩子的指导。
意图
新的文档页面全面介绍了意图:它们是什么、目前支持哪些意图(try_on、view_in)、launch-context 契约,以及如何在您的 Mini 中使用 useIntent 钩子解析意图。
弃用项
localStorage 和 sessionStorage
Mini Webview 内不再允许使用浏览器存储——它在 Android 上被禁用,并在 iOS 上于会话之间重置。Shop Minis ESLint 配置现在会标记任何使用 localStorage 或 sessionStorage 的情况。请迁移到 useAsyncStorage(持久化)或 useSecureStorage (encrypted).。
包版本
| 包 | 版本 |
|---|---|
| @shopify/shop-minis-platform | 0.17.0 |
| @shopify/shop-minis-react | 0.20.0 |
| @shopify/shop-minis-cli | 0.3.11 |
其他更改
- 禁止幻影依赖项导入:合作伙伴 ESLint 配置会标记那些未在您的 package.json 中声明的包的导入。
- 允许传递性 SDK 依赖项:clsx、tailwind-merge 和 cva 现在明确可供合作伙伴使用。
- TypeScript 6:SDK 现在基于 TypeScript 6.0.2 构建(此前为 5.8.3)。
摘要
2026年3月至4月为 Shop Minis 平台带来了重大改进:
- 可选同意现在是默认设置——三个新钩子让您的 Mini 在作用域被拒绝时优雅降级。
- 意图是一种新的通信层,用于从 Shop 应用中上下文相关的时刻启动您的 Mini——目前支持 try_on 和 view_in。
- 异步存储限制为每个 Mini 最多 10 个键,每个键 1 MB。
- availableForSale 针对产品变体的首流出库处理。
- localStorage 和 sessionStorage 在 Mini Webview 中不再被允许。
如有任何问题或反馈,请联系 Shop Minis 团队。

