使用新的显式应用ID,应用内购买更新了应用。 SKProductsRequest返回空的产品列表

时间:2011-08-24 18:56:43

标签: iphone ios ipad in-app-purchase

背景

我的应用程序的当前待售版本使用通配符应用程序ID,并且捆绑包ID很简单,不符合com.companyname.appname约定(它只是'appname')。它使用的App ID只是'bundleseed。*'形式,我相信,当使用配置文件签名时,会产生'bundleseed.appname'。 (为什么?因为这个应用程序自Apple推出显式App ID之前的2.x天以来,并且在XCode引入com.companyname约定之前就已存在。)

我正在向应用添加应用内购买,这需要显式应用ID。我按照Technical Q&A QA1680 Updating from a wildcard App ID to an explicit App ID中的说明操作了。结果是我有一个新的显式应用ID,形式为'newbundleseed.appname',用于签署应用的新配置文件指定了这一点。 info.plist中的包ID与“appname”保持一致。

问题:

当我从旧版本顶部的XCode部署新应用程序时,它似乎工作正常。旧版应用实例将替换为新应用,并且所有新功能都已到位。 但是,当应用程序提交SKProductsRequest时,会产生一个空的产品列表。如果我将新应用程序部署为全新安装(而不是复制旧版本),那么一切都按预期工作 - SKProductsRequest结果在我的可用产品的完整列表中。

我还注意到升级版本继承了旧版本的某些方面,这对我来说很奇怪。具体来说,旧版本的应用程序有一个default.png,新应用程序还没有作为构建的一部分,但升级后的应用程序在加载时会显示旧的default.png。就好像升级后的应用程序是旧旧的合并。

我主要担心的是应用内购买适用于我的升级用户。我是否在使用Explicit App ID做错了,或者这只是我使用In App Purchase沙箱的问题?在这种情况下,我可以确信它在发布时会起作用吗?

此外,任何有关新应用程序为何/如何看起来不会完全替换旧应用程序包的见解?

我唯一能想到的是,不是生成新的捆绑种子(如QA1680中所详述),我应该在创建新的App ID时使用旧的捆绑种子。即旧的App id是'oldbundleseed。*'而我现在的新ID是'newbundleseed.appname',也许它应该是'oldbundleseed.appname'。但我不能这样做,因为配置门户网站不会让我创建一个仅由捆绑种子不同的应用程序ID。如果这是我的问题,该怎么办?联系Apple?

TL / DR:现有的应用程序,使用新的显式应用程序ID进行更新以支持IAP,除了SKProductRequests在应用程序升级时产生空产品列表而干净安装时效果正常它们会产生一个填充的产品清单。

2 个答案:

答案 0 :(得分:3)

你是如何进行升级的?如果您正在构建并运行,那么最终会遇到此问题,即应用程序未完全重写。 Xcode做出了一些“优化”决定,只复制真正更改的文件,这会让事情变得混乱。

创建一个adhoc发行版并将其下载到具有较旧版本应用的设备。检查adhoc构建是否正确枚举。

答案 1 :(得分:0)

您是否实现了请求:didFailWithError:delegate方法?它是SKProductsRequestDelegate协议符合的SKRequestDelegate协议的一部分。

我必须同意StoreKit没有充分记录。根据我的经验,如果iOS看到具有不同appID的相同应用程序,则表现为它们是两个不同的应用程序,而不是覆盖(或部分覆盖)具有相同标题的应用程序。尽管如此,如果您的开发设备已越狱:启动应用程序(处于有问题的状态),ssh进入您的设备,运行launchctl list并查看iOS如何在结果列表中标识您的应用。