问题标签 [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.
swift - 使用 SKPaymentQueue 处理应用内购买后访问 SKDownload 的内容
在成功进行应用内购买后,我一直在尝试访问下载的SKDownload
zip 文件:
这是处理下载SKDownload
文件的函数:
当我检查download.contentURL
它时:
但是在尝试FileManager
使用上面的这行代码访问文件时:
我不断收到以下错误消息,指出该文件不存在:
我尝试
/
在最后添加以将 zip 文件视为目录和许多其他内容均无济于事。我什至尝试访问包含该文件的目录(直到 zip 文件):
错误说找不到“缓存”目录。
- 我还尝试
"Contents"
像随机人找到的示例代码之一一样添加到路径中。
我已经连续敲了一天多的头,但找不到任何关于此事的文件。任何帮助将不胜感激,谢谢!
ios - 在 iOS 上收听应用内购买窗口何时打开
我正在开始应用内购买。但我认为购买窗口有时会打开较晚。有没有方法,委托方法来监听这个屏幕打开的情况?
我研究了这个,但我无法得出结论,有人知道吗?
ios - 将非续订创建的交易与已完成的交易相关联
我有一个应用程序,每个用户有几个实体。用户可以为每个实体做 IAP。当我将付款添加到 SKPaymentQueue 时,我知道购买是针对哪个实体完成的。
如何从updatedTransactions
回调中获取此信息?
我尝试将购买交易中的交易标识符与购买交易中的交易标识符进行匹配,但该值仅存在于购买交易中。
我尝试使用应用程序用户名:
但是文档提到它不可靠,仅用于欺诈检测。
它在大多数情况下都有效,但 Apple 不保证在回调事务中返回它。
ios - iOS 中的 Storekit 为 response.products 提供 0
我一直在尝试让一个简单的消耗品 iOS 应用内购买工作。不幸的是,response.products 一直返回为空 0。我拥有开发人员会员资格,我创建了一个带有产品标识符“Getit”的 itunesconnect 应用内购买,并在 testflight 上测试了该应用程序。我有一个有效的付费应用程序协议,该协议已被 Apple 批准。该应用程序本身尚未提交审核,但我想 Apple 允许我们在首次提交我们的应用程序或协议之前测试该应用程序。
控制器.h
控制器.m
ios - 调用完成事务后,SKPaymentTransaction 卡在队列中
我们有一个应用程序被苹果拒绝了几次,因为它无法完成自动更新 IAP 购买,并且如果尝试也无法恢复。我们终于通过添加一些额外的日志记录来缩小错误范围,并Payment added for transaction already in the SKPaymentQueue: ...
在日志中注意到。
在尝试重现时,我们启动了一部我们有一段时间没有使用过的手机,并注意到它在队列中有27笔相同购买的交易,都在该SKPaymentTransactionState.purchased
州。我们SKPaymentTransactionObserver
收到了这些交易的通知,我们确实会打电话finishTransaction
给他们。我假设有这么多交易,因为我们有一个每月订阅,在沙盒中每 5 分钟自动更新一次,而且我们在另一部手机上使用同一个 App Store 帐户购买了同一个 IAP 的许多额外购买 - 所以现在正在通知此手机所有更新。
奇怪的是,即使我们调用finishTransaction
了这些交易,它们似乎仍未完成,这就是为什么我们在控制台中看到“为已在队列中的交易添加付款”消息的原因。
所以为了调试这个,我实现了paymentQueue(_:removedTransactions:)
of SKPaymentTransactionObserver
,并注意到即使我们调用finishTransaction
了这么多事务,我们也只会看到一个被删除 - 似乎如果我们在应用程序中呆了很长时间,只是什么都不做更多会通过超过 10 分钟的时间。
在我的沮丧中,我继续做了这样的事情
这当然是超级粗暴的,但您不知道对于 n 笔交易中的每笔交易,它们都被一一删除 - 一次只删除一个。
所以我的第一个想法是,好吧,在现实世界的场景中,这可能不太可能,因为你一遍又一遍地购买,更新如此之快等等,所以也许 SDK 不希望一次完成这么多交易?我尝试了一些不那么粗糙的东西,并把我们paymentQueue(_:updatedTransactions:)
的东西改成了这样
对于这样的事情
相同的代码只是在同一个运行循环期间处理的每个事务都没有。这里发生的事情是paymentQueue(_:removedTransactions:)
连续两次调用 1 个已删除的事务,然后在此测试中批量运行剩余的 5 个左右。所以这个“修复”/解决了这个问题 - 但为什么呢?
那么这里发生了什么?这是完成交易所需时间的沙盒怪癖吗?难道我们不希望在运行循环的同一运行中完成它们吗?我只是完全错过了一些核心概念吗?
环境方面,该应用程序是在 Xcode 11.3.1 中构建的,问题在 iOS 13.6.1 和其他 iOS 13 版本上重现性最强,似乎发生在 iOS 12.0 上,但在 iOS 12.0 上却很少发生,在 iOS 14 测试版上还没有看到。iOS SDK 目标是 11.0。我们只有一个 IAP,即自动续订的每月订阅。
虽然这项工作似乎解决了这个问题,但我们一直处于与 Apple 的拒绝循环中,并且希望对正在发生的事情有更扎实的理解或推理,然后再向他们抛出更多构建,希望有什么能坚持下去。
ios - 如何检测 SKPaymentTransaction 何时中断?
我正在按照测试中断的应用内购买的步骤进行操作,如 Apple 文档中标题Test an Interrupted Purchase下的概述。我的问题从第 6 步开始,其中指出:
“在您的代码中,观察支付失败。支付队列收到状态为 SKPaymentTransactionState.failed 的更新交易。”
这对我有用,但是失败状态会触发我的 UI 显示错误警报,指出付款失败,即使它只是准备显示条款和条件页面。
有没有办法检测事务何时实际失败,而不是何时暂停以让其他操作发生?我本来希望这里的 SKPaymentTransactionState 状态deferred
不是failed
,因为这样可以更容易地进行适当处理。
ios - 我是否必须验证每个 SKPaymentTransaction 订阅的收据?
我正在我的 iOS 应用程序中实现自动更新订阅。我的事务处理看起来像这样的伪代码:
如果在我的应用程序未激活时订阅多次续订,我可以在此处获得每个产品的多个交易。有时,该应用程序在重新安装时也会同时获得大量旧交易。我需要验证每笔交易吗?还是只做一个更好productIdentifier
?或者甚至每次调用一次paymentQueue:updatedTransactions:
?如果磁盘上的收据数据始终相同,那么我每次都向我的服务器发送相同的二进制数据,有时可能很多。
文档链接在答案中表示赞赏。
ios - iOS SKPaymentQueue 交易观察者在应用启动时返回所有购买的交易
我正在尝试实现自动更新订阅。我在应用程序委托中添加了一个SKPaymentQueue 事务 观察器,并在应用程序终止后立即将其删除。一切正常,但问题是,在下一次应用启动时,当添加事务观察器时,它会触发updatedTransactions函数,并且对于所有先前购买的事务,它会直接进入已购买状态。用户购买订阅后,我在SKPaymentTransactionStatePurchased状态下调用[[SKPaymentQueue defaultQueue] finishTransaction:transaction] 。但是,这不起作用。我能做些什么来防止这种情况发生?提前致谢。
ios - 当用户没有付款方式时不调用事务观察器
我的 iap 问题从用户没有付款方式开始。iaps 在沙盒(也被中断的模拟)和现实世界中工作。但是在真正的应用程序中(从 appstore 下载 - 我在 ios 12 - iphone 6 中测试过),如果我没有支付方式应用程序警告我添加一个。然后 appstore 应用程序打开(我的应用程序进入后台),我输入所有要购买的信用卡功能。一切顺利,appstore 提示我您购买了产品。但是在返回我的应用程序(将其置于前台)之后,什么也没有发生。我无法获得有关交易的任何信息。即使我添加了 appdidbecomeactive 观察者来再次捕获未完成的交易。再次没有...然后我在应用程序启动中添加了 unfinishedTransaction 函数。如果我终止应用程序并重新开始。它捕获未完成的交易并执行我的代码。但是没有付款方式的用户认为该应用程序不起作用,他们要求退款。所以他们是对的,我正在偿还或更改他们的数据库。我该如何处理这个问题?我什至无法在沙盒中测试它。每次我给苹果定价测试。请帮我。
swift - SKPaymentTransaction.original.transactionIdentifier 字段何时更改?
当我在我的应用程序中使用沙盒开始订阅SKPaymentTransaction.transactionIdentifier
时,SKPaymentTransaction.original.transactionIdentifier
字段总是返回相同的值。当我在取消订阅后再次尝试订阅时,它返回相同的值。该字段是否总是返回相同的值?续订、升级或订阅降级是否会发生变化?
你能告诉我这个字段是什么时候改变的吗?
参考:https ://developer.apple.com/documentation/storekit/skpaymenttransaction/1411284-original