2014-03-26 24 views
6

例如判断多个用户:有在一个单一的iPhone设备两个不同的游戏人物, 我们称之为A和B.iOS的IAP,如何在同一设备

首先,应用程序用户登录为A,他执行IAP操作,A登出没有完成购买。

然后,应用程序用户登录为B,然后购买完成事件的到来,这是一个问题,如何判断收据属于A,不B.

我用Google搜索,发现SKMutablePayment.requestData可用于解决这个问题,但Apple文档告诉我这是一个保留的属性,并且必须为零,否则付款将被拒绝。

requestData 保留供将来使用。 (只读)

@property(nonatomic,copy,readonly)NSData * requestData讨论 默认值为nil。如果requestData不为零,您的付款 请求将被拒绝。

Availability在iOS 3.0及更高版本可用。宣布SKPayment.h

+0

所以你的问题是,如何与IAP请求一起传递用户身份(如用户名)? – Raptor

+0

@Raptor是的,我想。 – user1298239

+0

我认为这是一个非问题。退出并不会删除您的IAP。 –

回答

7

感谢大家的回复

终于,我发现SKMutablePayment.applicationUsername可以节省我的私人帐户的用户名, 但它仅适用于iOS7.0。

节省:

SKMutablePayment* payment = [SKMutablePayment paymentWithProduct:product]; 
payment.applicationUsername = @"my_username_1001"; 

读:

-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 
{    
    for (SKPaymentTransaction* trans in transactions) { 
     switch (trans.transactionState) { 
      case SKPaymentTransactionStateFailed: 
       [[SKPaymentQueue defaultQueue] finishTransaction:trans]; 
       break; 
      case SKPaymentTransactionStatePurchased: 
       // got private user account here 
       NSString* applicationUsername = [[trans payment] applicationUsername]; 
       break; 
      case SKPaymentTransactionStatePurchasing: 
       break; 
      case SKPaymentTransactionStateRestored: 
       break; 
     } 
    } 
} 
+0

伟大的发现任何想法如何处理这个对ios6? – MiMo

+0

这是非常好的方法:)但我在尝试恢复事务时遇到问题。恢复后,applicationUsername返回NULL。你可以帮我吗? –

+0

@AlexSamnas您是否尝试过trans.originalTransaction.applicationUsername? – LolaRun