- 版本:2.0.14
- GitHub:https://github.com/PeterStaev/nativescript-purchase
- NPM:https://npmjs.net.cn/package/nativescript-purchase
- 下载
- 昨日:2
- 上周:35
- 上月:133
NativeScript 应用内购买插件
用于制作应用内购买的 NativeScript 插件。
安装
从您的项目根目录运行以下命令
tns plugin add nativescript-purchase
此命令将自动安装必要的文件,并将 nativescript-purchase 作为依赖项存储在您的项目的 package.json 文件中。
为了获取智能感知并使 TypeScript 无错误地编译,请在您的 references.d.ts
中添加以下内容
/// <reference path="./node_modules/nativescript-purchase/nativescript-purchase.d.ts" />
配置
为了使插件能够识别您的应用内购买,您必须在 Google/iTunes 端进行配置。您可以通过查看页面底部的详细教程来了解如何分步进行。
API
静态属性
- transactionUpdatedEvent - String
用于连接到transactionUpdated
事件的字符串值。
静态方法
-
init(string[]): Promise
初始化插件以使用指定的应用内购买标识符。 -
getProducts(): Promise
返回 init 中使用的应用内购买标识符的产品详情(见下文)。 -
canMakePayments(): boolean
检查当前用户是否有权进行应用内购买。 -
buyProduct(Product, string?): void
购买指定的产品。在 Android 上,您可以发送自定义字符串数据,该数据将出现在Transaction
中。 -
consumePurchase(string): Promise
消耗由给定的事务令牌表示的购买。如果承诺返回0
,则消耗成功。注意,这仅在 Android 上需要。对于 iOS,每次购买在 iTunes 中设置为可消耗产品时都会自动消耗。 -
restorePurchases(): Promise
恢复当前用户的先前购买项。在 Android 上,返回在购买已恢复时的承诺。在 iOS 上,返回完成的承诺(因为您可以使用 getStoreReceipt 立即获取收据)。 -
getStoreReceipt(): string
获取当前登录商店用户的 Base64 编码的应用程序存储收据。这在检查 iOS 下的订阅状态时很有用。对于 Android,该函数始终返回undefined
。 -
refreshStoreReceipt(): Promise
刷新当前登录商店用户的存储收据。这在交易无效或丢失时很有用。在 iOS 上,刷新完成后返回完成的承诺。
事件
- transactionUpdated
触发购买/恢复交易状态变化。您将收到一个Transaction
对象,您可以在其中检查交易的状态和其他属性 (见下文)。
Product
属性
-
nativeValue
表示产品的本地对象。在 iOS 上这将是一个SKProduct
实例,在 Android 上这将是一个org.json.JSONObject
。 -
productIdentifier - string
在 iTunes Connect 或 Google Store 上设置的应用内产品标识符。 -
localizedTitle - 字符串
基于用户手机本地化的产品标题。 -
localizedDescription - 字符串
基于用户手机本地化的产品描述。 -
priceAmount - 数字
此应用内产品的价格数值,基于用户应用商店的货币。 -
priceFormatted - 字符串
带有用户应用商店对应货币符号的格式化priceAmount
。 -
priceCurrencyCode - 字符串
价格的ISO4217货币代码(BGN、EUR、USD等) -
productType - "inapp" | "subs"
产品的类型 - 应用内购买或订阅。 -
subscriptionPeriod - 字符串
订阅的ISO8601持续时间。例如P1D
表示每日订阅,P1M
表示每月订阅,P3M
表示三个月订阅。此属性仅对类型为"subs"
的产品有效。
Transaction
属性
-
nativeValue
表示交易的本地值。在iOS上,这将是一个SKPaymentTransactio
实例,在Android上则是一个org.json.JSONObject
。 -
transactionState - 字符串
交易的状态。可以是以下之一- 已购买
- 已恢复
- 失败
- 延迟(仅iOS)
- 购买中(仅iOS)
- 已退款(仅Android)
-
productIdentifier - string
触发此交易的内部产品标识符。 -
transactionIdentifier - 字符串
交易的唯一标识符。 -
transactionDate - 日期
交易日期。 -
transactionReceipt - 字符串
Base64编码的交易收据。您可以使用它在其后端进行额外的验证。 -
originalTransaction - Transaction
当恢复购买时才会出现,并包含购买给定产品的原始交易。 -
developerPayload - 字符串
与buyProduct
一起发送的自定义数据。 -
dataSignature - 字符串(仅Android)
交易的签名。
用法
首先我们需要用将可购买的产品标识符列表初始化插件。最好在应用启动之前完成此操作。
请注意,插件的初始化可能需要的时间比应用启动的时间长。因此,如果您在着陆页加载产品,最好保存init()
方法返回的Promise
,然后在尝试获取产品之前检查它。
import * as purchase from "nativescript-purchase";
(global as any).purchaseInitPromise = purchase.init(["com.sample.purchase.coolproduct1", "com.sample.purchase.coolproduct2"]);
要获取实际产品及其详细信息(如标题、价格、货币等),应使用
import { Product } from "nativescript-purchase/product";
(global as any).purchaseInitPromise.then(() => {
purchase.getProducts().then((products: Array<Product>) => {
products.forEach((product: Product) => {
console.log(product.productIdentifier);
console.log(product.localizedTitle);
console.log(product.priceFormatted);
});
});
});
在购买项目之前,您应该连接到transactionUpdated
事件。这样,您将在执行过程中收到有关交易状态的信息,并在交易完成时采取必要的操作。
import { Transaction, TransactionState } from "nativescript-purchase/transaction";
import * as applicationSettings from "application-settings";
purchase.on(purchase.transactionUpdatedEvent, (transaction: Transaction) => {
if (transaction.transactionState === TransactionState.Purchased) {
alert(`Congratulations you just bought ${transaction.productIdentifier}!`);
console.log(transaction.transactionDate);
console.log(transaction.transactionIdentifier);
applicationSettings.setBoolean(transaction.productIdentifier, true);
}
else if (transaction.transactionState === TransactionState.Restored) {
console.log(`Purchase of ${transaction.originalTransaction.productIdentifier} restored.`);
console.log(transaction.originalTransaction);
console.log(transaction.originalTransaction.transactionDate);
applicationSettings.setBoolean(transaction.originalTransaction.productIdentifier, true);
}
else if (transaction.transactionState === TransactionState.Failed) {
alert(`Purchase of ${transaction.productIdentifier} failed!`);
}
});
现在让我们购买一个产品!
if (purchase.canMakePayments()) {
// NOTE: 'product' must be the same instance as the one returned from getProducts()
purchase.buyProduct(product);
}
else {
alert("Sorry, your account is not eligible to make payments!");
}
注意:由于iOS和Android在消费购买方面的差异 - 对于iOS,这由您在iTunes Connect中添加的产品定义,它将自动消耗,而对于Android,则需要手动进行 - 如果您将支持Android,您将需要通过调用consumePurchase
方法手动消耗购买。该方法接受单个参数,即交易的收据
purchase.on(purchase.transactionUpdatedEvent, (transaction: Transaction) => {
if (transaction.transactionState === TransactionState.Purchased && transaction.productIdentifier.indexOf(".consume") >= 0) {
purchase.consumePurchase(transaction.transactionReceipt)
.then((responseCode) => console.log(responseCode)) // If responseCode === 0 the purchase has been successfully consumed
.catch((e) => console.log(e));
}
});
以及将以前的购买恢复到用户的设备上
purchase.restorePurchases();
演示
此存储库包含一个纯NativeScript演示。请注意,为了设置和运行演示,您需要全局安装Grunt CLI。如果您尚未安装它,您可以在shell中运行以下命令来安装它
$ npm install -g grunt-cli
一旦您已经设置了 Grunt CLI,为了设置演示,请在您的 shell 中运行以下命令
$ git clone https://github.com/peterstaev/nativescript-purchase
$ cd nativescript-purchase
$ npm install
$ grunt compile
$ cd demo
您将无法直接运行演示,因为您需要将您的购买添加到商店中。另外,由于我已经注册了应用程序 ID,您必须在位于 demo
文件夹中的 package.json
文件中更改它。因此,请确保您阅读并遵循以下 深入教程 以开始使用演示。
深入教程
捐赠
bitcoin:14fjysmpwLvSsAskvLASw6ek5XfhTzskHC