问题标签 [skpaymenttransaction]

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 投票
2 回答
1286 浏览

ios - 如果用户在 InApp 购买的基于时间的订阅中更改设备当前日期怎么办?

我已经在我的 iOS 应用程序中实现了可消耗的 InApp 购买。用户必须付费才能查看内容,并且内容将在 24 小时内过期。

一旦用户付款,我将向我的服务器发送一个current date& 。现在,当我为特定登录用户获取内容列表时expiration date,我的服务器将返回。purchase date例如,如果用户Patrick登录到应用程序,他将能够看到内容列表。在该 Web 服务中,我还将获取该用户的到期日期,并根据该时间显示到期时间。如果过期时间已过,它将在每个内容列表单元格中显示购买按钮。

我的应用程序最关心的是用户从设备更改他的当前日期。如果用户定期更改他/她的当前日期并且从不让他/她的设备有机会访问该内容,那么他​​/她expiration date将永远可以访问该内容。

克服这种情况的最佳解决方案是什么?这就是我被卡住的地方。

0 投票
1 回答
420 浏览

ios - 什么触发了 iTunes 登录提醒

我想在我们的应用程序中实现一个新的商店功能,其中将有多种非消耗品可供购买。我继续按照我想要的方式设置了所有内容,并且它确实有效。不幸的是,现在每次应用程序从后台启动或变为活动状态时,都会显示一条警报,要求登录 iTunes。

如果您下载应用程序,则会弹出相同的警报。它没有说明这是一个沙盒环境。我试图找到可能触发此警报的代码行 - 我将这个新商店功能的代码注释为一个裸露的图形骨架,但更改仍然存在。我试图从 iTunes 中注销和登录,重新启动我的 iPod - 没有任何帮助。如果我从 AppStore 重新安装我们当前的应用程序版本,警报就会消失。

所以我的问题是:究竟是什么触发了这个警报?有没有办法调试这个?提前谢谢了。

0 投票
1 回答
146 浏览

objective-c - 带有托管内容的 Apple 应用内购买 - 不下载文件

我创建了一个简单的应用内购买产品,其中包含一个 mp3 文件作为内容。我在itunes connect中设置好,上传了pkg文件,一切顺利——该产品在我的应用程序中被识别,用户可以购买,确认如期而至,但是,有一个小问题:当交易状态更改为“购买”,我调用内容下载方法,开始下载 mp3 文件,但是,更新方法永远不会被调用 (- (void)paymentQueue:(SKPaymentQueue *)queue updatedDownloads:(NSArray *)downloads),而是交易被删除。

我究竟做错了什么?我应该从下面哪里调用开始下载方法?

0 投票
0 回答
226 浏览

ios - 应用内购买 - 恢复购买不起作用?

在我的应用程序中,用户可以购买 PRO 会员资格来解锁东西。

这是用户购买 PRO 会员资格的视图控制器代码:

不知何故,恢复购买似乎不起作用..我正在使用沙盒用户进行测试。有人有什么建议吗?购买物品一切正常,但是当我尝试使用购买该物品的同一用户恢复购买时,它不起作用。我的代码有什么问题,或者你会做些什么不同的事情?

0 投票
1 回答
740 浏览

ios8 - 检查 Auto-renewable InApp Purchase iOS

我正在为 iOS 实施 Auto-renewable InApp Purchase。第一个月工作正常。但我无法知道用户的订阅是否自动续订意味着当前 InApp 购买的状态是什么。

在 StackOverflow 上研究了这么多答案后,我明白我必须提供恢复按钮来恢复事务。我也实施了它,它提供了我迄今为止的所有交易。所以,我无法获得我的最后一笔交易。因此,请帮助了解上次自动更新交易的状态,以便我能够更新服务器上的状态。

以下是我用来恢复交易的代码:

并按如下方式实施其代表:

0 投票
1 回答
4642 浏览

ios - iOS沙盒/测试帐户在应用退出后不断要求登录

我们正在尝试使用 StoreKit 实现简单的应用内购买(不确定是否与它有关),到目前为止一切都很顺利,但是我们面临一个特定问题:当我们退出应用程序时,iOS 会永久询问我们登录:


在此处输入图像描述


这仅在使用沙盒或 TestFlight 帐户登录时才会发生,但这非常烦人。这背后有什么原因还是我们不应该担心?我读过很多人都面临着类似的问题,并且一旦应用程序投入生产,它就会解决,但这似乎是一种处理它的 hacky/不可预测的方式。

如果您需要,我愿意提供更多信息。在这一点上,我只是不知道为什么会发生这种情况(我已经将它与很多事情联系起来,但没有一个真的是正确的......例如收据验证请求,支付队列中未完成的交易等。 )。

0 投票
1 回答
283 浏览

ios - 使用 SKPaymentTransactionObserver 打开视图后,应用程序不断询问 Apple ID

所以我知道问题出在带有 IAP 的 ViewController 上,但不确定如何解决。

我添加SKPaymentQueue.defaultQueue().addTransactionObserver(self)viewDidLoad有班级的代表;SKProductsRequestDelegate, SKPaymentTransactionObserver.

我使用这些方法来执行购买交易、恢复任何购买并进行非消耗性购买所需的任何更改。

但无论用户做什么,加载IAPViewController应用程序后都会不断提示用户登录。它主要是当用户退出应用程序然后重新打开它时。

我尝试SKPaymentQueue.defaultQueue().removeTransactionObserver(self)在关闭视图时添加,但这似乎不起作用。

有没有人有什么建议 ??由于这个错误,我不得不将我的应用程序从审查中撤出:(

这是完整的代码;

0 投票
2 回答
4558 浏览

ios - iOS 的 IAP 收据验证

我正在开发一个使用 Apple IAP 和 StoreKit 框架来购买订阅的客户端/服务器应用程序。

我们希望客户(iPhone 或 iPad)使用 StoreKit 框架通过他们的 iTunes 帐户向苹果进行初始订阅购买,然后将收据传递给我们的服务器,服务器将对其进行验证,然后更新用户帐户状态。我们还希望服务器负责管理订阅状态(检查自动续订、取消等)。这一切都使用 iOS 7 风格的 appleReceipts,而不是目前已弃用的 iOS 6 风格的交易收据。

Apple 的文档说要发布到以下 URL 以验证沙箱中的收据以及收据和密码

https://sandbox.itunes.apple.com/verifyReceipt

到目前为止..一切正常。

让我感到困惑的地方在于响应。苹果的文档说响应应该有多达 4 个字段。如果您正在验证 iOS 7 风格的应用收据,那么您应该只看到前 2 个。如果它是 iOS 6 风格的订阅交易收据,那么您应该看到所有 4 个。

1) 状态(0 表示有效,否则有一些错误代码)

2) 收据(已发送收据的 JSON 表示形式)

3) latest_receipt(仅针对自动续订订阅的 iOS 6 样式交易收据返回。最近续订的 base-64 编码交易收据。)

4)latest_receipt_info(同上JSON格式)

问题 1: 即使我正在验证 iOS 7 风格的应用收据,我也看到了全部 4 个。文档说这不应该发生。

https://developer.apple.com/library/ios/releasenotes/General/ValidateAppStoreReceipt/Chapters/ValidateRemotely.html#//apple_ref/doc/uid/TP40010573-CH104-SW1

问题 2: 我们希望服务器通过使用客户端在初始购买后传递的原始应用收据轮询此 API 来处理维护用户订阅状态。该latest_receipt_info字段似乎包含一个不断更新的交易列表,而该receipt字段是原始的副本,没有更新的交易信息。

我的问题: 似乎服务器可以获取有关更新事务的信息的唯一方法是查看latest_receipt_infoorlatest_receipt字段,但根据文档,这些字段不应该出现在响应中。

这是 Apple 文档中的错误吗?或者,获取最新交易集的唯一方法是让客户端在收到通知时发送更新的 AppReceipts SKPayementTransactionObserver

编辑——根据下面的评论添加所采取的步骤和一些代码。

1) 使用 SKPaymentQueue 购买 autoRenewSubscription 产品:

2) 付款完成后,我通过我的 SKPaymentTransactionObserver 收到回电,并通过以下 URL 发送文件:

到我的远程服务器。

3) 我正在使用以下 python 代码来验证收据

响应包含字典。字典有以下字段

文档说前两个字段是

“仅针对自动更新订阅的 iOS 6 样式交易收据返回。”

  1. 为什么他们会出现在这里,因为我正在验证 iOS 7 风格的应用收据?
  2. 如果这些字段不应该存在,我如何获得最新的交易信息?
0 投票
2 回答
894 浏览

ios - 具有自动续订订阅的 iOS IAP,在同一系列中具有相同持续时间的多个产品

我目前正在开发一个 iOS 应用程序,该应用程序将允许用户购买自动续订订阅以访问按月收费的服务。我希望能够提供基本和高级服务,并允许用户从其中一项升级或降级。

我已经设置了测试用户和一些测试产品,我发现如果您先选择基本订阅,然后再选择购买高级订阅,则测试用户同时为这两种服务付费。

有谁知道当我们注意到他们升级或降级他们的服务时,是否可以以编程方式取消用户当前的订阅,所以他们只被收取一次费用?

我已经看到使用此链接 https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/manageSubscriptions 允许用户手动管理他们的订阅,但我想处理将他们迁移到他们的新计划自动地。

0 投票
1 回答
405 浏览

ios - Swift In-App-Purchase:不断提示登录;错误地处理 .finishTransaction?

我包含了一些非消耗性 IAP,但在加载我的应用程序时遇到了问题,因为它似乎不断提示我登录到我设置的测试帐户用户。

在查看了类似的问题后,我相信这是因为我最初未能在每个 .case 中添加以下行:

正如您从我下面的代码中看到的那样,它被添加到每个 .case 中。为了重新测试,我创建了一个额外的测试帐户,但我现在得到了完全相同的结果(在每个 viewDidLoad 上,我都被提示登录 2 个测试帐户......)。

这让我觉得 SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction) 没有按预期工作?

任何帮助,将不胜感激。

其次是

我遇到这个问题是因为 finishTransaction 没有按预期工作,还是原来的交易“卡住”了?

编辑: 这里是我调用 SKPaymentQueue.defaultQueue().addPayment(payment);