小编Lio*_*ion的帖子

恢复应用内购买交易

这个想法是无论是下雨还是下雨,潮湿或精细,用户都必须得到他付出的全部费用.

来自Apple:

Store Kit provides built-in functionality to restore transactions for non-consumable products, auto-renewable subscriptions and free subscriptions

对于这些交易,Apple Store Kit具有良好的内置工具.我想专注于其他类型(特别是消耗品).唯一的交易信息是我们在成功购买后通过Store Kit接收的标识符和收据数据.我们的应用程序使用服务器端模型向其提供产品.但是仍然存在许多丢失购买数据的情况,例如当用户通过App Store进行购买时服务器放下,因此无法向服务器发送收据以完成验证过程.

目前的解决方法是:

  1. 服务器返回产品标识符列表
  2. 用户选择一个; app将其标识符保存在设备上(通过SQLite或Core Data).Standart Apple Store交易流程紧随其后.
  3. 如果成功,应用程序将收据数据与其设备上的标识符一起保存并发送给服务器.如果出现故障或取消,则立即从设备中删除标识符.
  4. 如果服务器的响应正常,则应用程序将从设备中删除带有收据数据的标识符.否则,它将定期向服务器发送请求,直到成功响应行为为止.

但这种方法仍然存在泄漏.例如,用户可以从设备中删除不等待交易到服务器的应用程序,因此根本不会有任何关于他的购买的证据.

你的建议?

iphone in-app-purchase ios

6
推荐指数
1
解决办法
1674
查看次数

在iOS中进行延迟初始化

数据来自JSON中的服务器,它放在一个NSDictionary.根据请求数据的类型,将从此创建新的类对象NSDictionary.有大量数据出现,因此该对象NSDictionary仅在引用特定变量时才会引用并提取值.像延迟初始化的东西:

- (NSString *)imgURL {
    if (_imgURL == nil) {
        _imgURL = [self makeObjForKey:kImageURL];
    }
    return _imgURL;
}
Run Code Online (Sandbox Code Playgroud)

这显着提高了应用程序速度,但产生了其他问题:

  1. 如果没有值NSDictionary,则保持为零.然后,对于此变量的每个后续调用,都会在其中进行搜索NSDictionary.
  2. 复制类(NSCopying协议)的整个实例时,将复制所有变量,从而产生整个转换NSDictionary.

解决方案:

  1. 放置一些表示已检查值的标志.但是你必须添加额外的检查
  2. 仅复制NSDictionary对象实例,但之后必须再次解析相同的变量

无论如何,这些解决方案并非最佳.也许有人面临类似的问题,可以建议其他技术.

initialization lazy-evaluation ios

5
推荐指数
1
解决办法
480
查看次数