代码之家  ›  专栏  ›  技术社区  ›  Thorsten S.

iphone上的应用内购买:如何在有人可能购买之前*接收你的可用产品

  •  0
  • Thorsten S.  · 技术社区  · 16 年前

    目前我正在从plist加载支持的产品,然后我发送SKProducts请求以保证我的SKProducts仍然有效。

    所以我设置了请求,启动它并得到响应:

    • (void)productsRequest:(SKProductsRequest*)请求didReceiverResponse:(SKProductsResponse*)响应

    到目前为止,所有功能都正常。 问题:从调用请求到收到响应可能持续几秒钟。直到我的应用程序已经加载,用户可以选择和购买产品。

    但由于未收到任何产品,因此可用产品与已验证产品不同步->不太可能,但可能出错。

    所以我的想法是等到数据被加载,只有在列表被验证后才能继续。

     + (MyClass *) sharedInstance
    {
       if (!sharedInstance)
           sharedInstance = [MyClass new];
    // Now wait until we have our data
        [condition lock];
        while (noEntriesYet)   // is yes at begin
           [condition wait];
        [condition unlock];
        return sharedInstance;
    }
    
    - productsRequest: didReceiveResponse:
    {
    [condition lock];
    
    // I have my data
    
    noEntriesYet = false;
    [condition signal];
    [condition unlock];
    }
    

    问题:应用程序冻结。如果接收者的回复在 将查询sharedInstance。有不同的线程,如果 等待是达成在didReceiverResponse,一切正常。但如果不是,接收者是否负责 即使请求已发送,也从不调用。 锁打开了,一切看起来都很好。我尝试在单独的NSThread中发送产品请求,NSOperationQueue…没有用。

    • 为什么?发生了什么事?
    • 如何解决这个问题?
    2 回复  |  直到 16 年前
        1
  •  0
  •   Yakov    16 年前

    我认为在产品加载过程中您可能会阻塞GUI。在这种情况下,用户不能更改任何内容。例如:我使用透明的view+uiactivityindicator在使用appstore时阻止应用程序。

        2
  •  0
  •   Thorsten S.    16 年前

    好吧,到目前为止我有个问题:

    通知总是在主运行循环中发送,因此运行循环可能不会停止。

    我最后做的是:我向我的共享实例添加了一个标志,指示产品列表 已经到了。在你尝试购买一个产品之前,你必须询问它是否已经装载, 否则会弹出一个UIAlertView,通知您产品列表尚未验证,并且

    有效的;为了保证只获取有效的产品,只能从共享实例获取产品信息。

    推荐文章