问题标签 [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.
ios - 错误:类型“StoreViewController”不符合协议“SKPaymentTransactionObserver”
我不断收到一条错误消息(类型StoreViewController
不符合协议SKPaymentTransactionObserver
)我已经多次查看代码。也许我需要一套新的眼光,或者编码实际上有问题——我觉得更有可能。
我不得不在代码末尾添加一些右大括号,以将错误数量减少到一个。但在那之后,如果我尝试,它会再次上升。因此,它可能不是花括号问题。
请帮助我解决问题,或者找到我的错误。(Xcode 9.3)
swift - `startDownloads` 不适用于恢复的事务。`updatedDownloads` 未调用
我在恢复托管的应用内购买内容时遇到问题。有时它起作用,有时它根本不起作用。我的用户也报告了这个问题。
我很难尝试复制它,但是当它发生时我设法遇到了一种情况。
现在,每当我从 Xcode 在我的 Mac 上运行该应用程序时,我的商店代表都会在启动后不久收到队列中两个待处理的恢复事务的通知。并且正在调用以下函数:
我看到了日志消息[STORE] starting download
,所以我知道这段代码被执行了。然后什么也没有发生。updatedDownloads
不叫。我已经验证了finishTransaction
它也没有被调用,所以这不可能中断正常执行。
我基本上不知道是什么导致了这个问题。我知道这种情况有两个待处理的恢复事务,但我看不出它为什么会导致这样的失败。它对应于我在一些用户的日志中看到的内容。因为他们SKPaymentQueue.default().start(transaction.downloads)
被调用,然后什么也没发生。
如果你能帮助我调试这个问题,我将不胜感激,至少提出一些你认为可能导致这种奇怪行为的想法。
ios - iOS 自动更新订阅:在沙盒上测试升级不起作用
我正在我的 iOS 应用程序中处理可自动更新的订阅 IAP。我计划在同一个订阅组中有 3 个不同的层级。在我的测试中,我已经能够成功购买订阅,看到它在沙盒上更新了几次,然后在 5 或 6 次尝试后停止。这部分工作正常。但我想尝试从应用程序从一层升级到更高层。这一次,当我尝试将带有新(升级的)productID 的 SKPayment 添加到支付队列时,我首先收到一个警报“你想修改你的订阅...”,然后在我点击继续后,我得到一个确认消息,但我也收到SKPaymentQueue: updatedTransactions
状态为失败的回调。错误说:
“交易失败错误 = 错误域 = SKErrorDomain 代码 = 0 “无法连接到 iTunes Store” UserInfo={NSLocalizedDescription=无法连接到 iTunes Store}
任何想法为什么会发生这种情况,甚至是否可以从沙盒测试订阅组更新?如果没有,那么您将如何进行测试?
ios - SKPaymentTransactionObserver 的 updatedTransactions 委托方法中的事务状态何时设置为恢复?
我一直在测试应用内购买的代码,但在调用 updatedTransactions SKPaymentTransactionObserver 委托方法时,我无法将交易状态设置为恢复。该方法何时以该事务状态调用?
ios - iOS在使用后端服务器时处理本地SKPaymentTransaction
我正在创建一个带有自动续订订阅的 iOS 应用程序。我一直在阅读很多教程和文档,但我对如何处理某些场景有点困惑。
这是我的应用程序的工作方式:
- 用户安装应用
- 用户在注册流程中创建帐户
- 要求用户选择计划并在注册流程中付款
- 付款收据上传到我的服务器,我在我的数据库中激活他们的帐户。
- 我的服务器会定期轮询
/verifyReceipt
端点以更新用户的帐户或停用它,具体取决于来自苹果的最新信息。(或使用 Apple 的新状态更新通知,两者的目的都是为了让我在我的服务器上获取最新的订阅信息)
订阅续订一个月后,我知道交易将出现在SKPaymentQueue
用户的设备上。因此,许多教程/文档建议让您AppDelegate
实现SKPaymentTransactionObserver
协议,以便您可以随时处理事务。
但是,我没有使用AppDelegate
. 我在注册时使用了视图控制器,用户选择他们的计划来实施SKPaymentTransactionObserver
。
我的理由是,既然我在后端获取信息,我是否需要关心每个月在订阅续订时将出现在客户端队列中的交易?我不能忽略这些交易,还是需要调用queue.finishTransaction
它们?
我还阅读了一些有关在用户删除应用程序并重新安装或获得新手机时恢复交易的内容。再说一次,我需要担心这个吗?因为我仍然应该知道后端的订阅,并且用户在获得新手机时所要做的就是登录他们的帐户以获得我的服务,它会检查后端以查看他们的订阅是否处于活动状态。
我想我更大的问题是:当您有一个后端来处理 IAP 自动续订订阅时,您是否可以忽略客户端上发生的一些带有支付队列的事情,因为该功能是为没有后端的应用程序构建的。
ios - 如何知道 SKProductDiscount 何时有效
我们想为我们的应用程序提供一个介绍性价格。订阅的第一年应该可以享受 50% 的折扣。所以我们在 App Store Connect 中添加了一个介绍价格,但也想限制它的时间。所以我们想启用它,就像我们说从现在开始一周后的一天。我们在 App Store Connect 上对其进行了类似配置,并且可以正常工作...
现在我的 SKProduct 已经有了一个 introductoryPrice 集。所以已经有 SKProductDiscount 集(即使它只在未来可用)。但是当我点击它时,它并没有显示出来。
好的......所以我做了另一个测试产品。此外,设置 introductoryPrice 但现在开始。它还将设置 SKProductDiscount。和预期的一样。但是当我点击它时,付款确认现在会正确地告诉我发生了什么......
所以我现在的问题是:在我的付款对话框中,我想预先告诉用户“今天您将在第一年获得 50% 的折扣”。但是有什么方法可以简单地通过查看 SKProduct 来判断吗?还是我必须手动计时?只是祈祷苹果手表的时间和我的时间一样?
objective-c - 应用内购买订阅取消问题
我在 iOS 应用中实现了应用内购买(让我们订阅一个月),它运行良好。我想问一下用户是否从 iTunes 取消订阅(在结束日期之前),然后 iTunes 是否向设备发送内容?所以我们可以根据订阅在本地更新我们的应用程序。我知道 iTunes 会向服务器发送通知,但我主要关心的是设备,所以我们可以在没有服务器 api 调用的情况下更新我们的应用程序。
ios - 如何以首次折扣实施自动续订订阅
我想实现自动更新订阅,为用户提供不同的折扣优惠。我有一个产品 ID,但我想对同一个产品 ID 应用不同的折扣。像这样的场景,如果用户在安装应用程序的 1 周内购买,则希望在首次付款时提供 50% 的折扣。如果用户在 1 周后和第 2 周完成之前购买,则希望在首次付款时提供 25% 的折扣。其他用户以产品原价购买..
为了实现这个功能,我在互联网上搜索并找到了一些 SKPaymentDiscount。但我不知道我是否可以使用 SKPaymentDiscount 来实现。
如果有人实施了相同的事情或对 SKPaymentDiscount 有经验,请与我分享。
如果有人有其他建议,那么我也会尝试。
在此先感谢并欢迎提出建议。
ios - 自 iOS 13.4 起,购买对话框不再显示
从iOS 13.4开始,当行...
...被执行。
在 iOS 13.4之前,用户确认购买的地方会弹出一个对话框,但现在什么也没有。有谁知道可能导致此问题的原因?
笔记:
- 这是一款基于 libSDL 和 gles 3.0 的全屏游戏。
- 虽然 99% 的代码库是 C++,但应用内购买是用 Objective C++ 进行的
- 它在 iOS 13.4 之前工作
ios - SKPaymentTransaction.transactionState 总是 .restored
我正在测试我的应用程序自动续订订阅,但SKPaymentTransaction.transactionState
从未更改为.purchased
并且始终为.restored
. 一切正常,但.restored
自从我第一次打电话以来,我什么也得不到SKPaymentQueue.default().restoreCompletedTransactions()
。我尝试从我的 iPhone 中删除该应用程序,重新登录到我的沙盒帐户,创建一个新的沙盒帐户,重新启动 Xcode,清理构建文件夹,......我做错了什么?请在下面找到我的代码: