应用内购买验证 - 根据用户验证购买
in-app purchase validation - validate purchase as per user
我已经在我的应用程序中成功实现了应用内购买。
我的查询是:
有一个苹果 ID xyz@apple.com,我通过它登录到 ipad 或设备中的 iTunes。
现在在我的应用程序中有 多个用户 。他们将通过应用内购买来购买产品。我的产品是非消耗品。
现在,例如有两个用户 A 和 B(他们登录到我的应用程序,因此他们是应用程序用户)。
案例:用户使用apple id xyz@apple.com使用内购购买产品并获得购买产品会员的用户权限(此处为支付成功我调用web使 he/she 已购买产品的用户数据库更新的服务)并从我的应用程序注销。现在用户 B 登录到我的应用程序并购买产品以及用户 A 购买的产品(这里注意苹果 ID 是相同的 xyz@apple.com)。但是当他试图购买产品时苹果说“你已经购买了 this.Tap 可以免费再次下载它”所以用户点击确定并且该产品将再次根据用户恢复并且在该方法成功时再次我调用使用户数据库更新的 Web 服务。
所以问题是我如何在从这个 ID(即 xyz.apple.com)购买您已经购买的产品时区分两个用户,现在用户应该不同,那么您必须使用另一个 apple id(可能是 abc.apple.com)登录。
非消耗品为用户一次性购买,不会过期,不会随使用而减少。
甚至想过,如果您正在寻找如何在 login user id
和 in app purchase id
之间匹配的流程。实际上我很久以前就做过 in App Purchase
所以我不知道 in app purchase
成功后苹果发送了什么参数。可能还有 in-app purchase receipt
和其他一些参数。一旦从同一用户下载产品,只需要获取相同次数的唯一参数。
所以在这里,一旦 in App purchase
成功,我将 "in-app purchase receipt" 视为唯一参数 return。一旦 in App purchase
成功,您就可以在您的服务器上将 in-app purchase receipt
与 login user id
绑定。所以下次当 B 用户要下载具有相同 apple user id
的相同产品时,in App purchase
请求将 return 相同 in-app purchase receipt
所以检查天气是否与此 receipt id
绑定另一个 login id
,如果 YES
则取消下载并向用户显示 "This account is already linkup with some other login id".
的消息
最后我使用以下解决方案解决了应用程序购买问题:
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 connect 中的沙盒测试器中删除该 apple(iTunes) id 解决了这个问题。
我已经在我的应用程序中成功实现了应用内购买。
我的查询是:
有一个苹果 ID xyz@apple.com,我通过它登录到 ipad 或设备中的 iTunes。 现在在我的应用程序中有 多个用户 。他们将通过应用内购买来购买产品。我的产品是非消耗品。 现在,例如有两个用户 A 和 B(他们登录到我的应用程序,因此他们是应用程序用户)。
案例:用户使用apple id xyz@apple.com使用内购购买产品并获得购买产品会员的用户权限(此处为支付成功我调用web使 he/she 已购买产品的用户数据库更新的服务)并从我的应用程序注销。现在用户 B 登录到我的应用程序并购买产品以及用户 A 购买的产品(这里注意苹果 ID 是相同的 xyz@apple.com)。但是当他试图购买产品时苹果说“你已经购买了 this.Tap 可以免费再次下载它”所以用户点击确定并且该产品将再次根据用户恢复并且在该方法成功时再次我调用使用户数据库更新的 Web 服务。
所以问题是我如何在从这个 ID(即 xyz.apple.com)购买您已经购买的产品时区分两个用户,现在用户应该不同,那么您必须使用另一个 apple id(可能是 abc.apple.com)登录。
非消耗品为用户一次性购买,不会过期,不会随使用而减少。
甚至想过,如果您正在寻找如何在 login user id
和 in app purchase id
之间匹配的流程。实际上我很久以前就做过 in App Purchase
所以我不知道 in app purchase
成功后苹果发送了什么参数。可能还有 in-app purchase receipt
和其他一些参数。一旦从同一用户下载产品,只需要获取相同次数的唯一参数。
所以在这里,一旦 in App purchase
成功,我将 "in-app purchase receipt" 视为唯一参数 return。一旦 in App purchase
成功,您就可以在您的服务器上将 in-app purchase receipt
与 login user id
绑定。所以下次当 B 用户要下载具有相同 apple user id
的相同产品时,in App purchase
请求将 return 相同 in-app purchase receipt
所以检查天气是否与此 receipt id
绑定另一个 login id
,如果 YES
则取消下载并向用户显示 "This account is already linkup with some other login id".
最后我使用以下解决方案解决了应用程序购买问题:
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 connect 中的沙盒测试器中删除该 apple(iTunes) id 解决了这个问题。