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

Posted

技术标签:

【中文标题】如何找出用户第一次购买/安装应用程序的时间(可能没有 UDID?)【英文标题】:How to find out WHEN a user bought the app / installed it for the first time (possible without UDID?) 【发布时间】:2013-04-27 14:52:06 【问题描述】:

我想知道用户第一次购买我的应用程序的时间......到目前为止,我还没有找到一个干净的方法,UDID 似乎是唯一的选择。

理想情况下,我可以通过 StoreKit 获得收据,但到目前为止……nada

我错过了什么吗?有人有想法吗?


情况是我有一个订阅和第一期(从你购买应用程序开始应该是免费的)。如果我稍后重新安装.. 我应该总是得到原来的问题)

示例: 我在 10.2010 购买了该应用程序 我安装并运行它并免费获得 10.2010 的订阅问题(无应用内购买) 现在我删除应用程序 我安装它 1.2013,我只从 10.2010 免费获得订阅!不是新的

【问题讨论】:

在钥匙串中存储一个标志。 钥匙串也很脆弱,不是吗?...它是否会在应用程序删除时保留下来?如果我只是恢复手机呢^^ 它是非易失的,它是备份的。 酷,我不知道......这还不错。我想我仍然可以摆脱它但我不恢复备份? 是的,没错。但无论如何,你不可能100%安全。如果用户越狱手机并删除所谓的永久数据怎么办?等等 【参考方案1】:

您可以只在钥匙串中存储一个标志。钥匙串的内容会在应用重新安装时保留。

要获取应用的首次安装时间,请检查应用二进制文件首次写入磁盘的时间:

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;

【讨论】:

您是否找到任何说明“钥匙串的内容在重新安装应用程序时保留”的文档。 ?情况似乎如此,但我找不到任何说明这是预期行为的文档。 @AndreasPaulsson 够了,我会搜索相关文档。老实说,我不再知道我是怎么知道的,但钥匙串持久的。 小心!上面的答案是在编写二进制文件时获取的……而不是用户在设备上安装它的时间。如果您从 XCode 安装和调试应用程序,它们是一回事,但如果您通过 TestFlight 或 App Store 安装应用程序,它们就不是了!【参考方案2】:

我还没用过Store Kit,但如果我错了,请告诉我,

1) 它需要一个服务器在某个点或另一个

2) 当我们使用它来“购买”(不是订阅或消耗品)某些东西时,我们可以使用同一个 iTunes 帐户在所有设备上检索此购买

我的意思是,创建一个应用内购买免费项目,当它第一次通过您的服务器时将其存储在数据库中,下次使用相同帐户调用它时“启用”与第一次免费购买相对应的问题

【讨论】:

以上是关于如何找出用户第一次购买/安装应用程序的时间(可能没有 UDID?)的主要内容,如果未能解决你的问题,请参考以下文章

PayPal - 一次购买可能有多个账单协议?

在应用程序购买的移动应用程序中,我如何在重新安装应用程序时发现用户已付费?

如何找出应用程序的安装位置?

如何为 Android App 用户提供一次性购买应用程序的免费试用期?

应用内购买,具有不同持续时间的多个自动续订订阅

已经用管理员账户登录WIN7在安装oracle 10g xe时提示权限不够,需要用管理员账户进行安装?如何解决