2011-10-13 265 views
39

我走到這一步:重新安裝後,用戶需要點擊「購買的功能」,然後他被以$ 0.99的問題嚇到了,然後有登錄,然後被告知該功能已經買了,他得到它是免費的。恢復已經在iPhone上購買了應用內購買嗎?

我知道蘋果是一種宗教和用戶都很強的信徒,但是是不是有更好的辦法? :-)我想要的是檢查功能,而不真正購買它。讓用戶輸入他的帳戶信息似乎是必要的,也許購買0.00美元的功能?或者有沒有一種方法可以做到這一點?

我使用MKStoreKit整個應用內購買,但任何解決方案將是巨大的。


UPDATE

感謝名單,以darvids0n,你的方法解決我的問題!這裏的一些工作的代碼爲別人想的一樣:它要求

[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; 

假設

- (void)removePreviousPurchases { //just for sandbox testing 
    [[MKStoreManager sharedManager] removeAllKeychainData]; 
} 

- (void)restorePreviousPurchases { //needs account info to be entered 
    if([SKPaymentQueue canMakePayments]) { 
     [[MKStoreManager sharedManager] restorePreviousTransactionsOnComplete:^(void) { 
      NSLog(@"Restored."); 
      /* update views, etc. */ 
     } 
     onError:^(NSError *error) { 
      NSLog(@"Restore failed: %@", [error localizedDescription]); 
      /* update views, etc. */ 
     }]; 
    } 
    else 
    { 
     NSLog(@"Parental control enabled"); 
     /* show parental control warning */ 
    } 
} 

回答

33

如果$ 0.99產品非消耗,那麼你應該提供一個「恢復購買」按鈕(或類似)你已經添加了一個事務觀察者,並且實現了protocol,包括一個case來處理還原的事務(狀態爲SKPaymentTransactionStateRestored),這將起作用。

+0

謝謝,終於找到了用於此的MKStore-Kit的方法! (請參閱編輯我的問題) –

+0

如果我有10個非消耗品購買ID,並且其中4個是由用戶購買的。在還原期間,我如何才能找出哪些是先前購買的,哪些不是? – Satyam

+0

@Satyamsvv你不會得到你的用戶沒有購買的購買回調。你將只能得到4個更新交易在'SKPaymentTransactionObserver'方法['-paymentQueue:updatedTransactions:'](http://developer.apple.com/library/ios/documentation/StoreKit/Reference/SKPaymentTransactionObserver_Protocol/Reference/Reference.html #// apple_ref/doc/uid/TP40008262-CH1-SW3),並且這些的'transactionState'將是'SKPaymentTransactionStateRestored'。 – darvids0n

9

添加這兩種方法:

[[SKPaymentQueue defaultQueue] addTransactionObserver:self]; 

[[SKPaymentQueue defaultQueue]restoreCompletedTransactions]; 
+0

我應該在哪裏添加這兩種方法? –

+0

我應該在哪裏放這個 – coolcool1994