iPhone In-App Purchase Store Kit 错误 -1003“无法连接到 iTunes Store”

Posted

技术标签:

【中文标题】iPhone In-App Purchase Store Kit 错误 -1003“无法连接到 iTunes Store”【英文标题】:iPhone In-App Purchase Store Kit error -1003 "Cannot connect to iTunes Store" 【发布时间】:2009-11-11 20:02:35 【问题描述】:

我一直致力于添加应用内购买,并且能够使用 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 应用程序,以确保我退出了我的普通应用程序商店帐户。

【问题讨论】:

您找到解决问题的方法了吗?我最近遇到了这个问题,在沙盒服务器出现故障之前,商店在我的 iPad 上运行。再次上线后,就不再使用了。然后,我将 iPad 项目中使用的相同代码复制到 iPhone 项目项目中,并用两个不同的 iphone 对其进行了测试,并且它在那里工作。但它似乎不再适用于 iPad 应用程序。怎么了? “无法连接到 iTunes Store”错误消息似乎是通用的,用于在使用 StoreKit 时用于各种不同的网络相关错误代码。具体代码-1003是kCFURLErrorCannotFindHost定义在CFNetworkErrors.h中。 我遇到了同样的问题,但不幸的是第二次确认购买,知道吗??? 【参考方案1】:

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

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

【讨论】:

很好,我不得不删除该应用程序,并清理项目以使其正常工作 在收到 -1003 错误后,我不得不求助于网络共享和 tcpdump。看起来 StoreKit 正在对 p40-sandbox.itunes.apple.com. 进行 DNS 查询,但得到了 NXDOMAIN (即没有该名称的 DNS 条目)。所以在我的特殊情况下,这看起来像是苹果的错..... 我按照苹果的指南实施应用内购买,当我尝试购买东西时,我收到错误代码 3 和描述无法连接到 iTunes Store。我试图从手机中转储网络,手机似乎正确连接到沙盒。我还尝试添加一个新用户,然后我退出了商店。我什至没有进入我的测试用户的屏幕......只是上面的错误。 我的 IAP 实施完美无缺,但不知何故,在我很久没有使用的一些旧设备上进行测试时,我没有收到任何产品。除了上述之外,我还必须删除所有配置文件(设置 -> 常规 -> 配置文件)。在此和一个干净的构建之后,一切都恢复正常了。【参考方案2】:

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

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

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

【讨论】:

对问题和解决方案的清晰、简洁的描述。在花了上帝知道多长时间试图解决这个问题之后,真的得到了帮助。谢谢! 创建一个新的测试用户修复它。谢谢! 非常感谢@Adam!我也遇到了同样的错误。您的第 2 点解决了我的问题! 仅供参考,我也遇到了同样的问题,并且建议的原因都不存在。我确实得到了确认对话框,并且失败发生在对此的响应中......【参考方案3】:

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

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

【讨论】:

我在构建字段中也有版本,但它没有帮助。您可能同时做了其他事情。 我非常感谢您发布此修复程序。我尝试了所有其他修复。结果将“构建”留空导致了它。谢谢!这实际上是错误代码:0 我疯了,解决方案完全出乎意料。你救了我至少 24 小时的生命!谢谢 非常感谢您发布此消息!我也收到错误代码 0,其他建议都没有帮助。 在开玩笑。这实际上有效并解决了 24 小时的挫败感。从字面上看,我离四处寻找一只黑山羊还有很短的时间,而问题是像空白的构建领域一样愚蠢!谢谢 thomax x10000!【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

这正是我的问题。谢谢!【参考方案6】:

我遇到了同样的错误,在阅读了developer forums 上的一些线程后,我重置了设备上的设置(设置->常规->重置->重置所有设置),这将其清除。这看起来很激烈,但确实有效。

【讨论】:

从那以后我不得不再做几次。我还尝试了“重置网络设置”,我希望这也能解决问题,但破坏性较小,但没有奏效。 这在 ios5 下真的很糟糕,因为它基本上将其设置为新 iPad 并强制您从备份安装。【参考方案7】:

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

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

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

【讨论】:

【参考方案8】:

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

【讨论】:

从设备上卸载并重新安装也对我有用。【参考方案9】:

SKPaymentTransactionState 告诉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”! 是一般错误消息。我在测试应用内购买时也经常收到此错误消息。

你可以做的一些提示是,

    使用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 在那里。

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

谢谢

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

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

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

【讨论】:

【参考方案12】:

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

【讨论】:

【参考方案13】:

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

【讨论】:

【参考方案14】:

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

【讨论】:

【参考方案15】:

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

1) 我从另一个(正在运行的)应用复制了 IAP 代码,但没有设置我的观察者:

观察者 = [[IAPHelper alloc] init]; [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];

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

【讨论】:

【参考方案16】:

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

【讨论】:

【参考方案17】:

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

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

1) 将您的 iPhone 连接到 Mac。

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

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

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

屏幕截图:

【讨论】:

【参考方案18】:

我已经卡了 2 天,这是我的解决方案:

    移除所有应用内商品。 移除新的应用内商品。 创建沙盒测试器。 从设备 (iPad) 上注销我的 Apple 帐户,然后尝试购买产品。 它将要求登录,然后使用沙盒测试员帐户重新登录。 购买成功。

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

【讨论】:

【参考方案19】:

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

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

【讨论】:

【参考方案20】:

In-App Purchase FAQ 说:

无法连接到 iTunes Store

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

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

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

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

【讨论】:

以上是关于iPhone In-App Purchase Store Kit 错误 -1003“无法连接到 iTunes Store”的主要内容,如果未能解决你的问题,请参考以下文章

About In-App Purchase - 关于应用程序内购买

iOS 14 In-App Purchase 请求登录/验证两次

Android In-App Purchase 离线检查买家

我被迫使用Apple In-App Purchase API

iOS的in-app purchase C#服务器二次验证实现

如何将 fortumo In-App purchase 插件集成到 Corona Sdk 游戏中?