如何在iOS模拟器或设备上测试IAP(应用程序内购买)?

时间:2013-04-16 15:03:31

标签: iphone ios ipad in-app-purchase

我按照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。检查了两次。
  • IAP使用com.mycompany.myapp.productname(对请求使用完全相同的ID)。
  • 在ITC中创建了一个测试用户帐户。
  • 还没有提交给Apple。
  • 我的Mac可以访问互联网。
  • 控制台或屏幕上没有其他消息。

Ray Wenderlich的书中没有提到除此之外我必须做任何其他事情。

只有一次我看到-didFailWithError:在设备上调用我的委托,但它再也没有出现过。我的代表在设备或模拟器上都没有被调用。我让它运行几分钟而没有任何反应。

iTunes Connect提供了这个令人困惑的警告:

  

您的首次应用内购买必须与新应用一起提交   版。从版本的应用程序内购买部分中选择它们   单击详细信息页面,然后单击准备上载二进制文件。

在能够测试应用程序内购买之前是否需要这样做?

7 个答案:

答案 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。

更多信息:iOS Simulator documentation

答案 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 或更高版本。

苹果tutorial here

答案 4 :(得分:0)

我想出了一些东西:

我在AppDelegate的-didFinishLaunching结束时立即启动了SKProductRequest 并且它从未奏效。

然后我拨打了一个电话,等了3秒钟。从那时起,它开始工作。 因此,您无法在应用启动后立即发出StoreKit请求。

答案 5 :(得分:0)

您的skProductRequest对象在哪里声明? 尝试skProductRequest的全局声明。

答案 6 :(得分:0)