问题描述
||
我正在尝试在我的应用程序中添加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连接以验证其购买。