【问题标题】:How to test IAP (in-app purchase) in iOS Simulator OR on the Device?如何在 iOS 模拟器或设备上测试 IAP(应用内购买)?
【发布时间】:2013-04-16 15:03:30
【问题描述】:

我按照 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 中的状态为“准备提交”
  • 应用程序和 plist 中的应用程序 ID 都是 com.mycompany.myapp。检查了两次。
  • IAP 使用 com.mycompany.myapp.productname(对请求使用完全相同的 ID)。
  • 在 ITC 中创建了一个测试用户帐户。
  • 尚未向 Apple 提交任何内容。
  • 我的 Mac 可以访问互联网。
  • 控制台或屏幕上没有其他消息。

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

一次我看到了一个 -didFailWithError: call to my delegate on the Device,但它再也没有出现过。我的代表不会在设备或模拟器上都被调用。我让它运行了几分钟没有任何反应。

iTunes Connect 给出了这个令人困惑的警告:

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

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

【问题讨论】:

  • 使用 Xcode 5.1,IAP 测试可以在模拟器中正常工作。

标签: iphone ios ipad in-app-purchase


【解决方案1】:

在当前版本的 Xcode 5.0 (5A1413) 中,应用内购买将无法在 iOS 模拟器中运行。

StoreKit(应用内购买)在模拟器中不起作用。 13962338

来源:Xcode 5.0 Release Notes > 已知问题 > iOS Simulator 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】:

在 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

不支持的框架包括:

External Accessory
Media Player
Message UI 
Event Kit
In UIKit, the UIVideoEditorController class
Store Kit

由于应用内购买需要 Store Kit 才能工作,并且模拟器不支持 Store Kit 框架,因此您无法在 iOS 模拟器中测试 IAP。

更多信息:iOS Simulator documentation

【讨论】:

  • developer.apple.com/library/ios/#documentation/… 声明:“Store Kit 可以在 iOS 模拟器中进行测试,托管内容下载除外。”
  • 在撰写此评论时,iOS 模拟器中不支持的框架列表中不再提及“Store Kit”。
  • @rpitting - 是的,但 IAP 仍然无法正常工作。我确信有两个苹果:一个为大众创造了惊人的硬件和软件,另一个由达斯维德控制的苹果讨厌开发人员并创造像 Xcode 这样的蹩脚的东西。
【解决方案3】:

很遗憾,有几件事您无法在模拟器上进行测试。 In App Purchases 属于该列表。

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

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

【讨论】:

  • 现在编辑我的问题,因为我在设备上也没有接到任何代表电话。
【解决方案4】:

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

重要提示:

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

苹果tutorial here

【讨论】:

    【解决方案5】:

    【讨论】:

    【解决方案6】:

    我想通了:

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

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-23
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        相关资源
        最近更新 更多