15

我正在开发一个应用程序,用户可以在其中购买数字地图、图表等。我想将这些包装在应用内购买中。问题是我事先不知道会有多少图表,因为我是从网上的另一个来源获得的。可能有数百个。

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

共有三种不同类型的图表。

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

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

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

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

4

4 回答 4

19

我无法用代码为您完全拼写出来,但您可以通过两种方式处理此问题:

货币。您不出售非消耗品,例如地图。你卖货币。使用该货币您可以购买地图。每当用户访问您的店面时,您动态提供的地图。这样,您只需要跟踪一些购买选项。

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

于 2012-08-10T01:53:08.943 回答
5

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

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

如果您的应用具有固定的产品列表,例如用于移除广告或启用功能的应用内购买,请将列表嵌入到应用程序包中。如果产品标识符列表可以更改而无需更新您的应用,例如支持其他关卡或角色的游戏,请让您的应用从您的服务器获取列表。

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

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

于 2014-01-22T17:17:29.667 回答
3

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

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

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

Apple 不在乎实际产品是否已经在应用程序中并通过购买解锁、从他们的服务器下载或从您的网站提供。

于 2012-08-08T19:25:46.983 回答
3

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

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

这样,如果您的服务器为新地图传递该信息,则可以通过编程方式知道 IAP 标识符应该是什么——只需将其设为 string 的值即可myMapName

在您使用货币的情况下(这听起来比替代选项更容易,并且是许多大型应用程序似乎正在做的事情),您只需要在地图中使用一些数据进行哈希处理,这样人们就无法猜测您存储在他们的钥匙串/plist 中的代码并神奇地获得所有地图而无需付费:)

如果您实际上对每个地图都有单独的 IAP,遗憾的是您必须为每个可能的地图创建一次 IAP。(但是你可以雇佣一些孩子来做这部分的最低工资,对吧?这只是数据输入)不过,它们可以是基本的 shell,通过你的服务器提供的实际信息,如上所述,一旦验证地图实际上已经被购买。

希望这可以帮助!

于 2012-08-13T21:15:47.543 回答