2011-10-13 223 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