在通过StoreKit使用MKStoreKit的应用程序中,我注意到检查订阅是否仍然有效的方法总是返回0(否或假)。
我跟踪了错误,并发现在方法- (BOOL) isSubscriptionActive:(NSString*) featureId
中,这一行生成的jsonObject
:
id jsonObject = [NSJSONSerialization JSONObjectWithData:subscriptionProduct.receipt options:NSJSONReadingAllowFragments error:nil];
是nil
。
然后,我检查了此方法返回的错误,即:
MKStoreManager isSubscriptionActive:]错误Domain=NSCocoaErrorDomain Code=3840“操作无法完成。(可可错误3840。)(字符15周围的对象中的键没有值。)UserInfo=0x200c0300 {NSDebugDescription=No值,用于字符15.} (lldb)周围对象中的键
因此,我检查了收据,发现问题是假定的"JSON收据“不是JSON,因为它使用"=
”而不是":
“。我想已经有人处理过这个问题了,那你有什么解决办法呢?
编辑我正在使用沙箱环境。
发布于 2013-05-25 09:26:37
收据不是JSON对象。它是私有格式,应该传递到App进行验证--您不应该试图自己解析它。来自应用程序采购编程指南
注意:在iOS上,商店收据的内容和格式是私有的,可能会有变化。应用程序不应试图直接解析收据数据。使用这里描述的机制来验证接收并检索其中存储的信息。
但是,从我对MKSKSubscriptionProduct实现的简要介绍来看,代码似乎覆盖了来自appears的验证服务器的JSON响应的初始接收数据。因此,在某些情况下,接收属性可能是一个有效的JSON对象,而有时则不是。
此外,代码似乎正在直接使用appears验证收据。这被认为是一种安全风险。引用苹果关于iOS5应用商店漏洞的建议
验证收据的最佳实践是将收据发送到服务器,并让服务器使用App服务器执行验证。如果应用程序从设备直接连接到app服务器,则应用程序可能会受到此漏洞的影响。
底线是,在我看来,MKStoreKit实现中存在一些bug,可能值得向开发人员提出这些问题。
更新
我应该补充一点,App沙箱环境有在最不合适的时候崩溃的倾向。它可能只是沙箱未能响应收据验证请求,因此MKSKSubscriptionProduct收据被保留为初始的非JSON状态,从而导致失败。
如果是这样的话,您可能会发现,一旦沙箱被修复,它将在某个时候突然开始工作。
https://stackoverflow.com/questions/16738551
复制相似问题