首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StoreKit/ in购买中初始购买与免费“再购买”的区别

StoreKit/ in购买中初始购买与免费“再购买”的区别
EN

Stack Overflow用户
提问于 2011-04-11 15:29:37
回答 3查看 3.3K关注 0票数 4

来自StoreKit指南:

如果用户试图购买他们已经购买的非消耗品或可再生订阅,您的应用程序将收到该项目的常规事务,而不是恢复事务。但是,该产品不会再次向用户收费。您的应用程序应该以与原始事务相同的方式对待这些事务。

在我正在开发的应用程序中,这是一个很大的问题。我们已经从一家出版商那里获得了大量内容的许可,通过应用程序内购买进行销售。它们要求每次我们出售这部分内容(即用户付费给我们)时,我们的服务器都会在他们的服务器上调用API来报告事务。这是为了会计的目的,并最终用于确定多少我们支付在月底,根据我们与他们的协议。

我在SO和其他地方读到了一些关于频繁调用restoreCompletedTransactions的建议,以及在设备上保持对用户已经购买的内容的本地理解,这样他们就不能再购买它了。在我看来,这是应该能够在服务器端实现的东西。然而,正如StoreKit指南所承诺的那样,我们从苹果服务器获得的收入与购买和再购买完全相同。

如果在这种情况下,StoreKit的支付回调不能被信任为有效的会计机制(“您得到了报酬”与“您没有得到报酬”),那么还有其他关于交易流量的实时见解吗?我不认为与我们合作的出版商会高兴,如果我们告诉他们,我们必须等待45天后,月底,以获得真正的支付美元金额的iTunes连接。

EN

回答 3

Stack Overflow用户

发布于 2013-06-08 10:02:25

我最近也研究过同样的问题。在我的例子中,我希望使用Mobile App Tracking实现精确的收入跟踪,以跟踪来自不同客户获取活动的收入。

幸运的是,有办法做到这一点。应该注意的是,SKPaymentTransactionStatePurchasedSKPaymentTransactionStateRestored仅仅取决于激发动作,例如您是启动了恢复还是(再)购买,所以这是行不通的。

取而代之的是检查SKPaymentTransaction.originalTransaction,这将是用于恢复和再购买的!= nil。遗憾的是,后者是未定义行为(docs)。不过,我认为空头支票是公平的。

另一个选项是用SKPaymentTransactionStatePurchased验证事务--事务的接收,并检查返回的、经过验证的收据中的original_transaction_id属性是否与transaction_id匹配。

票数 6
EN

Stack Overflow用户

发布于 2011-04-21 11:21:06

坏消息是:在目前的iOS版本(4.3.x)中,没有办法区分非消费品的购买和再购买。

为了缓解这种情况,我建议两件事:

第一

购买成功后,将所购买产品的product identifier存储在设备上的NSUserDefaults中。然后,您可以对用户隐藏已经购买的产品,从而处理重新购买的情况。

当用户同步设备时,NSUserDefaults由iTunes备份。因此,当用户获得新设备时,所存储的购买信息不会丢失。

第二

将收据数据与设备ID一起存储在服务器上。分析收据的产品标识符和设备ID。

如果您收到另一份具有相同产品标识符和设备ID组合的收据,则假设重新购买。至少,这将使你能够涵盖大部分的再购买案件。

假设一个普通的iPhone用户每1-2年更换一次他的设备,你至少会覆盖大部分的再购买案例,也许苹果会在未来修复这个问题。

票数 4
EN

Stack Overflow用户

发布于 2011-07-04 07:52:56

我有一个解决办法

  1. 将产品配置为可消费产品。这将解决问题-(它们要求我们每次出售该内容(即用户付费))。
  2. 下一步您需要在产品购买选项中实现一个逻辑。这是因为一旦用户购买了一个产品,购买选项就需要删除,否则用户可能会碰巧去购买而丢失的是同一设备中同一产品的现金。您可以为此使用NSUserdefaults .

谢谢,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5623652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档