我试图为我的应用程序添加应用内购买功能,遵循这里描述的技术:
我已通过itunes connect添加了一个产品,其ID设置如下:
com.mycompany.myapp.myproduct1
Bundle id指定了应用程序的唯一标识符,可以在应用程序的p-list文件和应用商店中找到。它的格式如下:
com.mycompany.myapp
我正在使用教程中的帮助类IAHelper来处理购买功能(相关代码如下所示)。它还有一个子类,主要用于向IAHelper的产品ID数组添加应用内产品的ID。
为了测试代码,我创建了一个名为“show products”的按钮,调用这个方法:
- (IBAction) showProducts {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(productsLoaded:) name:kProductsLoadedNotification object:nil];
Reachability *reach = [Reachability reachabilityForInternetConnection];
NetworkStatus netStatus = [reach currentReachabilityStatus];
if (netStatus == NotReachable) {
NSLog(@"No internet connection!");
} else {
if ([InAppMyAppAPHelper sharedHelper].products == nil) {
// here's where it calls the helper class method to request the products
[[InAppMyAppAPHelper sharedHelper] requestProducts];
self.hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
_hud.labelText = @"Loading vocabulary...";
[self performSelector:@selector(timeout:) withObject:nil afterDelay:30.0];
}
}
}
这是从iTunesConnect请求产品的方法,如上所述:
- (void)requestProducts {
self.request = [[[SKProductsRequest alloc] initWithProductIdentifiers:_productIdentifiers] autorelease];
_request.delegate = self;
[_request start];
}
(请注意,以“_”为前缀的变量是指在多个合成语句中去掉下划线后与同名的实际变量)
最后,在IAHelper中接收到响应时会调用以下方法:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSLog(@"IAHelper, received products results...");
self.products = response.products;
self.request = nil;
// Here's the loop to list the products received
for (id product in _products){
NSLog(@"IAHelper, received product is: %@", product);
}
[[NSNotificationCenter defaultCenter] postNotificationName:kProductsLoadedNotification object:_products];
}
在上述代码中,日志语句显示方法已被调用,但打印接收到的产品的循环没有列出任何内容。因此看起来它没有在iTunes Connect中找到产品。然而,我已经在那里设置了一个产品,并且产品的ID与包ID相同,再加上产品标识符。
bundle id: com.mycompany.myapp
product id: com.mycompany.myapp.product1
我已经检查了好几次。
我注意到iTunes将广告插件产品的状态列为“准备提交”。 我是否需要额外采取步骤使其可用?
总体而言,我做错了什么?