我按照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;
}
我检了两次:
Ray Wenderlich的书中没有提到除此之外我必须做任何其他事情。
只有一次我看到-didFailWithError:在设备上调用我的委托,但它再也没有出现过。我的代表在设备或模拟器上都没有被调用。我让它运行几分钟而没有任何反应。
iTunes Connect提供了这个令人困惑的警告:
您的首次应用内购买必须与新应用一起提交 版。从版本的应用程序内购买部分中选择它们 单击详细信息页面,然后单击准备上载二进制文件。
在能够测试应用程序内购买之前是否需要这样做?
答案 0 :(得分:23)
在当前版本的Xcode 5.0(5A1413)中,应用程序内购买将无法在iOS模拟器中使用。
StoreKit(应用程序内购买)在模拟器中不起作用。 13962338
来源:Xcode 5.0发行说明>已知问题> iOS模拟器https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/xc5_release_notes/xc5_release_notes.html#//apple_ref/doc/uid/TP40001051-CH2-SW303
答案 1 :(得分:13)
在iOS模拟器文档中写道:
API限制
在iOS模拟器中,API和API存在一些限制 功能,包括:
Apple Push Services Privacy alerts for access to Photos, Contacts, Calendar, and Reminders The UIBackgroundModes key iCloud document syncing and key-value storage support
不受支持的框架包括:
External Accessory Media Player Message UI Event Kit In UIKit, the UIVideoEditorController class Store Kit
由于应用内购买需要Store Kit才能运行且Store Kit框架不支持Simulator,因此无法在iOS模拟器中测试IAP。
答案 2 :(得分:4)
不幸的是,有些事情你无法在模拟器上测试。在App Purchase中属于该列表。
因此,您无法在模拟器中测试In App Purchases,您需要一台iOS设备。
编辑:据我所知,当您尝试在模拟器上测试IAP时会发生这种情况,购买代理将不会被调用。
答案 3 :(得分:2)
2020 年更新:您现在可以在 Xcode 中测试应用内购买
重要通知:
<块引用>在 iOS、watchOS 或 tvOS 应用程序中测试 StoreKit 需要 Xcode 12 或 稍后在 macOS 10.15 或更高版本上运行。在 macOS 应用程序中测试 StoreKit 需要在 macOS 11 或更高版本上运行 Xcode 12 或更高版本。
答案 4 :(得分:0)
我想出了一些东西:
我在AppDelegate的-didFinishLaunching结束时立即启动了SKProductRequest 并且它从未奏效。
然后我拨打了一个电话,等了3秒钟。从那时起,它开始工作。 因此,您无法在应用启动后立即发出StoreKit请求。
答案 5 :(得分:0)
您的skProductRequest对象在哪里声明? 尝试skProductRequest的全局声明。
答案 6 :(得分:0)