StoreKit中的应用内购买无效产品标识符

88

我从SKProductsRequest中获得了一个空的产品标识符数组。

我已经完成以下步骤:

  1. 在iTunes Connect的“管理用户”下创建了一个应用内购买测试用户帐户

  2. 在“管理您的应用内购买”下创建了一些应用内购买产品。

  3. 将应用加载到iPhone上,进入“设置”→“商店”,并注销常规商店

  4. (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response回调中设置了断点

所有提交的产品ID都在响应的invalidProductIdentifiers属性中。在提交请求时,我尝试了步骤2中创建的产品ID以及那些以包ID为前缀的ID。

谢谢,

Raghu


我想添加类似于@masone的内容,我认为我的应用内购买初始问题与客户未完成付费应用程序合同有关。 - james_womack
请查看我的回答:https://dev59.com/S3NA5IYBdhLWcg3wPLP- - Wayne Lo
2
我简直不敢相信这会发生在我身上,但我的问题是我使用了参考名称而不是产品ID!我真是太蠢了! - Mona
@Mona,你能给出一些例子来帮助其他人理解吗? - Joshua Pinter
16个回答

176

我尝试了苹果论坛和这里提供的所有方法,但仍然无法使它工作。

找到解决方案:

您的应用程序需要通过Xcode传输才能启用沙箱。

您的应用程序需要由Xcode本地构建和安装,而不是从应用商店下载。不要

很明显,对吧?但是,如果您正在更新现有应用程序,设备仍将将其视为从应用商店安装的应用程序。

因此,请从您的设备中删除该应用程序。然后使用Build&Run将应用程序安装回设备,将其连接到Mac。现在应该可以正常工作:)


19
我想创建10个新账户并给这个帖子投10次赞。 - phi
9
有人应该给这个人颁发奖章。 - suda
2
天啊,我简直不敢相信自己有多蠢。五个月过去了,我竟然忘记了这个答案。再次谷歌搜索并再次来到这里。我感觉就像《海底总动员》中的多莉一样。Hector,你是我的英雄。 - PEZ
5
请问,您所说的“通过Xcode转移应用程序”的意思是什么?是指需要将应用程序重新上传到设备或AppStore吗?我创建了一个带有应用内购买项目的占位符,但该应用程序还没有准备好上传到AppStore。我一直收到无效的产品ID提示。我正在使用调试版本。 - Nava Carmon
4
是的,我认为那枚奖牌需要。 - James Dunay
显示剩余13条评论

70

5
你尝试过从设备中删除该应用并重新安装吗?你解决了我的问题!谢谢。 - Piotr Czapla
非常感谢提供的列表!找到了原因:设备越狱了:( - Damian
1
哇,你是特洛伊·布兰特!感谢你的博客文章。在我过去的24小时里,你几乎成为了地球上最著名的人物...尽管90%的用户评论在博客文章中都是荒谬错误的。 - Dan Rosenstark
很好,你在博客上写了这个而不是在这里。因为你的博客现在已经消失了。;-) - Houman
当单击链接时,出现“您的PHP安装似乎缺少WordPress所需的MySQL扩展”。 - Justin Hammond
网络存档链接:https://web.archive.org/web/20160716214137/http://troybrant.net/blog/2010/01/invalid-product-ids请返回已翻译的文本。 - DPR

43

为了接收配置的应用内购买数据,必须生效付费应用程序的合同。

这对我有用。我遇到了完全相同的问题。


我该怎么做? - csomakk
2
是的,我必须进入iTunes Connect -> 协议 -> 付费应用程序。 - csomakk

21
我是其中的受害者之一,不过我曾经是。 昨天,我遇到了问题,并且修改了很多步骤。 今天,我从troybrant那里审核了所有清单。
  1. 好吧,我的错误。我忘记创建适当的分发配置文件:fixed

  2. 上传一个二进制文件并立即拒绝:他们说这比不上传要好

  3. 好的,另一个修复:从Xcode的所有位置中删除域名之前的10个数字(XXXXXXXXXX.com.company.app变为com.company.app)

仍然不能工作。

  1. 检查我的设备是否已连接到iTunes帐户。

  2. 每次进行干净的构建并有时从设备中删除应用程序

仍然不能工作。

  1. 最后,当请求产品时,我只使用了productID,而不是整个com.company.app.productID。

然后它就起作用了。

我认为有时我们会犯多个错误,当你纠正所有错误时,很难知道问题的确切原因。

现在我很高兴。


4
确认当其他方法均失败时,仅使用产品ID(步骤6)也对我起了作用。 - Steve N
1
第6步对我有用。 我使用了完整的com.company.x,所以一直在想为什么它不起作用。 - Cocoanut
哇!经过几天的调试,我终于找到了解决方案:之前我使用的是BundleID.ProductID格式,但它并不起作用。然后我删掉了Bundle ID,只使用Product ID,这样就可以了。遗憾的是,这个答案没有排在最前面。人们总是先尝试各种可能性,直到很晚才会看到这个答案。我真希望能够给它500个赞!让这个答案排到页面顶部。这将为大家节省数小时的头痛 :) - Saurabh Hooda
第六步对我有效。 - Ray
我觉得这里可能有些混淆,如果你将你的Bundle ID包含在你的产品ID中,那么它只是产品ID。 - Doug Mead
显示剩余5条评论

18
我们的问题来自于苹果FAQ中的最后一个要点,"为什么我的产品标识符会在invalidProductIdentifiers数组中返回?":
  • 您没有完成所有财务要求(请参见本文档的“合同、税收和银行信息”部分)。
  • 您没有使用明确的App ID。
  • 您没有使用与您的明确App ID相关联的配置文件。
  • 您没有在代码中使用正确的产品标识符。有关产品标识符的更多信息,请参见技术问答QA1329,“应用内购买产品标识符”。
  • 您没有在iTunes Connect中清除应用内购买产品的销售。
  • 您可能已经修改了您的产品,但这些更改尚未在所有App Store服务器上生效。
  • 如果您或App审核拒绝了您在iTunes Connect中的最新二进制文件。

我将最近被拒绝的版本更改为“等待上传”,方法是在iTunes Connect中点击“准备上传二进制文件”,大约10分钟后问题得到解决。


该常见问题解答在技术说明 TN2259 的当前版本中缺失 :/ - pkamb
1
但是相同的要点在“invalidproductidentifiers” API文档中也有列出!(https://developer.apple.com/documentation/storekit/skproductsresponse/1505985-invalidproductidentifiers) - pkamb
你没有完成所有的财务要求(请参阅本文档中的“合同、税收和银行信息”部分)。--> 这是我的问题。 - Shoaib Bagwan

13

看起来人们对产品ID感到困惑。

您不需要添加完整的域名(例如com.company.product.inappname)才能使应用内购买功能正常工作。

您必须使用在iTunes Connect上创建的确切产品ID。在我的情况下,我只创建了“Product1”,当调用SKProductsRequest时就会使用它,就这样。

没有更多的痛苦。

这个链接包含许多有用的信息,尽管缺少了这个小细节: http://troybrant.net/blog/2010/01/in-app-purchases-a-full-walkthrough/


产品 ID 是令人困惑的,对我来说也是个问题。因为愚蠢的错误浪费了时间。 - VijayKumar
1
非常有用的帖子和链接帮助了我,因为我需要创建开发配置文件,但我只有分发配置文件。 - GenRiH

2

2

1

你的应用内购买是否“可供销售”?这是我第一次没有检查的设置。


1
将产品名称设置为提交到iTunes Connect的相同名称,这对我解决了问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接