【问题标题】:in-app purchase validation - validate purchase as per user应用内购买验证 - 根据用户验证购买
【发布时间】:2015-04-22 05:08:37
【问题描述】:

我已经在我的应用程序中成功实现了应用内购买。

我的查询是:

有一个苹果ID xyz@apple.com,通过它我可以在ipad 或设备上登录iTunes。 现在在我的应用程序中有几个用户。他们将通过应用内购买购买产品。我的产品是非消耗品。 现在,例如有两个用户 A 和 B(他们登录到我的应用程序,所以他们是应用程序用户)。

案例:用户A购买产品,使用苹果ID xyz@apple.com进行应用内购买并获得购买产品会员的用户权限(这里在成功完成付款后我调用网络服务进行用户数据库更新他/她购买了产品)并从我的应用程序中注销。现在用户 B 登录到我的应用程序并购买产品以及用户 A 购买的产品(这里注意苹果 id 是相同的 xyz@apple.com)。但是,当他尝试购买产品时,苹果说“你已经购买了这个。点击 OK 再次免费下载”,所以用户点击 OK,这个产品将根据用户再次恢复,并在我称之为 web 的方法成功后再次恢复更新用户数据库的服务。

所以问题是,在购买您已经购买的来自此 ID(即 xyz.apple.com)的产品时,我如何区分两个用户,现在用户应该不同,然后您必须使用另一个 Apple ID 登录(可能是 abc.apple.com)。

【问题讨论】:

  • 购买与 Apple ID 相关联,而不是与您系统上的帐户相关联,因此您必须允许用户恢复购买,即使他们使用的是不同的帐户
  • @Paulw11 感谢您的快速回复,实际上我必须这样做,否则将发生的情况是从一个 ID 购买付款,多个用户无需支付任何费用即可获得该会员资格。跨度>
  • 但从 Apple 的角度来看,只有一个用户,非消耗性购买必须是可恢复的。听起来您实际上想要购买消耗品 - 一些可以兑换成会员的“信用”
  • @Paulw11 不,实际上我想阻止不付费的用户无法获得付费用户的好处。
  • 您没有抓住重点——Apple 的应用内购买并不关心您的用户 ID。从 Apple 的角度来看,Apple ID 是已付款的人,他们有权恢复购买。听起来应用内购买无法满足您的需求。您最好让他们在另一个网站上购买会员资格并在您的应用中登录以享受福利

标签: ios objective-c iphone in-app-purchase


【解决方案1】:

最后我通过以下解决方案解决了应用购买问题:

1) 我获取交易 id 并根据用户使用数据库更新它,如果交易 id 发现重复,那么它将抛出错误并且不会使用户成为付费会员。

意味着当用户进行购买时,我得到它的 transaction_id 并将其更新到数据库中作为用户名:A 和 transaction_id:XYZ。 如果 B 用户要从相同的 iTunes id 购买,那么我将获得相同的 transaction_id,即 XYZ。所以在这里它不允许用户继续(即从网络服务不要让用户成为付费会员并给出错误)。以下是代码:

-(void)callinApp : (SKPaymentTransaction*) transaction
{
    if (transaction.originalTransaction.transactionIdentifier == nil)
    {
        // send transection.transactionIdentifire
        // means it's first time purchasing
        NSLog(@"Transection Id : %@",transaction.transactionIdentifier);
        UserId = A123;
        TransectionID = transaction.transactionIdentifier;
    }
    else
    {
        // send transaction.originaltransection.transectionidentifier
        // means already purchased one in past
        NSLog(@"Original Transection Id:%@",transaction.originalTransaction.transactionIdentifier);
        UserId = A123;
        TransectionID = transaction.originalTransaction.transactionIdentifier;
    }
   // call web service and pass TransectionID & UserId
}

2) 从另一个 iTunes id 进行交易时出现的错误是多次调用的方法 (updateTransaction) 我通过从 iTunes 连接中的沙盒测试器中删除该 apple(iTunes) id 解决了这个问题。

【讨论】:

    【解决方案2】:

    非消耗性产品由用户购买一次,不会随着使用而过期或减少。

    即使您正在寻找如何在login user idin app purchase id 之间匹配的流程。实际上我很久以前就做过in App Purchase,所以我不知道一旦in app purchase 成功,我不知道苹果发送了什么参数。可能有in-app purchase receipt 和其他一些参数。一旦从同一用户下载产品,只需要获取相同次数的唯一参数。

    因此,一旦in App purchase 成功,我将“应用内购买收据”视为唯一参数返回。一旦in App purchase 成功,您就可以在您的服务器上绑定in-app purchase receiptlogin user id。所以下次当 B 用户用相同的apple user id 下载相同的产品时,in App purchase 请求将返回相同的in-app purchase receipt 所以检查这个receipt id 是否与另一个login id 绑定,如果YES 然后取消下载并向用户显示“此帐户已与其他登录 ID 关联”的消息

    【讨论】:

      猜你喜欢
      • 2014-03-01
      • 2011-10-12
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      相关资源
      最近更新 更多