在我的应用程序中,我使用SKStoreProductViewController显示更多应用程序,但Apple商店审核小组拒绝它的原因如下:
“点击更多应用按钮时会显示错误消息。”
当我在我的设备上测试时,一切正常。
以下是Apple发给我的截图,可能是什么问题?
示例代码:
__weak typeof(self) weakSelf = self;
SKStoreProductViewController* vc = [[SKStoreProductViewController alloc] init];
vc.delegate = self;
[vc loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @1000000000} completionBlock:^(BOOL result, NSError * _Nullable error) {
if(result==NO){
//handle failure
return;
}
[weakSelf presentViewController:vc animated:YES completion:nil];
}];
当ITMLKitErrorDomain
试图用无效参数调用SKStoreProductViewController
时,经常会出现loadProductWithParameters
错误。示例完整错误:
<Warning>: [SKStoreProductViewController]: Did fail with error: Error Domain=ITMLKitErrorDomain Code=101 "The operation couldn’t be completed. (ITMLKitErrorDomain error 101.)" UserInfo={ ... } {ITMLKitErrorHTTPStatus=400}
在调用parameters
时,验证loadProductWithParameters
字典中没有任何拼写错误或意外键。验证SKStoreProductParameterITunesItemIdentifier
和SKStoreProductParameterAffiliateToken
等键的值是否有效。
如果您在测试设备上没有遇到此问题,只需再次发送给它进行审核,这可能是itunes网站的临时问题(它用于显示这些“更多应用”,不是吗?)。没有任何解决方案,互联网上有几个提到这个问题。
在对您的问题进行调查期间,可以得出结论,在SkProductViewController
的情况下,可能与错误的产品ID相关联的情况非常罕见。此外,您应该检查是否要显示单个应用程序或其数量。因为Apple有bug与多个项目的显示相关联。
我用这种方式使用SKStoreProductViewController。这是在App Store中显示应用程序的代码块:
SKStoreProductViewController *storeProductViewController = [[SKStoreProductViewController alloc] init];
[storeProductViewController setDelegate:self];
[storeProductViewController loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier : @"xxxxx"} completionBlock:^(BOOL result, NSError *error) {
if (error) {
NSLog(@"Error %@ with User Info %@.", error, [error userInfo]);
} else {
[self presentViewController:storeProductViewController animated:YES completion:nil];
}
}];
然后我像这样使用委托SKStoreProductViewControllerDelegate
:
- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController {
[self dismissViewControllerAnimated:YES completion:nil];
}
我也使用[button setExclusiveTouch:YES];
,因为客户有时会按产品的几个按钮。如果它是单一产品,也测试你是id。
我刚刚完成了同样的问题。测试应用程序时一切正常,但App Review团队拒绝我的应用程序显示警报视图,其中调用loadProductWithParameters
返回错误。
如果对loadProductWithParameters
的调用失败,我通过在Safari中启动App Store解决了这个问题。这在SKStoreProductViewController
不工作的极少数情况下提供了有用的后备。
SKStoreProductViewController *vc = [[SKStoreProductViewController alloc] init];
vc.delegate = self;
NSDictionary *parameters = @{ SKStoreProductParameterITunesItemIdentifier : someAppId };
[vc loadProductWithParameters:parameters completionBlock:^(BOOL result, NSError *error) {
if (result) {
[someController presentViewController:vc animated:YES completion:nil];
} else {
NSURL *appURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://itunes.apple.com/app/id%@?mt=8", someAppId]];
if ([[UIApplication sharedApplication] canOpenURL:appURL]) {
[[UIApplication sharedApplication] openURL:appURL];
} else {
// display the error in an alert
}
}
}];
我因为同样的原因(2次拒绝)而遭到拒绝,并且我发现我在没有Wi-Fi的情况下进行了这种精确的错误测试(在仅限Wi-Fi的设备上)。
所以我的想法是,Apple正在Wi-Fi设备上测试它(他们说他们正在Wi-Fi iPad上进行测试),他们已经禁用了Wi-Fi。如果在拒绝他们告诉你他们正在测试没有互联网访问但你需要在线之间阅读这将是很好的。
因此,如果您在没有互联网连接的情况下无法显示控制器,则需要显示相应的错误,例如“请检查您的互联网连接,然后重试”。
绝对不要显示返回给用户的错误的本地化描述。