检测已购买产品的问题(Inapp iphone sdk)

时间:2011-05-26 15:56:15

标签: iphone objective-c sdk

我正在尝试在我的应用上添加Inapp产品。

  1. 我可以列出我创建的inapp产品。
  2. 我可以显示付款弹出窗口,我可以毫无问题地购买产品。
  3. 但是......当我启动应用程序时,我无法验证此设备是否已购买此产品。

    我正在使用MKStore类,它具有验证产品是否已经购买的功能:

    if([[NSUserDefaults standardUserDefaults] boolForKey:@"Myproduct1"]){
               NSLog(@"Already Purchased");
    }
    

    但我总是收到假的。

    如果我打开应用程序,然后按下按钮再次购买此产品,我会收到一条警告,例如“您已购买此产品,请按OK下载。”。

    付款确实没问题,但我不知道如何验证...我想禁用应用启动时购买的产品上的“付费”按钮。

    修改

    解决了!但是......如果我卸载应用程序,则会重新启动standardUserDefaults并且我不知道已经购买了哪些产品...如果产品已经购买,有一些方法可以询问Apple吗?

2 个答案:

答案 0 :(得分:1)

似乎您实际上没有设置用户默认密钥。

完成购买后,您需要在用户默认设置中设置相应的密钥,如下所示:

- (void)product1WasPurchased
{
    // Remember that product 1 was purchased.
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"Myproduct1"];
    // If you want to be sure that the preferences are saved immediately
    // you need to call:
    [[NSUserDefaults standardUserDefaults] synchronize];

    // Do some other stuff.
    ...
}

只有在您实际设置了bool后,您的支票才能成功:

if([[NSUserDefaults standardUserDefaults] boolForKey:@"Myproduct1"]){
    NSLog(@"Already Purchased");
}

答案 1 :(得分:1)

我知道这样做的唯一方法是将收据对象发送到您的服务器,并将其存储在数据库中。

这样,您可以管理购买,至少在逐个设备的基础上进行管理,您可以获得额外的好处,即能够在应用代码之外使用Apple验证购买​​收据,而不是很容易被黑了。

下行是您必须维护服务器和网络服务,并且您的应用需要互联网连接来验证其购买。