1

为什么很难找到如何做到这一点超出了我的能力 - 所以也许我试图以错误的方式做到这一点 - 谁知道 - 希望你们中的一个,哈哈。

我有一个按钮,上面写着“购买”(用于非消耗品)。如果购买成功,则更新 NSUserDefaults purchase = YES 并移除该按钮。到这里为止一切顺利。

现在,当用户删除应用程序并想要在新设备上重新安装或安装时,我想展示的,在这些情况下,代替“购买”按钮的是“恢复”按钮。将单击“恢复”按钮并调用 restoreCompletedTransactions。对我来说似乎是合乎逻辑的——用户不想看到“购买”按钮——他们已经购买了。

问题是购买的 NSUserDefaults = YES 在重新安装或新安装时将不可用。所以我的问题是如何确定该应用程序之前是否已购买,以便我可以显示“购买”按钮或“恢复”按钮。有没有办法确定用户是否已经进行了此应用内购买?

在此先感谢,拜伦。

4

3 回答 3

1

将来没有将状态从一个应用安装转移到另一个应用安装的好方法。您可能可以为此滥用钥匙串,但您不应该这样做。

只需始终显示“购买”。在 iOS 上,这是处理这种情况的标准方法。人们习惯于看到一个购买按钮,即使他们以前购买过,他们也会明白这意味着什么。当然,您仍然需要某个地方的恢复按钮。

根据您使用的商店类型,您有两个选项来放置恢复按钮。

如果您有类似商店的界面,例如列出所有产品的 tableView,请在 tableView 的末尾放置一个“恢复购买”单元格。下面以 PCalc Lite 的界面为例:

在此处输入图像描述

如果您没有类似商店的界面,请在应用程序的设置部分放置一个按钮。这就是迪斯科动物园的做法:

在此处输入图像描述

于 2014-03-04T15:45:25.927 回答
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
        }
    }
}

因此,恢复选项将恢复,购买最终将购买。如果用户是第一次购买,那么他/她无论如何都不会担心购买两次。如果用户之前购买并正在另一台设备上安装应用程序,那么他/她将知道购买按钮将提供恢复选项。

于 2014-03-04T13:26:10.427 回答
0

您可以使用应用程序询问的后端服务器来确定用户是否已通过登录设备上的帐户进行购买。出于您指出的原因,Apple 将要求您拥有某种检查工具……用户不必在新设备或他们可能拥有的其他设备上重新购买。您必须使帐户注册对用户来说是可选的,Apple 将再次要求这样做。

于 2013-02-02T23:43:42.220 回答