我按照 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。
- ITC 中 IAP 产品的状态为“准备提交”
- 应用程序和 plist 中的应用程序 ID 都是 com.mycompany.myapp。检查了两次。
- IAP 使用 com.mycompany.myapp.productname(对请求使用完全相同的 ID)。
- 在 ITC 中创建了一个测试用户帐户。
- 尚未向 Apple 提交任何内容。
- 我的 Mac 可以访问互联网。
- 控制台或屏幕上没有其他消息。
Ray Wenderlich 的书没有提到除此之外我必须做任何其他事情。
只有一次我看到 -didFailWithError: 在设备上调用我的委托,但它再也没有出现。我的代表不会在设备或模拟器上都被调用。我让它运行了几分钟,根本没有任何反应。
iTunes Connect 给出了这个令人困惑的警告:
您的第一个应用内购买必须与新的应用版本一起提交。从版本详细信息页面的应用内购买部分选择它们,然后单击准备上传二进制文件。
在能够测试应用内购买之前是否需要这样做?