@courthoang/nativescript-in-app-purchase
by courthoang | v1.0.4
NativeScript 插件,用于处理 Android 和 iOS 上的应用内购买和订阅。
npm i --save @courthoang/nativescript-in-app-purchase

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 月

捐赠

使用比特币捐赠
3GFxvCK4nnTvHcLpVtFDQhdjANzRGBV6G6
Open in Wallet
在钱包中打开