46

我一直致力于添加应用内购买,并且能够使用 Store Kit 创建和测试应用内购买(耶!)。在测试期间,我以一种导致应用程序在购买过程中崩溃的方式锻炼了我的应用程序(所以我猜想接收 paymentQueue:updatedTransactions 和调用 finishTransaction 的正常周期被中断了)。

现在我无法成功完成任何交易,而是在调用 paymentQueue:updatedTransactions 时只获得带有 transactionState SKPaymentTransactionStateFailed 的交易。

transaction.error.code 为 -1003,transaction.error.localizedDescription 为“无法连接到 iTunes Store”!

我尝试从 iTunesConnect 中删除所有产品,并使用不同的标识符重新构建它们,但这并没有帮助。我还尝试使用 App Store 应用程序真正连接到真正的 App Store 并下载一些应用程序,这样我就可以连接。最后,我访问了 Settings:Store 应用程序,以确保我已退出正常的应用程序商店帐户。

4

20 回答 20

40

我也遇到过类似的情况,于是倾倒了 iPhone 的网络流量,看看发生了什么。我发现联系的是普通商店而不是沙盒。它有助于从设备中删除应用程序,清理并再次构建/安装它。显然,开发配置文件出现了问题。

更新:要转储未越狱 iPhone 的网络流量,只需在 Mac 上使用 Internet 共享并将 iPhone 配置为使用 Mac 的 WiFi。然后tcpdump -n -i en1在你的 Mac 上就可以了。

于 2011-01-23T13:11:34.293 回答
26

如果您收到错误 0“无法连接到 iTunes Store”(我意识到这不是 OP 询问的错误 -1003,但在这里也可以通过网络搜索错误 0),这可能是由两个可能的问题引起的:

  1. 您传入了错误的产品标识符。如果是这种情况,那么您将在调用 后不久收到错误 0,然后您会收到-[SKPaymentQueue addPayment:]要求您确认付款的弹出窗口。
  2. 您的测试用户已失效。如果您不小心使用测试用户登录 App Store,就会发生这种情况。发生这种情况时,您在输入密码以确认付款后会收到错误 0。

要解决问题 #1,请输入正确的产品 ID。要解决问题 #2,请在 iTunes Connect 上创建一个新的测试用户,并可选择删除旧的测试用户。

于 2011-08-24T14:41:20.670 回答
15

我有一个类似的问题,代码 = 0 时出现“无法连接到 iTunes Store”。这就是我解决它的方法,在尝试了互联网上的所有其他仪式性建议后,从重新下载我的证书到重置我的所有设备设置到牺牲一只处女黑山羊:

在应用程序的目标摘要中,我曾经在“构建”字段中有我的版本号,但在“版本”字段中没有。这对我来说似乎很奇怪,所以我将版本号从“build”移到了“version”。这导致了上述错误。将版本号移回“构建”解决了该错误。

于 2011-09-24T19:02:39.350 回答
14

为您的应用添加新的测试用户。

于 2011-01-01T02:47:23.053 回答
11

确保您在“设置”中设置了正确的日期和时间。否则无法与商店建立 SSL 连接!!

于 2011-06-14T13:20:15.433 回答
6

我遇到了同样的错误,在阅读了开发者论坛上的一些帖子后,我重置了设备上的设置(设置->常规->重置->重置所有设置),这将其清除。这看起来很激烈,但它奏效了。

于 2011-07-01T20:06:46.027 回答
2

我遇到了同样的错误,似乎不知从何而来(一天工作正常,但第二天我尝试测试我的应用内购买时,每 3 次就有 2 次出现这些错误)。

然后我访问了 App Store(尝试进行另一次真正的购买时),并意识到他们有一份新的用户协议,他们希望我验证。在我这样做之后,当我回到我自己的应用程序并再次尝试测试购买时,它工作正常并且从那以后没有任何错误。所以我怀疑我收到错误是因为他们希望我验证新的用户协议。

现在我唯一想知道的是,我的应用内购买是否有办法将该提示转发给我的用户,而不是给他们一个神秘的错误?

于 2010-10-01T04:26:44.110 回答
1

对我有用的是从测试设备上卸载我的应用程序,然后从 Xcode 安装一个新副本。

于 2011-09-08T19:27:01.403 回答
1

InSKPaymentTransactionState告诉SKPaymentTransactionStateFailed在您的请求被添加到服务器队列之前。

@class SKPayment;

enum {
    SKPaymentTransactionStatePurchasing,    // Transaction is being added to the server queue.
    SKPaymentTransactionStatePurchased,     // Transaction is in queue, user has been charged.  Client should complete the transaction.
    SKPaymentTransactionStateFailed,        // Transaction was cancelled or failed before being added to the server queue.
    SKPaymentTransactionStateRestored       // Transaction was restored from user's purchase history.  Client should complete the transaction.
};
typedef NSInteger SKPaymentTransactionState;

SKPaymentTransaction类参考错误讨论中说:

错误属性未定义,除非 transactionState 设置为SKPaymentTransactionStateFailed。您的应用程序可以读取错误属性以确定事务失败的原因。

所以,transaction.error.localizedDescription 是“无法连接到 iTunes Store”!是一般错误消息。在测试我的 InApp 购买时,我也经常收到此错误消息。

你可以做的一些提示是,

  1. 使用从应用商店检索所有产品SKProductsRequest并检查其是否response.products包含您的请求productIdentifier。对于这种用途,

    SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:[objProducts allKeys]]];
    //pass product identifier array as argument
    [request start];  
    

并捕获响应:

    - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
        NSArray *myProduct = response.products;
}

这样您就可以决定是否可以与应用商店进行交流。并且您的产品 ID 在那里。

  1. 确保您使用应用内测试用户帐户进行测试。
  2. 并且您使用您在应用内购买中配置的相同应用 ID 配置。

谢谢

于 2011-01-25T09:55:38.770 回答
0

我们的问题是在 Itunes Connect 中我们有错误的包标识符。有人事先创建了该应用程序,我们必须编辑该应用程序并将其 appId 设置为新的。

于 2013-02-22T23:40:11.567 回答
0

我有两个问题导致了这个:

1)我从另一个(工作)应用程序复制了 IAP 代码,但错过了设置我的观察者:

观察者 = [[IAPHelper alloc] 初始化]; [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];

2) 我在设备的设置中登录了 iTunes。您只能在沙箱中使用测试用户 - 我退出了,它又可以工作了。

于 2014-10-18T10:44:20.333 回答
0

只需注销您的 iTunes 帐户(现在不要登录您的测试帐户!),然后启动您的程序。在应用内购买时,它会询问您的登录详细信息,您必须输入您的测试帐户信息。

于 2015-01-16T13:40:08.677 回答
0

我在这里尝试了线程中提供的所有解决方案,但无济于事。在我的例子中,我有一个通配符捆绑标识符,它以与我在为应用内购买配置文件创建捆绑标识符时使用的域名相同的域名开头。

以下是我解决问题的方法,可能会帮助您解决问题(见附件):

1) 将您的 iPhone 连接到 Mac。

2) 在“设备”下(在 Xcode > Window 菜单 > Organizer 窗口中)为您的 iPhone 选择“Provisioning Profiles”选项。您将看到当前驻留在 iPhone 上的所有配置文件。

3) 小心删除以捆绑标识符 (com.MYDOMAIN.*) 中的特定域名开头的所有配置文件,尤其是那些使用通配符的配置文件,除了您专门创建的能够进行应用内购买的配置文件(com .MYDOMAIN.inappidentifier)。

4) 重新安装应用程序并使用新的 iTunes 连接测试用户(沙盒)测试您的实现

截屏:

在此处输入图像描述

于 2015-01-17T12:04:59.877 回答
0

是的,如果您最初将 iPad/iPhone 连接到另一台计算机,现在正在另一台计算机上使用它,您绝对必须在 iPad 上退出商店,在 MAC 上使用普通帐户登录 iTunes,然后同步.

另外,请确保您的 iPad“WIFI”已打开...

于 2010-05-05T20:29:40.213 回答
0

我摆弄着去 App Store,然后回到设置/商店退出。我这样做了 3 次,每次都重新访问我的应用程序并添加调试 NSLog 输出,现在我可以继续测试我的应用程序内购买代码,而不会出现错误 -1003。我不确定再次工作的确切原因,但我相当肯定这不是我的代码更改,因为我所做的只是添加 NSLogs 并重新运行我的应用程序。

于 2009-11-11T20:52:26.990 回答
0

我在 XCode 中清理了所有目标并从我的设备上手动删除了应用程序,然后从 XCode 构建并运行它修复了类似的问题(相同的错误消息但不同的错误代码:-1009)

于 2011-02-16T14:50:32.320 回答
0

不幸的是,我遇到了这里没有记录的问题。在您接受与应用内购买和应用内购买相关的所有合同之前,应用内购买将不起作用。因此,请确保您(或您的客户)在 iTunesConnect 中正确设置了所有合同,它们必须出现在“合同生效”部分才能使您的购买生效。

于 2012-11-12T11:49:42.717 回答
0

就我而言,我在互联网上尝试了所有方法,但没有任何效果。

苹果实际上破坏了生产支付系统和沙盒。我只需要等待两天,它就开始起作用了。

于 2017-04-01T07:15:17.163 回答
0

应用内购买常见问题解答说:

无法连接到 iTunes Store

“无法连接到 iTunes Store”问题可能是由于以下一种或多种原因造成的:

  • 沙盒可能无法访问。
  • 您的应用没有捆绑版本 (CFBundleVersion)。有关详细信息,请参阅设置版本号和构建字符串。
  • 您的应用在模拟器中运行,不支持应用内购买。
  • 您正在尝试购买无法出售的产品。请参阅查询 App Store 以获取产品信息,然后再呈现应用的商店 UI 以获取更多信息。

就我而言,发生错误是因为我使用的是 Xcode 模拟器。当我使用我的设备时它开始工作。

甚至在In-App Purchase Programming Guide中说使用开发 iOS 设备有一个建议的测试步骤

于 2018-02-01T02:09:20.823 回答
0

我被困了2天,这是我的解决方案:

  1. 删除所有应用内产品。
  2. 删除新的应用内产品。
  3. 创建沙盒测试器。
  4. 从设备 (iPad) 上注销我的 Apple 帐户,然后尝试购买该产品。
  5. 它将要求登录,然后使用沙盒测试员帐户重新登录。
  6. 购买通过。

我认为重要的是沙盒测试员帐户,我以前没有使用过它,因为我总是得到error-0。

于 2015-12-30T15:14:43.390 回答