SKStoreProductViewController显示延迟

rdu*_*and 8 storekit ios

我在我的应用程序中使用了SKStoreProductViewController.它显示正确,但有几秒钟的延迟,这会降低用户体验.

我的代码中有什么问题吗?或者我应该通知用户VC正在加载?因为现在可以相信按下按钮后没有发生任何事情(触发以下代码):

-(void)launchApp:(id)sender {

    // Recall on main thread if necessary
    if (![NSThread isMainThread]) {
        [self performSelectorOnMainThread:@selector(launchApp:)
                               withObject:sender
                            waitUntilDone:NO];
        return;
    }

    // Initialize Product View Controller
    SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];

    // Configure View Controller
    [storeProductViewController setDelegate:self];
    [storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @"*********"}
                                          completionBlock:^(BOOL result, NSError *error) {
        if (error) {
            NSLog(@"Error %@ with User Info %@.", error, [error userInfo]);
        } else {
            // Present Store Product View Controller
            [self presentViewController:storeProductViewController animated:YES completion:nil];
        }
    }];
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*uch 33

导致延迟是因为您在产品加载后提供了viewController.

您可以将调用presentViewController:animated:completion:放在已加载产品后调用的块之外.在这种情况下,控制器将显示为空,并在产品装入后填充.

这些方面的东西:

SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];

// Configure View Controller
[storeProductViewController setDelegate:self];
[storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @364709193}
                                      completionBlock:^(BOOL result, NSError *error) {
    if (error) {
        NSLog(@"Error %@ with User Info %@.", error, [error userInfo]);
    } else {

    }
}];
// Present Store Product View Controller
[self presentViewController:storeProductViewController animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

或者您可以创建一个"弹出窗口"视图,在控制器加载其内容时显示活动指示器.

或者你使用 [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

有几种方法可以解决这个问题.