我一直在努力添加应用内购买,并且能够使用Store Kit创建和测试应用内购买(是的!)。在测试过程中,我运用我的应用程序导致应用程序在购买过程中崩溃(所以我猜接收paymentQueue的正常循环:updatedTransactions并调用finishTransaction被中断)。
现在我无法成功完成任何交易,而是在调用paymentQueue:updatedTransactions时只获得transactionState SKPaymentTransactionStateFailed的交易。
transaction.error.code是-1003,而transaction.error.localizedDescription是“无法连接到iTunes Store”!
我尝试从iTunesConnect中移除所有产品,并使用不同的标识符重建它们,但这没有帮助。我也尝试使用App Store应用程序真正连接到真正的App Store并下载一些应用程序,以便我有连接。最后,我访问了“设置:商店”应用,以确保我已退出正常的应用商店帐户。
答案 0 :(得分:40)
我有类似的情况,并倾倒iPhone的网络流量,看看发生了什么。我发现联系了普通商店而不是沙箱。它有助于从设备中删除应用程序,清理并再次构建/安装它。显然,开发资料中的某些内容出错了。
更新:要转储非越狱iPhone的网络流量,只需在Mac上使用互联网共享,并将iPhone配置为使用Mac的WiFi。然后Mac上的tcpdump -n -i en1
就可以了。
答案 1 :(得分:25)
如果您收到错误0“无法连接到iTunes Store”(我意识到这不是OP询问的错误-1003,但是网络搜索错误0也导致此处),这可能是由两个引起的可能的问题:
-[SKPaymentQueue addPayment:]
后不久您将收到错误0。要解决问题#1,请传入正确的产品ID。要修复问题#2,请在iTunes Connect上创建一个新的测试用户,并可选择删除旧的测试用户。
答案 2 :(得分:15)
我有一个类似的问题,使用Code = 0获得“无法连接到iTunes Store”。这是我解决它的方法,在尝试互联网上发现的所有其他仪式性建议后,重新下载我的证书,重置我的所有设备设置,以牺牲处女黑山羊:
在应用程序的目标摘要中,我曾经在“构建”字段中显示我的版本号,但在“版本”字段中没有任何内容。这对我来说似乎很奇怪,所以我将版本号从“build”移到了“version”。这导致了上述错误。将版本号移回“build”解决了错误。
答案 3 :(得分:14)
为您的应用添加新的测试用户。
答案 4 :(得分:11)
确保在“设置”中设置了正确的日期和时间。否则它无法与商店进行SSL联系!!
答案 5 :(得分:6)
我遇到了同样的错误,在阅读developer forums上的一些帖子后,我重置了设备上的设置(设置 - >常规 - >重置 - >重置所有设置),清除了它了。它似乎很激烈,但它确实有效。
答案 6 :(得分:2)
我有同样的错误似乎突然冒出来(有一天工作正常,但第二天它给了我这些错误大约每3次中有2次我尝试测试我的应用内购买)
然后我访问了App Store(当试图进行另一次真正的购买时),并意识到他们有一个他们希望我验证的新用户协议。在我这样做之后,当我回到我自己的应用程序并再次尝试购买测试时,它工作正常并且从那以后没有任何错误。所以我怀疑我收到了错误,因为他们希望我验证新的用户协议。
现在我唯一想知道的是,我的应用内购买是否有办法将该提示转发给我的用户,而不是给他们一个神秘的错误?
答案 7 :(得分:1)
在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
,否则error属性是未定义的。您的应用程序可以读取错误属性以确定事务失败的原因。
所以, transaction.error.localizedDescription是“无法连接到iTunes Store”!是一般错误消息..我在测试InApp购买时也会定期收到此错误消息。
你可以做的一些提示是,
使用SKProductsRequest
从应用商店中检索所有产品,并检查其response.products
是否包含您请求的productIdentifier
。
这个用途,
SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:[objProducts allKeys]]];
//pass product identifier array as argument
[request start];
Catch响应:
- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response{
NSArray *myProduct = response.products;
}
这样您就可以决定是否可以与应用商店进行沟通。并且您的产品ID就在那里。
感谢
答案 8 :(得分:1)
对我有用的是从测试设备卸载我的应用程序,然后从Xcode安装一个新的副本。
答案 9 :(得分:0)
无法连接到iTunes Store
“无法连接到iTunes Store”问题可能是由于以下一个或多个原因引起的:
- 沙箱可能无法访问。
- 您的应用没有捆绑版本(CFBundleVersion)。有关更多信息,请参阅设置版本号和构建字符串。
- 您的应用正在模拟器中运行,该模拟器不支持应用内购买。
- 您正在尝试购买无法销售的产品。有关详细信息,请参阅在App Store中查询产品信息以获取产品信息。
在我的情况下,发生错误是因为我使用的是Xcode模拟器。它在我使用我的设备时开始工作。
即使在In-App Purchase Programming Guide中说使用开发iOS设备也有建议的测试步骤。
答案 10 :(得分:0)
我摆弄着去App Store,然后回到设置/商店退出。我这样做了3次,每次都重新访问我的应用程序并添加调试NSLog输出,现在我能够继续测试我的应用内购买代码而没有错误-1003。我不确定再次工作的确切原因,但我相当肯定的是我的代码更改不是因为我所做的只是添加NSLog并重新运行我的应用程序。
答案 11 :(得分:0)
就我而言, 我尝试了互联网上的所有内容,但没有任何效果。
苹果实际上打破了生产支付系统和沙盒。我只需要等两天,它就开始起作用了。答案 12 :(得分:0)
我被困了2天,这是我的解决方案:
我认为重要的是沙盒测试程序帐户,之前我没有使用它,因为我总是得到错误-0。
答案 13 :(得分:0)
我尝试了线程中提供的每个解决方案,但无济于事。在我的情况下,我有一个通配符包标识符,其名称与我在为应用内购买配置文件创建包标识符时使用的域名相同。
以下是我修复问题的方法,可以帮助您修复问题(参阅附件):
1)将iPhone连接到Mac。
2)在“设备”下(在Xcode>窗口菜单>管理器窗口中),选择iPhone的“配置配置文件”选项。您将看到当前所有配置文件都位于您的iPhone上。
3)小心删除所有配置文件,从包标识符(com.MYDOMAIN。*)中的特定域名开始,特别是那些使用通配符的配置文件,除了您专门创建的具有应用程序功能的通配符购买(com.MYDOMAIN.inappidentifier)。
4)重新安装应用程序,并使用全新的iTunes连接测试用户(沙盒)
测试您的实施截图:
答案 14 :(得分:0)
只需注销您的iTunes帐户(现在不要登录您的测试帐户!),然后启动您的计划。在购买时,询问您的登录详细信息,您必须输入您的测试帐户信息。
答案 15 :(得分:0)
我有两个问题导致了这个问题:
1)我从一个不同的(工作)应用程序复制了IAP代码,但错过了设置我的观察者:
observer = [[IAPHelper alloc] init]; [[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
2)我在设备的设置中登录了iTunes。您只能在沙箱中使用测试用户 - 我已退出并再次运行。
答案 16 :(得分:0)
我们的问题是在Itunes Connect中我们有错误的包标识符。有人已经预先创建了应用程序,我们必须编辑应用程序并将其appId设置为新应用程序。
答案 17 :(得分:0)
不幸的是,我遇到了一个未在此处记录的问题。在您接受与app-和app-purcheses相关的所有合同之前,In-App-Purches将无效。因此,请确保您(或您的客户)正确地在iTunesConnect中设置所有合同,他们必须出现在“合同生效”部分中,以使您的购买者工作。
答案 18 :(得分:0)
我在XCode中清理了所有目标并手动删除了我的设备上的应用程序,然后从XCode构建并运行它修复了类似的问题(相同的错误消息,但错误代码不同:-1009)
答案 19 :(得分:0)
是的,如果您最初将iPad / iPhone连接到另一台计算机,并且现在正在另一台计算机上使用它,那么您必须在iPad上退出商店,使用普通帐户登录MAC上的iTunes ,然后同步。
另外,请确保您的iPad“WIFI”已开启......