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

ope*_*rog 21 iphone in-app-purchase ipad ios

我按照Ray Wenderlich教程书实现了一个简单的非消费类应用内购买机制.

当我的应用开始时,我发起了产品信息请求:

self.productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
_productsRequest.delegate = self;
[_productsRequest start];
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

我检了两次:

  • 应用程序在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提供了这个令人困惑的警告:

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

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

yoo*_*ood 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

  • 您可以在 Xcode 5.1+ 的模拟器中测试 StoreKit。 (2认同)

Ash*_*bay 14

在iOS模拟器文档中,它写成:

API限制

在iOS模拟器中,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
Run Code Online (Sandbox Code Playgroud)

不受支持的框架包括:

External Accessory
Media Player
Message UI 
Event Kit
In UIKit, the UIVideoEditorController class
Store Kit
Run Code Online (Sandbox Code Playgroud)

由于应用程序内购买需要Store Kit才能运行且Store Kit框架不支持Simulator,因此无法在iOS模拟器中测试IAP.

更多信息:iOS模拟器文档

  • @rpitting - 是的,但IAP仍然无法正常工作.我相信有两个苹果:一个为大众创造了惊人的硬件和软件,另一个苹果由Darth Vader控制,它讨厌开发人员并创造像Xcode这样糟糕的东西. (9认同)
  • http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/StoreKitGuide/DevelopingwithStoreKit/DevelopingwithStoreKit.html声明:"Store Kit*可以在iOS模拟器中测试,托管内容下载除外." (7认同)
  • 在撰写此评论时,在iOS模拟器中不受支持的框架列表中不再提及"Store Kit". (3认同)

Bar*_*rtu 8

不幸的是,有几件事你不能在模拟器上测试。应用内购买属于该列表。

所以你不能在模拟器中测试应用内购买,你需要一个 iOS 设备。

编辑:据我所知,当您尝试在模拟器上测试 IAP 时会发生这种情况,不会调用购买委托。


Zha*_*rik 7

2020 年更新:您现在可以在 Xcode 中测试应用内购买

重要的提醒:

在 iOS、watchOS 或 tvOS 应用程序中测试 StoreKit 需要在 macOS 10.15 或更高版本上运行 Xcode 12 或更高版本。在 macOS 应用程序中测试 StoreKit 需要在 macOS 11 或更高版本上运行 Xcode 12 或更高版本。

苹果教程看这里