在应用程序购买:dynamic添加非消耗品

我正在开发一个应用程序,用户可以在其中购买数字地图,图表等。 我想在应用程序内购买这些东西。 事情是,我不知道有多less图表,因为我从网上的另一个来源得到他们。 可能有数百个。

我有一个服务器,定期从该来源获取图表,并将其存储在本地; 将来可能会出现新的图表或消失现有的图表。 所有这些都没有人工干预。

有三种不同types的图表。

我的第一个解决scheme是创build三个消耗品,让用户购买这些消耗品。 这工作正常,但不幸的是苹果拒绝了它,因为他们要求图表是“非消费品”。

但是我非常不知道如何实现我想要的非消耗types。 如果我将这三种types创build为非消耗品,并且用户购买一种,那么他将免费获得该组中的所有其他图表,因为非消耗品只能购买一次。

我能想到的唯一解决scheme是为每个图表创build一个非消耗品。 但是,这是我不惜一切代价避免的:现在,图表是定期从远程源获取的,没有任何手动工作在我身边。 我想保持这种方式。 每次出现新图表时,我都不想手动创build新的非消耗品。

任何想法如何使这个可扩展?

我不能完全用代码拼出来,但是你可以通过两种方式处理这个问题:

货币。 您不销售地图等非消耗品。 你卖货币。 用这种货币你购买地图。 每当用户点击您的店面时,您都会dynamic地input地图。 这样你只需要跟踪几个购买选项。

另一种select:我工作的公司最初设置非常简单。 我们的应用程序将启动,我们将伸出一个PHP脚本,把我们已经坐在它的应用程序商店ID。 在这一点上,我们会validation他们,并使用有效的回报。 这个选项允许我们改变我们的应用程序购买通过iTunes连接,然后在脚本,一切都很好。

这是一个较旧的post,但我只是有同样的问题,发现现在有一种方法来dynamic提供非易耗品,通过在自己的服务器上托pipe产品标识符列表:

您在应用中销售的每件产品都有唯一的产品标识。 您的应用程序使用这些产品标识符从App Store获取有关产品的信息(如定价),并在用户购买这些产品时提交付款请求。 您的应用程序可以从应用程序包中的某个文件读取产品标识符列表,也可以从您的服务器获取它们。

如果您的应用具有固定的产品列表,例如通过应用内购买来移除广告或启用function,请将该列表embedded到应用包中。 如果产品标识符列表可以在您的应用程序不需要更新的情况下更改,例如支持更多关卡或字符的游戏,请让您的应用程序从您的服务器获取列表。

没有运行机制可以获取特定应用程序的iTunes Connect中configuration的所有产品的列表。 您负责pipe理应用的产品列表,并将这些信息提供给您的应用。 如果您需要pipe理大量产品,请考虑在iTunes Connect中使用批量XML上传/下载function。

苹果开发者应用内购买指南

无论您是通过IAP还是通过某种应用内“货币”直接购买这些产品,您都可以通过使用保证每个产品具有唯一地图名称的命名系统来简化将来需要完成的工作量你想卖。 例如:

NSString *myMapName = [NSString stringWithFormat:@"%@%@%@%@", app_identifier, map_type, top_left_corner_location, scale]; 

这样,如果您的服务器将这些信息传递给新的映射,那么可以通过编程的方式来知道IAP标识符应该是什么 – 只要将其设置为stringmyMapName的值myMapName

在使用货币的情况下(这听起来比替代选项更容易,而且似乎有很多大型应用程序正在做),您只需要在地图上对一些数据进行散列,以便人们无法猜测你存储在他们的钥匙链/ plist的代码,神奇地得到你所有的地图,而不付钱:)

如果每个地图实际上都有单独的IAP,那么很遗憾,您必须为每个可能的地图创build一个IAP。 (但是你可以聘请一些孩子来做最低工资的部分,对吧?这只是数据input)它们可以是基本的shell,但是通过上面描述的服务器提供的实际信息,一旦经过validation,被购买。

希望这可以帮助!

我认为你对物品的限制是大概一万个左右。

预先创build大量的项目,添加一些代码来检查你的网站,看看你的最高图表号码,并确保用户只能购买你有图表。

应用程序从您的服务器下载图表名称和相应的产品ID,然后你只是购买一个产品。

苹果并不在乎实际的产品是否已经在应用程序中,并且是通过购买解锁,从服务器下载还是从您的网站提供的。