如何找出用户购买应用程序/第一次安装应用程序的时间(可能不需要UDID)?

7
我想知道用户第一次购买我的应用的时间...到目前为止,我还没有找到一个干净的方法,UDID似乎是唯一的选择。
理想情况下,我可以通过StoreKit获得收据,但到目前为止...什么都没有。
我有什么遗漏吗?有人有想法吗?
现在的情况是,我有一个订阅,第一期(从你购买应用程序的时候开始)应该是免费的。如果我以后重新安装应用程序..我应该总是能够获取原始版本)
例如: 我在2010年10月购买了这个应用程序 我安装并运行它,并免费获取2010年10月的订阅问题(没有应用内购买) 现在我删除了这个应用程序 我在2013年1月安装它,我只能免费获取2010年10月的订阅!而不是新的。

在钥匙串中存储一个标记。 - user529758
钥匙串也很脆弱,不是吗?如果应用被删除了,它会被保留吗?如果我只是恢复手机呢^^ - Daij-Djan
你无法知道用户何时购买了你的应用,只能知道他何时首次启动它。 - Jerome Diaz
@JeromeDiaz 即使不是这样。 你可以在你的应用程序二进制文件上调用 stat() 。 在许多其他信息中,它将为您提供它写入磁盘的时间(即安装时间)。 - user529758
@Daij-Djan 已添加了一个答案。 - user529758
显示剩余4条评论
2个回答

7
你可以在密钥链中存储一个标志。密钥链的内容将在应用重新安装后保留。
要获取应用程序的第一次安装时间,请检查应用程序二进制文件被写入磁盘的时间:
if (flag_in_keychain_not_present()) {
    // installed for the first time
    set_flag_in_keychain();

    struct stat st;
    stat([NSBundle mainBundle].executablePath.UTF8String, &st);
    time_t installed = st.st_mtime;
}

你有找到任何文件说明“钥匙串的内容在应用重新安装后会被保留”吗?这似乎是事实,但我找不到任何文件说明这是预期行为。 - Andreas Paulsson
@AndreasPaulsson 好的,我会搜索相关文档。老实说,我不再知道我是怎么知道这个的,但是钥匙串确实是持久的。 - user529758
1
注意!上面的答案获取的是二进制文件编写的时间,而不是用户在设备上安装它的时间。如果您从XCode安装和调试应用程序,则它们是相同的,但如果您通过TestFlight或App Store安装应用程序,则它们不同! - litso

1
我还没有使用过Store Kit,但请告诉我是否正确,
1)它在某个时候需要服务器
2)当我们用它来“购买”(不是订阅或消耗品)东西时,我们可以在使用相同iTunes帐户的所有设备上检索此购买
我的观点是,创建一个应用内免费项目,当它第一次通过您的服务器时将其存储在数据库中,并且下一次使用相同帐户调用时,“启用”对应于第一个免费购买的问题。

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