应用内购买需要很长时间才能显示确认警报视图

And*_*kha 10 storekit in-app-purchase ios

我遇到了以下问题:当我的应用程序在设备上运行并点击"购买"按钮时,会触发应用程序内购买机制,最多需要十秒钟才能显示标准确认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];

}
Run Code Online (Sandbox Code Playgroud)

购买方式:

- (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];

}
}
Run Code Online (Sandbox Code Playgroud)

purchaseProduct方法:

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

Joj*_*dmo 9

这应该与实际用户尝试购买时没有任何关系,这是因为您在沙箱环境中运行应用程序,如果您使用模拟器,这将使其更慢.此外,即使实际用户确实进行购买,手机也必须连接到苹果服务器,通过它的ID从数百万其他人中找到IAP,确保信息匹配,使用加密将此信息安全地发送回手机,然后手机必须检查加密是否与成功消息匹配,然后将成功发送回用户.正如您所看到的,在发送确认消息之前有一段时间是正常的.

我建议在SKPaymentTransactionStatePurchasing方法中添加一个加载屏幕,告诉用户您实际上是在获取信息.再一次,这是你所看到的100%正常,Apple必须做很多检查,并在发回确认信息之前验证很多东西.希望这可以帮助!

  • 我相信苹果必须有一个像IAP id的搜索相当好的哈希.不像是O(n)复杂度算法 (2认同)
  • 现在它只是荒谬,因为它需要超过30秒!无法相信苹果如此愚蠢 - 购买是 appstore 上发生的主要事情,它们必须很快,否则用户就会消失!更不用说在设备上调试太慢了 (2认同)

小智 5

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


小智 3

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