@courthoang/nativescript-in-app-purchase
NativeScript 插件,用于处理 Android 和 iOS 上的应用内购买和订阅。
npm i --save @courthoang/nativescript-in-app-purchase
- 版本:1.0.4
- GitHub: https://github.com/choang10/nativescript-in-app-purchase
- NPM: https://npmjs.net.cn/package/%40courthoang%2Fnativescript-in-app-purchase
- 下载量
- 昨天:2
- 上周:2
- 上个月:11
nativescript-in-app-purchase
NativeScript 插件,用于处理 Android 和 iOS 上的应用内购买和订阅。
(可选) 前提条件 / 要求
参考移动生态系统提供商了解如何
测试应用内购买。
对于 Apple,请访问 developer.apple.com
对于 Android,请访问 Google Play Store,前往 developer.android.com
安装
安装插件
tns plugin add nativescript-in-app-purchase
使用方法
使用此 TypeScript 定义类型,并添加 IntelliSense 支持。
/// <reference path="./node_modules/nativescript-in-app-purchase/index.d.ts" />
初始化
首先需要创建一个 InAppPurchaseManager
实例。
import { OnInit } from '@angular/core'
import { InAppPurchaseManager, InAppPurchaseResultCode, InAppPurchaseStateUpdateListener, InAppPurchaseTransactionState, InAppPurchaseType } from 'nativescript-in-app-purchase'
export class Test implements OnInit {
private inAppPurchaseManager: InAppPurchaseManager
constructor() { }
ngOnInit(): void {
const purchaseStateUpdateListener: InAppPurchaseStateUpdateListener = {
onUpdate: (purchaseTransactionState: InAppPurchaseTransactionState): void => {
if (purchaseTransactionState.resultCode === InAppPurchaseResultCode.Purchased) {
// Item has been purchased, sync local items list ...
}
},
onUpdateHistory: (purchaseTransactionState: InAppPurchaseTransactionState): void => {
if (purchaseTransactionState.resultCode === InAppPurchaseResultCode.Restored) {
// Item has been restored, sync local items list ...
}
}
}
InAppPurchaseManager.bootStrapInstance(purchaseStateUpdateListener).then(inAppPurchaseManager => {
this.inAppPurchaseManager = inAppPurchaseManager
})
}
}
产品列表
获取应用内产品列表。
要获取应用内产品列表,您必须查询已知数量的产品 ID。
// additional imports required
import { InAppPurchaseType, InAppListProductsResult, InAppProduct } from 'nativescript-in-app-purchase'
// query products
queryProducts() {
const myProductIds = ['product_1', 'product_2']
// For subscriptions change to `InAppPurchaseType.Subscription`
const myProductType = InAppPurchaseType.InAppPurchase
this.inAppPurchaseManager.list(myProductIds, myProductType)
.then((result: InAppListProductsResult) => {
const products: InAppProduct[] = result.products
for (const product of products) {
// get the products ...
console.log(product.title, product)
}
})
}
购买产品
购买产品时,结果 InAppOrderResult
仅与订单交易本身相关。
产品的购买状态将在 InAppPurchaseStateUpdateListener#onUpdate
方法中调用。
在这里您需要 确认购买 以完成整个购买交易。
App Store 和 Google Play Store 将自动退款 未确认的订单。
购买产品
// additional imports required
import { InAppOrderResult } from 'nativescript-in-app-purchase'
// by product
buy() {
const myProducts: InAppProduct[] = []//...
const productToBuy: InAppProduct = myProducts[0]
this.inAppPurchaseManager.order(productToBuy)
.then((result: InAppOrderResult) => {
if (result.success) {
// order has been processed
// ... expecting confirmation ...
// handle confirmation in `InAppPurchaseStateUpdateListener.onUpdate(...)`
}
})
}
确认产品
// additional imports required
import { InAppOrderConfirmResult } from 'nativescript-in-app-purchase'
ngOnInit(): void {
const purchaseStateUpdateListener: InAppPurchaseStateUpdateListener = {
onUpdate: (purchaseTransactionState: InAppPurchaseTransactionState): void => {
if (purchaseTransactionState.resultCode === InAppPurchaseResultCode.Purchased) {
// Item has been purchased, sync local items list ...
this.confirmOrder(purchaseTransactionState)
}
},
onUpdateHistory: (purchaseTransactionState: InAppPurchaseTransactionState): void => {
if (purchaseTransactionState.resultCode === InAppPurchaseResultCode.Restored) {
// Item has been restored, sync local items list ...
}
}
}
// ...
}
confirmOrder(purchaseTransactionState: InAppPurchaseTransactionState) {
const isConsumable = (productId: string): boolean => {
/* determine if is consumable and can be purchased more then once */
return false }
// only purchased products can be confirmed
if (purchaseTransactionState.resultCode === InAppPurchaseResultCode.Purchased) {
const consumable: boolean = isConsumable(purchaseTransactionState.productIdentifier)
this.inAppPurchaseManager.orderConfirm(purchaseTransactionState, consumable)
.then((result: InAppOrderConfirmResult) => {
if (result.success) {
// order confirmation has been processed
}
})
}
}
恢复购买
恢复购买将获取用户已购买的所有项目。
恢复产品的购买状态将在 InAppPurchaseStateUpdateListener#onUpdateHistory
方法中调用。
// additional imports required
import { InAppOrderHistoryResult } from 'nativescript-in-app-purchase'
restoreProducts() {
this.inAppPurchaseManager.purchaseHistory()
.then((result: InAppOrderHistoryResult) => {
if (result.success) {
// purchase history requested
// handle it in `InAppPurchaseStateUpdateListener.onUpdateHistory(...)`
}
})
}
API
list(productIds: string[], productType?: InAppPurchaseType): Promise<InAppListProductsResult>
列出所有产品order(product: InAppProduct): Promise<InAppOrderResult>
订购产品orderConfirm(purchaseTransaction: InAppPurchaseTransactionState, consumable: boolean): Promise<InAppOrderConfirmResult>
确认购买产品使其成为最终状态purchaseHistory(): Promise<InAppOrderHistoryResult>
加载用户拥有的产品canMakePayment(): boolean
检查计费是否启用static bootStrapInstance(purchaseStateUpdateListener?: InAppPurchaseStateUpdateListener): Promise<InAppPurchaseManager>
创建一个新的应用内购买管理器实例shutdown()
关闭到底层操作系统计费 API 的连接
DEMO 应用
包含一个 demo angular 应用项目。
查看此存储库并阅读 DEMO 读取说明
许可证
Apache 许可证版本 2.0,2020 年 1 月