在App Purchase中:动态添加非消耗品

时间:2012-07-03 17:06:03

标签: ios in-app-purchase

我正在开发一个用户可以购买数字地图,图表等的应用程序。我想将它们包含在应用内购买中。事情是,我事先并不知道将会有多少图表,因为我是从网络的其他来源获取它们的。可能有数百个。

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

有三种不同类型的图表。

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

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

我能想到的唯一解决方案是为每张图表创建一个非消耗品。但这是我想要不惜一切代价避免的事情:就像现在一样,图表会定期从远程源获取,而不需要任何手动工作。我想保持这种方式。每次出现新图表时,我都不想手动创建新的非消费品购买。

任何想法如何使其可扩展?

4 个答案:

答案 0 :(得分:18)

我无法用代码完全拼出来,但你可以通过两种方式解决这个问题:

货币。 您不销售地图等非消耗品。你卖货币。使用该货币,您可以购买地图。每当用户点击您的商店前端时动态提供的地图。这样,您只需跟踪一些购买选项。

另一种选择: 我工作的公司最初非常简单地设置了它。我们的应用程序将启动,我们将联系一个PHP脚本,将我们所拥有的应用程序商店ID交给我们。那时我们验证它们并使用有效的回报。此选项允许我们通过iTunes Connect更改我们的应用内购买,然后在脚本中,一切都很棒。

答案 1 :(得分:5)

这是一篇较旧的帖子,但我刚才有同样的问题,发现现在有一种方法可以通过在您自己的服务器上托管产品标识符列表来动态提供非耗材:

  

您在应用中销售的每件商品都有唯一的商品标识码。   您的应用使用这些产品标识符来获取有关的信息   来自App Store的产品,如定价,以及提交付款   用户购买这些产品时的请求。您的应用可以阅读   其应用包或提取中的文件中的产品标识符列表   他们来自你的服务器。

     

如果您的应用有固定的产品列表,例如应用内购买   要删除广告或启用功能,请将列表嵌入应用中   束。如果产品标识符列表可以在没有您的应用的情况下更改   需要更新,例如支持其他级别的游戏   或者您的应用程序从您的服务器获取列表。

     

没有运行时机制来获取所有产品的列表   在iTunes Connect中为特定应用程序配置。你有责任   用于管理应用程序的产品列表并提供该产品   信息到您的应用程序。如果你需要管理大量的   产品,请考虑使用批量XML上载/下载功能   iTunes Connect。

Apple Developer In-App Purchasing Guide

答案 2 :(得分:3)

无论您是通过IAP直接购买还是通过某种应用内“货币”购买,您都可以使用命名系统来简化您今后需要完成的工作量,这样可以保证唯一的地图名称对于您要销售的每件商品。例如:

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

这样,如果您的服务器传递了新地图的信息,那么有一种编程方式可以知道IAP标识符应该是什么 - 只需将其作为字符串myMapName的值。

在你使用货币的情况下(这听起来比替代选项更容易,并且是许多大型应用程序似乎在做什么)你只需要在地图中使用一些数据进行哈希,这样人们就可以不要猜你在他们的钥匙串/ plist中存储的代码,然后神奇地得到你所有的地图而不付钱:)

如果您确实为每张地图都有单独的IAP,遗憾的是,您必须为每个可能的地图制作一次IAP。 (但是你可以聘请一些孩子来做最低工资的那部分,对吧?这只是数据录入)但是,一旦确认地图确实存在,它们可以是基本的外壳,如上所述通过服务器提供的实际信息已被购买。

希望这有帮助!

答案 3 :(得分:2)

我认为你对物品的限制大约是10,000左右。

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

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

Apple并不关心实际产品是否已在应用中,并且通过购买解锁,从服务器下载或从您的网站提供。