检测已购买产品Inapp iphone sdk时出现问题

问题描述

|| 我正在尝试在我的应用程序中添加Inapp产品。 我可以列出我创建的inapp产品。 我可以显示付款弹出窗口,并且可以毫无问题地购买产品。 但是...启动应用程序时,我无法验证此设备是否已经购买了该产品。 我正在使用MKStore类,该类具有验证产品是否已经购买的功能
if([[NSUserDefaults standardUserDefaults] boolForKey:@\"Myproduct1\"]){
           NSLog(@\"Already Purchased\");
}
但是我总是收到错误消息。 如果我打开该应用程序,然后按按钮再次购买了该产品,则会收到类似“您已购买此产品,请按OK进行下载”的警告。 付款还可以,但是我不知道如何验证...我想在应用启动时禁用已购买产品上的“付款”按钮。 编辑: 解决了!但是...如果我卸载了该应用程序,则将重新启动standardUserDefaults,并且我不知道已购买了哪些产品...有某种方法可以询问Apple,是否已经购买了该产品?     

解决方法

看来您实际上尚未设置用户默认密钥。 完成购买后,需要在用户默认设置中设置相应的密钥,如下所示:
- (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.
    ...
}
只有在实际设置完布尔之后,您的检查才能成功:
if([[NSUserDefaults standardUserDefaults] boolForKey:@\"Myproduct1\"]){
    NSLog(@\"Already Purchased\");
}
    ,我知道的唯一方法是将收据对象发送到您的服务器,并将其存储在数据库中。 这样,您可以至少在逐个设备的基础上管理购买,并且获得了额外的好处,即可以在应用程序代码之外使用Apple验证购买​​收据,而该收据不会被黑客入侵。容易。 缺点是您必须维护服务器和Web服务,并且您的应用程序需要Internet连接以验证其购买。