2014-03-26 25 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