首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么MKStoreKit isSubscriptionActive方法总是返回NO?

为什么MKStoreKit isSubscriptionActive方法总是返回NO?
EN

Stack Overflow用户
提问于 2013-05-24 07:28:15
回答 1查看 541关注 0票数 1

在通过StoreKit使用MKStoreKit的应用程序中,我注意到检查订阅是否仍然有效的方法总是返回0(否或假)。

我跟踪了错误,并发现在方法- (BOOL) isSubscriptionActive:(NSString*) featureId中,这一行生成的jsonObject

代码语言:javascript
运行
AI代码解释
复制
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,因为它使用"=”而不是":“。我想已经有人处理过这个问题了,那你有什么解决办法呢?

编辑我正在使用沙箱环境。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-25 09:26:37

收据不是JSON对象。它是私有格式,应该传递到App进行验证--您不应该试图自己解析它。来自应用程序采购编程指南

注意:在iOS上,商店收据的内容和格式是私有的,可能会有变化。应用程序不应试图直接解析收据数据。使用这里描述的机制来验证接收并检索其中存储的信息。

但是,从我对MKSKSubscriptionProduct实现的简要介绍来看,代码似乎覆盖了来自appears的验证服务器的JSON响应的初始接收数据。因此,在某些情况下,接收属性可能是一个有效的JSON对象,而有时则不是。

此外,代码似乎正在直接使用appears验证收据。这被认为是一种安全风险。引用苹果关于iOS5应用商店漏洞的建议

验证收据的最佳实践是将收据发送到服务器,并让服务器使用App服务器执行验证。如果应用程序从设备直接连接到app服务器,则应用程序可能会受到此漏洞的影响。

底线是,在我看来,MKStoreKit实现中存在一些bug,可能值得向开发人员提出这些问题。

更新

我应该补充一点,App沙箱环境有在最不合适的时候崩溃的倾向。它可能只是沙箱未能响应收据验证请求,因此MKSKSubscriptionProduct收据被保留为初始的非JSON状态,从而导致失败。

如果是这样的话,您可能会发现,一旦沙箱被修复,它将在某个时候突然开始工作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16738551

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文