【问题标题】:In-App-Purchase takes too long time to show confirmation alert view应用内购买需要很长时间才能显示确认警报视图
【发布时间】:2020-05-01 10:38:26
【问题描述】:

我遇到了以下问题:当我的应用程序在设备上运行并点击购买按钮时,它会触发应用内购买机制,最多需要十秒钟才能显示标准确认 UIAlertView,上面写着: “你要买吗...”。我以前从未见过这样的行为。通常它会立即发生。所以首先我认为这可能是由于互联网连接不佳或类似的原因,但模拟器使用相同的 WiFi 网络并且它运行良好,警报视图会立即呈现它应该的样子。所以问题可能出在其他地方。有人已经解决了这个问题吗?

这是按钮点击:

- (void)buyItemTapped:(id)sender
{
[[InAppPurchaseManager sharedInstance] buy:[NSString stringWithFormat:@"com.mycompany.myapp.unit%d", [sender tag] + 1]];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(transactionFailed)
                                             name:TRANSACTION_FAILED_NOTIFICATION
                                           object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(productPurchased:)
                                             name:PRODUCT_PURCHASED_NOTIFICATION
                                           object:nil];

}

购买方式:

- (void)buy:(NSString *)identifier
{
SKProduct *product = [self.products objectForKey:identifier];

if (product)
   [self purchaseProduct:product];
else
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                     message:@"Invalid Product Identifier"
                                                    delegate:nil
                                           cancelButtonTitle:@"OK"
                                           otherButtonTitles:nil];

    [alert show];

}
}

购买产品方法:

- (void)purchaseProduct:(SKProduct *)product
{
    if ([SKPaymentQueue canMakePayments])
{
    SKPayment *payment = [SKPayment paymentWithProduct:product];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
 }
  else
      NSLog(@"Cannot make purchase");
}

【问题讨论】:

  • 用户点击购买按钮后,您在显示警报视图之前执行了哪些活动。请在此处粘贴代码以进行进一步调查。
  • @Abhinav 请查看更新
  • 我没有看到“您想购买该商品吗?”的警报视图代码。这里是不是少了一块?
  • @Abhinav 此警报正在从委托方法显示 - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions 当刚刚收到来自商店的响应时
  • 商店的响应是指服务器的响应。因此,当用户点击“购买”时,您正在向服务器发送一些请求,然后在收到响应后,您将抛出警报视图“您要购买该商品吗?”。如果是这样,你为什么要这样做。可能延迟是在 N/W 调用和服务器响应返回。理想情况下,我想进行异步服务器调用,并立即向用户显示警报。你能告诉我你是否在做与我提到的不同的事情吗?

标签: ios in-app-purchase storekit


【解决方案1】:

这应该与用户尝试购买时的实际体验无关。发生这种情况是因为您在沙盒环境中运行应用程序。事实上,使用模拟器会使它变得更慢。

但是,即使实际用户确实进行了购买,手机也必须连接到 Apple 的服务器,找到 IAP,然后将 IAP 数据安全地发送到设备。因此,您可以想象,在发回确认消息之前有一点时间是正常的。

我建议在SKPaymentTransactionStatePurchasing 方法中添加一个加载屏幕,告诉用户您实际上是在获取信息。这可以像将“购买”按钮更改为“购买...”一样简单。

同样,这是 100% 正常的,但主要是因为您使用的是沙盒和/或模拟器。 Apple 必须进行大量检查,并验证很多事情,然后才能发回确认消息,因此您应该预计至少会有一些小的延迟(就像您从网站获取信息一样)。

【讨论】:

  • 我相信苹果必须为该 IAP id 的搜索提供一个不错的哈希值。不像是 O(n) 复杂度算法
  • 现在这太荒谬了,因为它需要超过 30 秒!不敢相信苹果是如此愚蠢 - 购买是 appstore 上发生的主要事情,它们必须很快,否则用户就会消失!更不用说在设备上调试太慢了
  • @Tertium 他们拒绝了我的应用更新,说我的应用内购买视图花费了太长时间。多么愚蠢。
【解决方案2】:

您在沙盒环境中吗?如果是这样,那是正常情况。我在中国,在设备上测试 IAP 总是需要 10 多秒。我认为这不是你的技术问题。相信自己。:)

【讨论】:

    【解决方案3】:

    一个原因可能是,您处于沙盒环境中,偶尔会出现问题。或者您的应用在执行购买时可能会做一些繁重的工作,这会降低设备速度(但在更强大的模拟器上运行速度很快)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-23
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      相关资源
      最近更新 更多