我按照 Ray Wenderlich 的教程书,实现了一个简单的非消耗性应用内购买机制。
当我的应用程序启动时,我发起产品信息请求:
self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
_productsRequest.delegate = self;
[_productsRequest start];
创建了SKProductRequest。它有一个内存地址,但是没有其他操作发生。没有调用任何委托方法:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
NSLog(@"Product info received...");
NSArray *products = response.products;
for (SKProduct *product in products) {
NSLog(@"ID: %@, title:%@, (%f)", product.productIdentifier, product.localizedTitle, product.price.floatValue);
}
self.productsRequest = nil;
}
- (void)request:(SKRequest *)request didFailWithError:(NSError *)error {
NSLog(@"Failed to load list of products");
self.productsRequest = nil;
}
我检查了两次:
- 在iTunes Connect中完全设置了应用程序。
- 应用程序在ITC中的状态为“准备上传”
- 添加了一个非消耗性IAP。
- IAP产品在ITC中的状态是“准备提交”
- 应用程序ID为com.mycompany.myapp,包括应用程序和plist文件。检查了两次。
- 使用com.mycompany.myapp.productname的IAP(使用相同的ID进行请求)。
- 在ITC中创建了一个测试用户帐户。
- 尚未向苹果提交任何内容。
- 我的Mac已连接到互联网。
- 控制台或屏幕上没有其他消息。
Ray Wenderlich的书中没有提到我除此之外还必须做什么。
只有一次,我在设备上看到了一个-didFailWithError:委托调用,但它再也没有出现过。我的委托无论在设备上还是在模拟器上都不会被调用。我让它运行了数分钟,没有任何响应。
iTunes Connect显示以下混淆警告:
您的第一个应用内购买必须与新应用程序版本一起提交。从版本详细信息页面的应用内购买部分中选择它们,然后单击“准备上传二进制文件”。
在能够测试应用内购买之前,是否需要这样做?