应用内购买 – 如何确定购买是否已经完成?
为什么很难find如何做到这一点是超出我的 – 也许我正在试图做错误的方式 – 谁知道 – 希望你们中的一个,哈哈。
我有一个button,说'购买'(非消耗品)。 如果购买成功,则更新购买的NSUserDefaults = YES,该button被移除。 一切都很好,在这里。
现在,当用户删除应用程序,并希望重新安装或安装在新设备上时,我想在这些情况下,代替“购买”button显示一个“恢复”button。 “恢复”button将被点击,restoreCompletedTransactions将被调用。 看来对我来说是合乎逻辑的 – 用户不想看到“购买”button – 他们已经购买了。
问题是NSUserDefaults购买= YES将不可用于重新安装或新安装。 所以我的问题是如何确定应用程序是否已经购买,所以我可以显示“购买”button或“恢复”button。 有没有办法确定这个应用内购买是否已经由用户做出?
在此先感谢拜伦。
将来从一个应用程序安装到另一个应用程序安装没有好的方法。 你可能会滥用钥匙链,但你不应该这样做。
只是显示“购买”所有的时间。 在iOS上,这是处理这种情况的标准方式。 人们习惯看到一个购买button,即使他们以前购买,他们会明白这是什么意思。 当然,你仍然需要一个恢复button。
根据您使用的商店types,您可以使用两个选项来放置恢复button。
如果你有一个像界面一样的商店,例如一个列出所有产品的tableView,在你的tableView的末尾放置一个“恢复购买”单元格。 这里以PCalc Lite的界面为例:
如果您没有类似商店的界面,请在应用程序的设置部分添加一个button。 迪斯科动物园就是这样做的:
您可以使用应用程序询问的后端服务器来确定用户是否通过login到设备上的帐户购买。 苹果将要求你有某种检查设施,因为你指出的原因…用户不应该重新购买新设备或他们可能拥有的其他设备。 您必须使帐户注册为用户可选,苹果将要求这一点。
我知道这是一个老问题,你可能已经解决了这个问题,但是在devise一个用户友好的购买机制界面方面,我遇到了类似的问题,并且find了这样一个解决scheme:
-(IBAction) purchase { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:<# A brief explanation #> delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Restore",@"Purchase", nil]; alert.delegate = self; alert.tag = _IAPTAG; [alert show]; }
然后在alert view委托函数中:
-(void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if(alertView.tag == _IAPTAG) { if(buttonIndex == 0) { //cancel } else if(buttonIndex == 1) { //restore } else if(buttonIndex == 2) { //purchase } } }
所以恢复选项将会恢复,购买将最终购买。 如果用户第一次购买,那么他/她不会担心买两次。 如果用户之前购买并在另一个设备上安装应用程序,则他/她将知道购买button将提供恢复选项。