问题标签 [swiftystorekit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
587 浏览

ios - InApp 购买消耗品服务器验证设置

我正在将SwiftyStoreKitInApp Purchase Consumable 用于小费罐。一切都适用于测试,但根据这个答案和评论服务器端验证不是必需的,但建议这样做。答案说"consumables, un-consumables and subscriptions are susceptible to fraudulent attacks. Often though iap crackers or network spoofing. Validating the receipt can mitigate this problem"

1- 如果用户 A 向我发送提示,如果一切都通过 Apple,攻击者怎么可能拦截该提示并拿走钱?

2-我是否需要设置 Heroku 实例或使用其他东西进行服务器验证?我在上面找不到任何东西。我假设我需要在success case下面添加服务器端代码,if product.needsFinishTransaction { SwiftyStoreKit.finishTransaction(product.transaction) }但从那时起我不知道如何设置服务器。

这是代码:

应用委托:

提示JarVC。购买是在collectionView's didSelect item

0 投票
0 回答
948 浏览

ios - SwiftyStoreKit.purchaseProduct - 未调用 App Delegate 中的关闭

在我的Podfile我正在使用SwiftyStoreKit (0.15.0)

我的应用程序为 IAP 使用了一个小费罐,所以我只使用Consumable.

我今天早上向 App Store 提交了我的应用程序,但遭到拒绝,说他们在尝试购买时无法进行 IAP Consumable(小费)。

在我检查购买时作为沙盒测试人员进行测试时,我一直收到错误消息"Unknown error. Please contact support"::

经过进一步检查,即使我在 AppDelegate中有以下代码,closure也不会被调用。此代码必须在 AppDelegate 中运行一次

我的沙盒测试员电子邮件已确认,我以真实身份退出设备,以沙盒测试员身份登录设备,以沙盒测试员身份登录 iCloud。

没有在 AppDelegate 中输入关闭的原因可能是什么?

这是我用来Consumable购买的vc中的代码:

0 投票
1 回答
57 浏览

ios - 通过添加信用卡/贝宝测试 iOS 自动更新订阅功能

实际上,我已经在我的项目中使用应用内购买实现了自动更新订阅功能。

当我在订阅时尝试添加卡时,它会取消付款。如果卡已经添加,它工作正常。

但是应用商店显示订阅和付款已完成。

我使用了从 5 月 1 日起不再维护的 SwiftyStoreKit 库。

我已经通过从应用商店下载应用程序在生产模式下测试了所有内容。

有什么方法可以在开发时对其进行测试吗?在沙盒模式下,没有通过添加卡或贝宝进行测试的选项。

0 投票
1 回答
1030 浏览

ios - SwiftyStoreKit - 如何正确恢复自动更新订阅?

所以我在应用程序中有一个非常基本的自动更新订阅概念,它可以解锁 PRO 功能。我还有一个非消耗品购买,它是“一次性购买订阅”,它可以永远解锁 PRO 功能。

我无法理解的是,当我调用restorePurchases(使用SwiftyStoreKit)时,它会带来用户曾经进行的所有购买。这些可能包括多次购买很久以前过期的同一订阅。

我接下来要做的是verifyPurchase对每个恢复的购买调用一个方法,该方法检查曾经购买的每个订阅的到期日期以及是否过期 - 它通过清除钥匙串从用户手中夺走 PRO(因为它认为当前订阅已过期):

因此,我的应用程序中当前发生的情况是,即使用户有一个有效订阅,如果他或她尝试这样做restorePurchasesverifyPurchase最后一次购买验证的订阅可能会过期,从而导致应用程序的 PRO 版本被取消用户,即使在船上有有效订阅。

避免此错误并始终验证唯一正确订阅的最佳做法是什么?

0 投票
1 回答
1161 浏览

ios - SwiftyStoreKit.verifyReceipt 不断询问 Apple ID(应用内购买)

我一直在使用SwiftyStoreKit.verifyReceipt以确保用户仍然订阅自动更新会员资格。我在 运行此代码viewWillAppear,它运行良好,但问题是它每次都要求输入 Apple ID 和密码,是因为该应用程序仍在开发中/应用程序内购买尚未得到 Apple 验证还是我错误地使用 SwiftyStoreKit.verifyReceipt。

文档:https ://github.com/bizz84/SwiftyStoreKit

我在viewWillAppear中的代码:

0 投票
0 回答
82 浏览

ios - 验证收据时应用内购买失败

在我的应用程序中,我有 3 个消耗品应用内购买。我已经在沙盒环境中对它们进行了测试,它们按预期工作。我使用该SwiftyStoreKit框架进行应用内购买。

以下代码用于执行购买。

购买完成后,我会验证收据。

在沙盒中一切正常。但是,Apple 审查团队报告说他们收到了所附屏幕截图中显示的错误。 错误截图

0 投票
1 回答
147 浏览

ios - Swift 中的条件导入不起作用?

我想使用一个最低要求为 WatchOS 6.2 的模块 (SwiftyStoreKit),但我不想增加我的 WatchOS 目标,因为我不想失去对旧手表的支持。我的理解是 Swift 现在有条件导入,这将允许您仅在操作系统中导入模块允许导入但下面的代码不起作用?我仍然收到编译错误“正在为 watchOS 4.3 编译,但模块 'SwiftyStoreKit' 的最低部署目标是 watchOS 6.2:”,如果我删除“import SwiftyStoreKit”,则未检测到该模块。

0 投票
0 回答
23 浏览

swift - SwiftyStoreKit 示例作为带返回的函数

这个来自 SwiftyStoreKit 的示例代码可以工作,但我想将其转换为返回 priceString 的方法。

当我尝试这个时:

我收到错误“无法将'InAppRequest'类型的返回表达式转换为'String'类型的返回值知道如何返回priceString的值吗?

谢谢

0 投票
1 回答
307 浏览

swift - In App Purchase Non-Consumable - Performance - App Completeness iOS 14.2

我面临的问题如下:

“我们发现,在运行 iOS 14.2 的 Wi-Fi 的 iPhone 上查看时,您的应用内购买产品出现了一个或多个错误。”

“在您的服务器上验证收据时,您的服务器需要能够处理生产签名的应用程序从 Apple 的测试环境中获取其收据。推荐的方法是让您的生产服务器始终首先根据生产应用程序商店验证收据。如果验证失败并显示错误代码“生产中使用的沙盒收据”,您应该改为针对测试环境进行验证。

我已经实现了应用内购买(非消耗品),它在购买和恢复等方面工作得很好。Apple 以上述原因拒绝。

我在做什么:

  1. 使用 SwiftyStoreKit
  2. 点击购买按钮
  3. SwiftyStoreKit.retrieveProductsInfo
  4. SwiftyStoreKit.purchaseProduct
  5. 成功时(SwiftyStoreKit.finishTransaction)

恢复:

  1. 点击恢复
  2. SwiftyStoreKit.restorePurchases

请让我知道是否需要更多信息或代码等以及我做错了什么拒绝了该应用程序。

Apple 最近也回复了我以下消息:

“关于购买应用内购买,我们仍然无法购买完整版的应用。当我们点击购买按钮时,应用会继续无限加载。

我们无法就应用概念或功能提供反馈,但我们建议您根据 App Store 审查指南、iOS 开发者计划许可协议 (PLA) 和 iOS 人机界面指南评估您的建议。”

0 投票
0 回答
204 浏览

ios - SwiftyStoreKit:购买触发 AppDelegate 中的回调

我正在实施SwiftyStoreKit以帮助在 iOS 上进行应用内购买。我有一个设置为验证收据的服务器,所以我想要完成的是:

  1. 用户点击购买IAP产品
  2. 如果成功,则获取收据并将其发送到服务器进行验证
  3. 如果成功,IAP 产品交易设置为完成
  4. 更新用户界面。

用户点击purchase后,类似下面的函数运行:

SwiftyStoreKit 还提供了一个应该在应用程序首次启动时调用的方法。Apple 文档中也说明了这一点。对我来说,这个函数看起来像这样:

对于正常、不间断的购买,此设置似乎可以正常工作。我的问题是,在测试中断购买时,在调用 SwiftyStoreKit.purchaseProduct 之后,didFinishLaunchingWithOptions 中的 SwiftyStoreKit.completeTransactions 的回调被触发而不是购买回调。我预计这不是故意的,因为它使继续处理文件中触发购买的代码非常麻烦。