为什么如此难以找到如何做到这一点超出了我 - 所以也许我试图以错误的方式做到这一点 - 谁知道 - 希望你们其中一个,哈哈。
我有一个按钮,上面写着“购买”(非消耗品)。如果购买成功,则更新NSUserDefaults purchase = YES并删除该按钮。一切都好到这里。
现在,当用户删除应用并想要在新设备上重新安装或安装时,我想要显示的内容,在这些情况下,代替“购买”按钮是“恢复”按钮。将单击“恢复”按钮并调用restoreCompletedTransactions。对我来说似乎是合乎逻辑的 - 用户不希望看到他们已经购买的“购买”按钮。
问题是NSUserDefaults购买= YES在重新安装或新安装时将无法使用。所以我的问题是我如何确定之前是否购买了应用程序,因此我可以显示“购买”按钮或“恢复”按钮。有没有办法确定用户是否已经进行了此应用内购买?
提前感谢拜伦。
答案 0 :(得分:1)
以后没有好办法将状态从一个应用安装转移到另一个应用安装。你可能会滥用钥匙串,但你不应该这样做。
只需显示"购买"一直以来。在iOS上,这是处理这种情况的标准方法。人们习惯于看到购买按钮,即使他们之前购买过,他们也会明白这意味着什么。当然你还需要一个恢复按钮。
根据您使用的商店类型,您有两个选项来放置还原按钮。
如果您有类似商店的商店,例如tableView列出了您的所有产品,并进行了"还原购买" tableView末尾的单元格。以下是PCalc Lite的界面示例:
如果您没有类似界面的商店,请在应用的设置部分添加一个按钮。迪斯科动物园是如何做到的:
答案 1 :(得分:0)
您可以使用应用程序询问的后端服务器来确定用户是否已通过登录设备上的帐户进行购买。 Apple会要求您根据您指出的原因设置某种检查设施......用户不必在新设备或他们可能拥有的其他设备上重新购买。您必须让帐户注册为用户可选,Apple将再次要求此帐户。
答案 2 :(得分:0)
我知道这是一个老问题,你可能已经解决了,但我在为购买机制设计用户友好界面方面遇到了类似问题,并找到了这样的解决方案:
-(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];
}
然后在警报视图委托函数中:
-(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
}
}
}
因此,恢复选项将恢复并最终购买。如果用户是第一次购买,那么无论如何他/她都不会担心购买两次。如果用户之前购买并在其他设备上安装该应用程序,则他/她将知道购买按钮将提供恢复选项。