我已在我的应用程序中成功实施了应用内购买。
我的查询是:
有一个苹果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)。
答案 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 id
和in app purchase id
之间进行匹配的流程。实际上我很久以前做过in App Purchase
所以我不知道in app purchase
成功后从苹果发送的参数是什么。可能还有in-app purchase receipt
和其他一些参数。只需要从同一用户下载产品后获取与时间相同的唯一参数。
所以在这里我认为“应用内购买收据”作为in App purchase
成功后的唯一参数返回。一旦in App purchase
成功,您就可以在服务器上绑定in-app purchase receipt
和login user id
。因此,下次当B用户使用相同的apple user id
下载同一产品时,in App purchase
请求将返回相同的in-app purchase receipt
,因此请检查此receipt id
天气是否与另一个{{1}绑定如果login id
,则取消下载并向用户显示“此帐户已与其他某个登录ID进行链接”的消息。