【问题标题】:Titanium ti.storekit returns empty productsTitanium ti.storekit 退回空产品
【发布时间】:2014-05-15 21:20:33
【问题描述】:

我正在使用 ti.storekit 进行应用计费。一切似乎都正常,但是当我运行以下代码时:

Storekit.requestProducts(["FooPro"], function (evt)
{
  Ti.API.info('evt:' + JSON.stringify(evt, undefined, 2));
  //hideLoading();
  if (!evt.success)
  {
    alert('ERROR: We failed to talk to Apple!');
  }
  else if (evt.invalid)
  {
    alert('ERROR: We requested an invalid product!');
  }
  else
  {
    item = evt.products;
    Ti.API.info('gotProducts:' + JSON.stringify(item, undefined, 2));
    success(item[0]);
  }
});

我收到了成功的回复,但没有产品:

evt:{
  "type": "callback",
  "products": [
    {}
  ],
  "source": {},
  "success": true
}

所以没有产品,只是默默地失败了。在 iTunes 连接中,在产品中,我有一个产品 ID 为 FooPro 的应用内产品(尽管它正在等待审核)。我不确定我做错了什么。 似乎一切正常,我只是得到一个空的产品数组,我不知道为什么。

这也是导致错误的原因,所以当我打电话时

// product = {} since the above returned it as empty
Storekit.purchase(product);

它出错并告诉我:

Passing individual args to `purchase` is DEPRECATED. Call `purchase` passing in a dictionary of arguments.
addTransactionObserver` should be called before `purchase`

编辑:产品在使用 Ti.API.info() 输出内容时显示为空。然而在设备上使用测试帐户登录iTunes后,产品仍然显示为空,但是当我进行更多调试时,产品对象似乎实际上是:

{'My product description'}

所以当我打电话时

Storekit.purchase(product)

好像真的在召唤

Storekit.purchase({'My product description'})

所以这里似乎失败了,因为购买调用永远不会触发 transactionState 事件监听器。

环境: - iPhone:5、4s

感谢您的帮助。

【问题讨论】:

  • 您的应用状态是否为“等待上传”?你是在真机上测试吗?
  • 是的,我正在 iPhone 5 上进行测试。我读过很多资料,它往往无法在模拟器上运行。但是,是的;应用程序状态仍在等待上传。我会尝试提交它,看看是否有帮助。
  • 目前一切都在等待审查。我得到了同样的结果。
  • 您必须在真实设备上进行测试,我想知道弃用的消息是否会导致问题。 Ti.Storekit 模块可能需要更新...
  • 不。它从来没有奏效。我发现更多的人使用 storekit 不适合他们的更新应用程序。似乎它只是做得不好。还有另一个可用的插件似乎更好。但它需要成本。我们最终放弃了为该应用进行应用内购买的想法。因为我们最终还是想回归本土并远离钛金属。太头疼了。

标签: ios titanium app-store-connect titanium-mobile titanium-modules


【解决方案1】:

哇...我一直在玩它,并且发生了一些奇怪的事情...

即使您收到产品的 [{}]products[0].title 也会返回实际的产品名称。 就好像它就在那里,但隐藏在跟踪语句中。

然后您需要做的就是发送 {product:e.products[0]} 进行购买,然后瞧:

Storekit.requestProducts(productIDs, function(e) {
    Ti.API.info("GOT PRODUCTS : "+JSON.stringify(e));
        // 'GOT PRODUCTS : {"type":"callback","products":[{}],"source":{},"success":true}'

    Ti.API.info('PROD TITLE : '+e.products[0].title);
        // 'PROD TITLE : My IAP product'

    Storekit.purchase({product:e.products[0]});
    // You need to implement 'transactionState' and addTransactionObserver to carry on from here - see the example code in the module package for that
});

并确保您设置了Storekit.autoFinishTransactions = false; - 否则在用户购买您的产品后您将无法获得最终购买事件。

【讨论】:

  • 很高兴听到这个消息!但由于我没有使用它,所以我不能轻易测试它。如果其他人可以确认这对他们有用,我现在将其标记为答案。
猜你喜欢
  • 1970-01-01
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 2015-02-12
  • 2014-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多