应用内购买 (macOS)

    iTunes Connect 开发人员帮助: 协议、税务和银行概述

    代码示例

    通过下面的例子来了解如何在Electron中使用应用内购买功能。 您必须使用通过ITunes Connect创建的产品的唯一标识 (ID)来替换掉下面示例中的PRODUCT_IDS。( com.example.app.product1 的ID是 product1)。 请注意,您必须尽可能早的在你的应用中监听transactions-updated事件。

    1. const { inAppPurchase } = require('electron').remote
    2. const PRODUCT_IDS = ['id1', 'id2']
    3. // 尽早监听transactions事件.
    4. inAppPurchase.on('transactions-updated', (event, transactions) => {
    5. if (!Array.isArray(transactions)) {
    6. return
    7. }
    8. // 检查每一笔交易.
    9. transactions.forEach(function (transaction) {
    10. var payment = transaction.payment
    11. switch (transaction.transactionState) {
    12. case 'purchasing':
    13. console.log(`Purchasing ${payment.productIdentifier}...`)
    14. break
    15. case 'purchased':
    16. console.log(`${payment.productIdentifier} purchased.`)
    17. // 获取收据的url.
    18. let receiptURL = inAppPurchase.getReceiptURL()
    19. console.log(`Receipt URL: ${receiptURL}`)
    20. // @see https://developer.apple.com/library/content/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html
    21. // ...
    22. // 如果收据通过校验,说明产品已经被购买了
    23. // ...
    24. // 交易完成.
    25. inAppPurchase.finishTransactionByDate(transaction.transactionDate)
    26. break
    27. case 'failed':
    28. console.log(`Failed to purchase ${payment.productIdentifier}.`)
    29. // 交易完成.
    30. inAppPurchase.finishTransactionByDate(transaction.transactionDate)
    31. break
    32. case 'restored':
    33. console.log(`The purchase of ${payment.productIdentifier} has been restored.`)
    34. break
    35. case 'deferred':
    36. console.log(`The purchase of ${payment.productIdentifier} has been deferred.`)
    37. break
    38. default:
    39. break
    40. }
    41. })
    42. // 检查用户是否允许当前app启用应用内购买功能.
    43. if (!inAppPurchase.canMakePayments()) {
    44. console.log('The user is not allowed to make in-app purchase.')
    45. }
    46. // 检索并显示产品描述.
    47. inAppPurchase.getProducts(PRODUCT_IDS).then(products => {
    48. // 检查参数.
    49. if (!Array.isArray(products) || products.length <= 0) {
    50. console.log('Unable to retrieve the product informations.')
    51. return
    52. }
    53. // 显示每个产品的名称和价格.
    54. products.forEach(product => {
    55. console.log(`The price of ${product.localizedTitle} is ${product.formattedPrice}.`)
    56. })
    57. // 询问用户需要购买哪个产品.
    58. let selectedProduct = products[0]
    59. let selectedQuantity = 1
    60. // 购买选中的产品.
    61. inAppPurchase.purchaseProduct(selectedProduct.productIdentifier, selectedQuantity).then(isProductValid => {
    62. if (!isProductValid) {
    63. console.log('The product is not valid.')
    64. return
    65. }
    66. console.log('The payment has been added to the payment queue.')
    67. })