应用内购买验证 - 根据用户验证购买

时间:2015-04-22 05:08:38

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

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

我的查询是:

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

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

所以问题是我如何在购买您已经购买的此ID(即xyz.apple.com)的产品时与用户不同,现在用户应该是不同的,那么您必须使用另一个苹果ID登录(可能是abc.apple.com)。

2 个答案:

答案 0 :(得分:2)

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

1)我获取了事务ID,并根据用户的数据库更新它,如果事务ID发现重复,那么它将抛出错误而不会使用户成为付费会员。

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

-(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连接中的沙箱测试器中删除那个苹果(iTunes)ID来解决这个问题。

答案 1 :(得分:1)

非耗材产品由用户购买一次,使用时不会过期或减少。

甚至认为您是否正在寻找如何在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天气是否与另一个{{1}绑定如果login id,则取消下载并向用户显示“此帐户已与其他某个登录ID进行链接”的消息。