# @choochmeque/tauri-plugin-iap-api 中文文档

规范地址：https://npmcn.com/package/%40choochmeque/tauri-plugin-iap-api/

版本：0\.10\.0-rc\.10
npm 元数据更新时间：2026-09-01T12:03:34.389Z
中文译文更新时间：2026-11-09T14:27:20.336Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40choochmeque/tauri-plugin-iap-api
原文对照：https://npmcn.com/package/%40choochmeque/tauri-plugin-iap-api/?lang=original
项目主页：https://github.com/Choochmeque/tauri-plugin-iap#readme
源码仓库：https://github.com/Choochmeque/tauri-plugin-iap

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：49.2 kB，6 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2025-07-31T19:15:38.240Z
- 最新版本发布：2026-09-01T12:03:33.843Z
- 近 30 天下载量：10565（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：37（近 12 个月 19 个）

## 中文简介

一个 Tauri v2 插件, 允许内购( IAP)

## 安装

```sh
npm install @choochmeque/tauri-plugin-iap-api
```

也可以使用：`pnpm add @choochmeque/tauri-plugin-iap-api`、`yarn add @choochmeque/tauri-plugin-iap-api`、`bun add @choochmeque/tauri-plugin-iap-api`

## README

[![NPM Version](https://img.shields.io/npm/v/@choochmeque%2Ftauri-plugin-iap-api)](https://www.npmjs.com/package/@choochmeque/tauri-plugin-iap-api) [![Crates.io Version](https://img.shields.io/crates/v/tauri-plugin-iap)](https://crates.io/crates/tauri-plugin-iap) [![Tests](https://github.com/Choochmeque/tauri-plugin-iap/actions/workflows/tests.yml/badge.svg)](https://github.com/Choochmeque/tauri-plugin-iap/actions/workflows/tests.yml) [![codecov](https://codecov.io/gh/Choochmeque/tauri-plugin-iap/branch/main/graph/badge.svg)](https://codecov.io/gh/Choochmeque/tauri-plugin-iap) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://npmcn.com/package/%40choochmeque/tauri-plugin-iap-api/LICENSE)

# Tauri 插件 IAP

用于In-App Pushers(IAP)的Tauri插件,支持订阅iOS(StoreKit 2),Android(Google Play Billing),Windows(微软商店)和macOS(StoreKit 2).

## 特征

-   详细定价的查询产品和订阅
-   具有平台特色的订阅
-   恢复以前的购买
-   获取购买历史
-   检查产品所有权和订阅状况
-   通过事件实时购买状态更新
-   自动交易核实( iOS)
-   对介绍性和免费审判的支助
-   使用模糊的账户/身份证明防止欺诈(Android)
-   跟踪的 App 账户符号支持( iOS)
-   自动发价符选择( Android)
-   带有平分模式的订阅升级/下级(Android)

## 平台支持

-   **iOS系统**: StoreKit 2 (需要iOS 15.0+) (中文(简体) )
-   **机器人**: Google Play Billing 图书馆 v 9.0.0
-   **窗口**: 微软存储 API (Windows 10/11)
-   **马科斯**: StoreKit 2 (需要macOS 13.0+) (中文(简体) )

## 安装

安装 JavaScript 软件包 :

```bash
npm install @choochmeque/tauri-plugin-iap-api
# or
yarn add @choochmeque/tauri-plugin-iap-api
# or
pnpm add @choochmeque/tauri-plugin-iap-api
```

在您的 Tauri 工程中添加插件 `Cargo.toml`数字 :

```toml
[dependencies]
tauri-plugin-iap = "0.10"
```

配置您的插件权限 `capabilities/default.json`数字 :

```json
{
  "permissions": [
    "iap:default"
  ]
}
```

在您的 Tauri 应用程序中注册插件 :

```rust
fn main() {
    tauri::Builder::default()
        .plugin(tauri_plugin_iap::init())
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}
```

## 示例应用

示例应用程序在 [`examples/iap-demo`](https://npmcn.com/package/%40choochmeque/tauri-plugin-iap-api/examples/iap-demo) 目录。 该示例展示了所有具有UI的IAP核心功能:

-   以定价方式获取和显示产品
-   采购产品和订阅
-   恢复以前的购买
-   检查产品所有权状况
-   实时采购更新通知

### 运行示例

```bash
cd examples/iap-demo

# Install dependencies
pnpm install

# Run in development mode
pnpm tauri dev

# Build for production
pnpm tauri build
```

**重要内容:** 该应用程序必须经过适当的代号来测试IAP功能:

-   **iOS/macOS 系统**:StoryKit要求代码签名. 配置在Xcode或通过Tauri的配置签名.
-   **机器人**:在你的APK/AAB上签名,并加放出键盘用于生产测试.
-   **窗口**: App必须与Microsoft Store关联并签名提交 Store.

示例应用为每个 IAP 特性提供了内置文档的全功能演示,使得它易于理解如何将插件整合到您自己的应用程序中.

## 使用量

### Java 脚本/ Type 脚本

```typescript
import {
  getProducts,
  purchase,
  restorePurchases,
  acknowledgePurchase,
  consumePurchase,
  getProductStatus,
  onPurchaseUpdated,
  PurchaseState
} from '@choochmeque/tauri-plugin-iap-api';

// Get available products
const products = await getProducts(['subscription_id_1', 'subscription_id_2'], 'subs');

// Check if user owns a specific product
const status = await getProductStatus('subscription_id_1', 'subs');
if (status.isOwned && status.purchaseState === PurchaseState.PURCHASED) {
  console.log('User has active subscription');
  if (status.isAutoRenewing) {
    console.log('Subscription will auto-renew');
  }
}

// Purchase a subscription or in-app product
// Simple purchase (will use first available offer on Android if not specified)
const purchaseResult = await purchase('subscription_id_1', 'subs');

// With specific offer token (Android)
const purchaseResult = await purchase('subscription_id_1', 'subs', {
  offerToken: product.subscriptionOfferDetails[0].offerToken
});

// With fraud prevention (Android)
const purchaseResult = await purchase('subscription_id_1', 'subs', {
  obfuscatedAccountId: 'hashed_account_id',
  obfuscatedProfileId: 'hashed_profile_id'
});

// With app account token (iOS - must be valid UUID)
const purchaseResult = await purchase('subscription_id_1', 'subs', {
  appAccountToken: '550e8400-e29b-41d4-a716-446655440000'
});

// Upgrade/downgrade subscription (Android, Billing Library 9.0+)
import { SubscriptionReplacementMode } from '@choochmeque/tauri-plugin-iap-api';

const upgraded = await purchase('premium_subscription', 'subs', {
  offerToken: 'premium_offer_token',
  oldProductId: currentSubscription.productId,
  subscriptionReplacementMode: SubscriptionReplacementMode.WITH_TIME_PRORATION
});

// Restore purchases (specify product type)
const restored = await restorePurchases('subs');

// Acknowledge a non-consumable purchase (subscriptions, durables).
// No-op on iOS/macOS — StoreKit auto-finishes transactions.
await acknowledgePurchase(purchaseResult.purchaseToken);

// Consume a consumable purchase (credits, coins) so it can be re-bought.
// No-op on iOS/macOS — StoreKit auto-allows re-purchase.
await consumePurchase(purchaseResult.purchaseToken);

// Listen for purchase updates
const listener = await onPurchaseUpdated((purchase) => {
  console.log('Purchase updated:', purchase);
});

// Stop listening
await listener.unregister();
```

### 锈

```rust
use tauri_plugin_iap::{IapExt, PurchaseRequest, PurchaseStateValue, Result};


// Get available products
let products = app.iap()
    .get_products(
        vec!["subscription_id_1".into(), "subscription_id_2".into()],
        "subs".into(),
    )
    .await?;

// Check if user owns a specific product
let status = app.iap()
    .get_product_status("subscription_id_1".into(), "subs".into())
    .await?;
if status.is_owned && status.purchase_state == Some(PurchaseStateValue::Purchased) {
    println!("User has active subscription");
    if status.is_auto_renewing == Some(true) {
        println!("Subscription will auto-renew");
    }
}

// Purchase a subscription or in-app product
// Simple purchase (will use first available offer on Android if not specified)
let purchase_result = app.iap()
    .purchase(PurchaseRequest {
        product_id: "subscription_id_1".into(),
        product_type: "subs".into(),
        options: None,
    })
    .await?;

// Restore purchases (specify product type)
let restored = app.iap().restore_purchases("subs".into()).await?;

// Acknowledge a non-consumable purchase (subscriptions, durables).
// No-op on iOS/macOS — StoreKit auto-finishes transactions.
app.iap().acknowledge_purchase(purchase_result.purchase_token).await?;
```

## 平台设置

### iOS 设置

1.  在 App Store 连接中配置您的应用程序
2.  创建有适当定价的订阅产品
3.  在 Xcode 中的应用程序中添加内购能力 :
    -   在 Xcode 中打开您的工程
    -   选择目标
    -   转到“ 签名能力( C) ”
    -   单击“ +” 并添加“ 在购买中”
4.  测试沙盒账户

### Android 设置

1.  将您的应用程序添加到 Google 播放控制台
2.  在 Google 游戏控制台创建订阅产品
3.  配置您的应用程序的计费权限( 已经包含在插件中)
4.  测试账户或沙盒环境

### 窗口设置

1.  在微软伙伴中心注册您的应用程序
2.  创建附加产品(消耗品、耐用品或订阅品)
3.  将您的应用程序与微软商店关联
4.  用 Windows 沙盒环境进行测试

### macOS 设置

1.  在 App Store 连接中配置您的应用程序
2.  创建有定价的订阅或应用程序购买产品
3.  配置签名代码 `tauri.conf.json`数字 :
    
    ```json
    {
      "bundle": {
        "macOS": {
          "signingIdentity": "Developer ID Application: Your Name (TEAM_ID)",
          "entitlements": "path/to/entitlements.plist"
        }
      }
    }
    ```
    
4.  添加 StoreKit 所需的权限( 创建) `entitlements.plist`:
    
    ```xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>com.apple.security.app-sandbox</key>
        <true/>
        <key>com.apple.security.network.client</key>
        <true/>
    </dict>
    </plist>
    ```
    
5.  测试沙盒账户或 StoreKit 配置文件
6.  **重要**: App 必须签名才能使用 StoreKit API

## API 参考

### `getProducts(productIds: string[], productType: 'subs' | 'inapp')`

从商店获取产品细节.

**回返情况:**

-   `products`: 产品对象阵列:
    -   `productId`: 产品标识符
    -   `title`: 显示名称
    -   `description`: 产品说明
    -   `productType`: 产品类型
    -   `formattedPrice`: 本地化价格字符串
    -   `subscriptionOfferDetails`: (仅订阅) 报价组合

### `purchase(productId: string, productType: 'subs' | 'inapp' = 'subs', options?: PurchaseOptions)`

启动采购流程,加强欺诈预防和账户管理选项.

**参数:**

-   `productId`: 要购买的产品
-   `productType`: 产品类型(订阅的"子",一次性购买的"应用"),默认为"子"
-   `options`: 可选购买参数:
    -   `offerToken`: (Android) 具体的购买报价. 如果不提供,则使用第一个可用报价
    -   `obfuscatedAccountId`: (Android) 防止欺诈的Hashed账户ID
    -   `obfuscatedProfileId`: (Android)Hashed profile ID 用于预防欺诈
    -   `appAccountToken`: (iOS)用于账户跟踪和预防欺诈的UUID字符串
    -   `oldProductId`: (Android) 现有订阅用于升级/下级替换的产品ID(Billing Library 9.0+)
    -   `subscriptionReplacementMode`: (Android) 使用 `SubscriptionReplacementMode` enum - (英语) `WITH_TIME_PRORATION`, (中文(简体) ), `CHARGE_PRORATED_PRICE`, (中文(简体) ), `WITHOUT_PRORATION`, (中文(简体) ), `CHARGE_FULL_PRICE`, (中文(简体) ), `DEFERRED`, (中文(简体) ), `KEEP_EXISTING` (违约) `WITH_TIME_PRORATION`(中文(简体) )

**回返情况:** 有交易细节的购买对象

### `restorePurchases(productType: 'subs' | 'inapp' = 'subs')`

查询并返回所有活动的购买.

**参数:**

-   `productType`: 要还原的产品类型 ('subs' 或' inapp'), 默认为'subs'

### `getPurchaseHistory()`

返回完整的购买历史 .

### `acknowledgePurchase(purchaseToken: string)`

确认非消耗性购买(订阅、耐用)。 在Android上,这需要在3天内完成,或者谷歌自动退款购买. iOS,macOS,和Windows上没有 -op. 使用 `consumePurchase` 换成消耗品.

### `consumePurchase(purchaseToken: string)`

消费了一种可消费的购买(信用,硬币,宝石),因此可以再购买. 安卓电话 `BillingClient.consumeAsync()`; 视窗调用 `StoreContext.ReportConsumableFulfillmentAsync` 与数量 1. iOS和macOS上的禁用- StoreKit自动取款机回购. 永远不要给两者打电话 `acknowledgePurchase` 财务报告和审定财务报表 `consumePurchase` 同一个购买物.

### `getProductStatus(productId: string, productType: 'subs' | 'inapp' = 'subs')`

检查特定产品的所有权和订阅状况.

**参数:**

-   `productId`: 要检查的产品标识符
-   `productType`: 产品类型 ("子"或"inapp"),默认为"子"

**回返情况:** 产品状态对象:

-   `productId`: 产品标识符
-   `isOwned`: 用户目前是否拥有产品
-   `purchaseState`: 当前状态(PURCHASED=0, CANCELED=1, PENDING=2)
-   `purchaseTime`: 产品购买时(时间戳)
-   `expirationTime`: (仅订阅) 订阅到期时
-   `isAutoRenewing`: (仅订阅) 是否启用自动更新
-   `isAcknowledged`:购买是否得到承认
-   `purchaseToken`: 用于购买交易的托肯

### `onPurchaseUpdated(callback: (purchase: Purchase) => void): Promise<PluginListener>`

购买状态变化的听觉 .

**回返情况:** A 类 `PluginListener` 带有对象 `unregister()` 停止倾听的方法.

## 平台之间的差异

### iOS (StoreKit 2) (英语)

-   自动检查交易
-   不需要人工确认
-   支助介绍性提议和宣传性提议
-   交易更新自动被观察到
-   需要iOS 15.0+ (英语)

### Android (谷歌玩比林) (Google Play Billing) (英语)

-   要求在3天内进行人工确认
-   支持每个产品的多种订阅报价
-   订阅购买所需出价
-   更详细的定价阶段信息

### 视窗(微软存储)

-   存储器处理的自动确认
-   支持消耗品、耐用品和订阅
-   订阅时使用 SKU 更改

### macOS (StoreKit 2) (StoreKit 2) (英语)

-   与 iOS 相同的 StoreKit 2 API
-   自动检查交易
-   不需要人工确认
-   需要 macOS 13.0+
-   App 必须是代号( StoreKit 需要有效签名)

## 测试

### iOS系统

1.  使用沙盒测试账户
2.  物理设备测试(订阅在模拟器上效果不佳)
3.  在设置 > App Store > Sandbox 账户中清除购买历史

### 机器人

1.  上传您的应用程序到内部测试轨道
2.  在 Google 游戏控制台中添加测试账户
3.  使用测试支付方法的测试

### 窗口

1.  使用 Microsoft Store 沙盒环境
2.  在伙伴中心配置测试账户
3.  使用 Windows Dev Center 测试支付方法
4.  确保应用程序与 Store 上市相关

### 马科斯

1.  使用沙盒测试账户( 与 iOS 相同)
2.  使用 StoreKit 配置文件进行本地测试
3.  使用 StoreKit 必须使用代码
4.  在系统设置 > App Store > Sandbox 账户中清除购买历史

## 解决问题

`dyld: Library not loaded: @rpath/libswift_Concurrency.dylib`

此错误发生于 `MACOSX_DEPLOYMENT_TARGET` 位于13.0以下。 Tauri在调试模式下默认为11.0.

**备选案文1:** 添加 `.cargo/config.toml` 对您的项目:

```toml
[env]
MACOSX_DEPLOYMENT_TARGET = "13.0"
```

**备选案文2:** 运行时设置环境变量 :

```bash
MACOSX_DEPLOYMENT_TARGET="13.0" pnpm tauri dev
```

## 许可证

[麻省理工学院](https://npmcn.com/package/%40choochmeque/tauri-plugin-iap-api/LICENSE)

## 常见问题

### @choochmeque/tauri-plugin-iap-api 是什么？

一个 Tauri v2 插件, 允许内购\( IAP\)

### 如何安装 @choochmeque/tauri-plugin-iap-api？

在项目目录运行 npm install @choochmeque/tauri-plugin-iap-api，或使用 pnpm add / yarn add / bun add。

### @choochmeque/tauri-plugin-iap-api 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @choochmeque/tauri-plugin-iap-api 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @choochmeque/tauri-plugin-iap-api 可以商用吗？

@choochmeque/tauri-plugin-iap-api 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @choochmeque/tauri-plugin-iap-api 的下载量有多少？

根据 npm 官方下载统计，@choochmeque/tauri-plugin-iap-api 在 2026/10/10 – 2026/11/08 这 30 天内被下载 10,565 次，日均约 352 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @choochmeque/tauri-plugin-iap-api 还在维护吗？

最新版本 0\.10\.0-rc\.10 发布于 2026/09/01（2 个月前）；至今共发布 37 个版本，其中过去 12 个月发布了 19 个；首次发布于 2025/08/01。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

