【问题标题】:Problem to detect already purchased products (Inapp iphone sdk)检测已购买产品的问题(Inapp iphone sdk)
【发布时间】:2011-05-26 15:56:15
【问题描述】:

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

  1. 我可以列出我创建的应用内产品。
  2. 我可以显示付款弹出窗口,我可以毫无问题地购买产品。

但是...当我启动应用程序时,我无法验证此设备是否已购买此产品。

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

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

但我总是收到假消息。

如果我打开应用程序,并按下按钮再次购买此产品,我会收到类似“您已购买此产品,请按 OK 下载。”的提示。

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

编辑:

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

【问题讨论】:

  • 你真的做过[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"Myproduct1"] 吗?
  • 错误:“不应忽略的无效值”
  • 这不是我问题的答案,是吗?
  • 我没听懂你,这就是问题所在,谢谢!

标签: iphone objective-c sdk


【解决方案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");
}

【讨论】:

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

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

这样,您至少可以逐个设备管理购买,而且您还可以获得额外的好处,即能够在您的应用代码之外验证您的购买收据,而这是无法做到的很容易被黑。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2015-02-16
    • 2016-01-31
    • 1970-01-01
    相关资源
    最近更新 更多