我正在尝试使用SKStoreProductViewController在我的应用程序中以模态方式打开App Store。我在网上看了很多例子,人们有两种方式这样做。
SKStoreProductViewController *storeController = [[SKStoreProductViewController alloc] init];
[storeController setDelegate:self];
//set product parameters
//must be a number wrapped in a string
NSDictionary *productParameters = @{ SKStoreProductParameterITunesItemIdentifier : @"36372693196"};
[storeController loadProductWithParameters:productParameters completionBlock:^(BOOL result, NSError *error) {
if (result) {
//show
[self presentViewController:storeController animated:YES completion:nil];
}else {
NSLog(@"ERROR WITH STORE CONTROLLER %@\n", error.description);
//redirect to app store
//[[UIApplication sharedApplication] openURL:[[self class] appStoreURL]];
}
}];
如果我这样做^^没有任何反应。从不执行块中的if(result)或else语句。
我也看到人们为完成块传递nil,并在此之后立即以模态方式呈现视图控制器,如下所示:
SKStoreProductViewController *storeController = [[SKStoreProductViewController alloc] init];
[storeController setDelegate:self];
//set product parameters
//must be a number wrapped in a string
NSDictionary *productParameters = @{ SKStoreProductParameterITunesItemIdentifier : @"36372693196"};
[storeController loadProductWithParameters:productParameters completionBlock:nil];
[self presentViewController:storeController animated:YES completion:nil];
当我呈现视图控制器时,执行loadProductWithParameters块内的代码。我在这一点上非常困惑。如果块在我出现之前没有运行,我如何检查成功与否。
最后,我读到你应该在后台线程中执行loadProductWithParameters。我也尝试过这个。第二个选项是唯一提出模态的选项 - 无法从模拟器和设备连接到iTunes消息。我尝试了多个应用程序ID。到底是怎么回事?我如何使这个工作?
答案 0 :(得分:3)
你是第一个代码应该工作得很好。但是在iPhone模拟器中,iTunes Store通常会返回错误。
我已经在iPhone上测试了你的第一个代码(带有其他标识符)并且它工作得很好,但是你提供的SKStoreProductParameterITunesItemIdentifier
(36372693196)似乎不正确。
答案 1 :(得分:3)
如果iTunes项目标识符无效,则completionBlock
永远不会在模拟器或真实设备上被调用。这似乎会使result
和error
参数无效,所以我会说这是一个错误。
模拟器似乎还有其他问题,即使标识符有效(并且在设备上有效),它也不会显示任何内容。