|
|
1
181
目前,大多数开发人员使用以下3种技术之一来完成这项工作。 第一种方法很容易被规避,第一次运行应用程序时,将日期/时间保存到文件、数据库或共享首选项,每次运行应用程序之后,都要检查试用期是否结束。这很容易规避,因为卸载和重新安装将允许用户有另一个试用期。 第二种方法更难绕开,但仍然可以绕开。使用硬编码定时炸弹。基本上,使用这种方法,您将硬编码试用的结束日期,并且所有下载和使用该应用程序的用户将无法同时使用该应用程序。我使用这种方法是因为它很容易实现,而且在大多数情况下,我不想经历第三种技术的麻烦。用户可以通过手动更改手机上的日期来规避这一点,但大多数用户不会为此而烦恼。 第三种技巧是我听到的唯一真正能够完成你想要做的事情的方法。您必须设置服务器,然后每当应用程序启动时,应用程序都会发送 phones unique identifier 到服务器。如果服务器没有该电话ID的条目,那么它将生成一个新条目并记录时间。如果服务器确实有一个电话ID条目,那么它会做一个简单的检查,看看试用期是否已经到期。然后,它将试用到期检查的结果传回您的应用程序。这种方法不应该是可绕过的,但需要设置Web服务器等。 在OnCreate中进行这些检查始终是一种良好的做法。如果过期已结束,则弹出一个带有 market link 应用程序的完整版本。只包括一个“确定”按钮,一旦用户点击“确定”,就调用“finish()”结束活动。 |
|
|
2
15
我开发了一个 Android Trial SDK 你只需把它放到你的android studio项目中,它就会为你处理所有的服务器端管理(包括离线宽限期)。 简单地使用它
将库添加到主模块
初始化主活动中的库
添加回调处理程序:
要开始试用,请致电
|
|
|
3
14
这是一个古老的问题,但无论如何,也许这会对某人有所帮助。 万一你想和 最简单的方法 (哪个) 会失败如果 应用程序已卸载/重新安装或用户手动更改设备的日期),这可能是:
|
|
|
4
10
嘿,伙计们,这个问题和答案 SNCTLN 启发我以方法3为基础的解决方案作为我的学士论文。我知道目前的状态不是为了提高效率,但我很想听听你怎么想!你会使用这样的系统吗?是否将其视为云服务(配置服务器时不会遇到问题)?担心安全问题或稳定原因? A我一完成学士学位课程,就想继续学习软件。现在我需要你的反馈了! 源代码托管在GitHub上 https://github.com/MaChristmann/mobile-trial 关于系统的一些信息: -该系统由三部分组成:一个Android库、一个node.js服务器和一个用于管理多个试用应用程序和发布者/开发人员帐户的配置程序。
|
|
|
5
6
最简单的 最好的 实现这一点的方法是实现backupsharedreferences。 即使卸载并重新安装应用程序,首选项也会保留。 只需将安装日期作为首选项保存即可。 理论如下: http://developer.android.com/reference/android/app/backup/SharedPreferencesBackupHelper.html |
|
|
6
4
方法4:使用应用程序安装时间。
自API 9级(Android 2.3.2、2.3.1、Android 2.3、Gingerbread)以来,
firstInstallTime
和
lastUpdateTime
在里面
|
|
|
7
3
现在,在最新版本的Android免费试用版订阅中,只有在免费试用期内购买应用程序内的订阅后,才能解锁应用程序的所有功能。 这将允许用户在试用期内使用您的应用程序,如果试用期后该应用程序仍被卸载,则订阅费将转移给您。 我没有尝试过,只是分享了一个想法。 |
|
|
8
2
在我看来,最好的方法就是简单地使用FireBase实时数据库: 1)向应用程序添加FireBase支持 2)选择“匿名身份验证”,这样用户就不必注册,甚至不必知道您在做什么。这保证链接到当前已验证的用户帐户,因此可以跨设备工作。 3)使用实时数据库API设置“安装日期”的值。在启动时,只需检索这个值并使用它。 我也做过同样的事,而且效果很好。我可以在卸载/重新安装过程中对此进行测试,并且实时数据库中的值保持不变。这样,您的试用期就可以跨多个用户设备工作。你甚至可以修改你的安装日期,以便应用程序为每个新的主要版本“重置”试用日期。 更新 :在测试更多之后,匿名FireBase似乎会分配不同的ID,以防您有不同的设备,并且在重新安装之间无法保证:唯一保证的方法是使用FireBase,但将其绑定到他们的Google帐户。这应该有效,但需要额外的步骤,用户首先需要登录/注册。 到目前为止,我已经使用了一种稍微不那么优雅的方法来检查备份的首选项和安装时存储在首选项中的日期。这适用于以数据为中心的应用程序,在这些应用程序中,重新安装应用程序并重新输入先前添加的所有数据是毫无意义的,但对于简单的游戏来说,这是行不通的。 |
|
|
9
2
在研究了这个和其他线程中的所有选项之后,这些是我的发现 共享首选项,数据库 可以在Android设置中清除,重新安装应用程序后丢失。 Can be backed up with android's backup mechanism 并将在重新安装后恢复。备份可能并不总是可用的,但应该在大多数设备上 外部存储(写入文件) 不受设置清除或重新安装的影响,如果我们 don't write to the application's private directory . 但是: requires you to ask the user for their permission at runtime 在较新的Android版本中,这可能只有在您无论如何都需要该权限的情况下才可行。也可以备份。 PackageInfo.firstInstallTime 在重新安装后重置,但在更新过程中保持稳定 登录某个帐户 不管是他们通过FireBase的Google账户还是你自己的服务器上的账户:试用版都绑定到了账户上。创建新帐户将重置试用版。 FireBase匿名登录 您可以匿名登录用户,并将其数据存储在FireBase中。但是 apparently a reinstall of the app and maybe other undocumented events may give the user a new anonymous ID ,重置他们的试用时间。(谷歌本身并没有提供太多有关这方面的文档) 雄蛛科 May not be available and may change under certain circumstances ,例如工厂重置。关于使用它来识别设备是否是一个好主意的看法似乎有所不同。 播放广告ID 可以由用户重置。 May be disabled by the user by opting out of ad tracking. 实例化ID Reset on a reinstall . Reset in case of a security event. Can be reset by your app. 哪种方法(组合)对您有效取决于您的应用程序以及您认为平均约翰将投入多少努力获得另一个试用期。我建议不要使用方向盘 只有 由于不稳定,匿名的FireBase和广告ID。一个多因素的方法似乎会产生最好的结果。哪些因素对您可用取决于您的应用程序及其权限。 对于我自己的应用程序,我发现共享首选项+第一次安装时间+备份首选项是最不具侵入性但也足够有效的方法。您必须确保仅在检查并将试用启动时间存储在共享首选项中之后才请求备份。共享首选项中的值必须优先于FirstInstallTime。然后,用户必须重新安装应用程序,运行一次,然后清除应用程序的数据,以重置试用版,这是相当大的工作。但是,在没有备份传输的设备上,用户只需重新安装即可重置试用版。 我已经把这种方法作为 an extensible library . |
|
|
10
1
根据定义, 全部的 市场上的付费Android应用程序可在购买后24小时内进行评估。 有一个“卸载和退款”按钮,24小时后更改为“卸载”。 我认为这个按钮太突出了! |
|
|
11
1
我在寻找相同的问题时遇到了这个问题,我认为我们可以使用类似于免费日期API的 http://www.timeapi.org/utc/now 或者其他日期的api来检查trail应用程序是否过期。如果您希望交付演示并担心付款,并且需要固定使用期演示,那么这种方法是有效的。:) 找到下面的代码
它的工作解决方案…… |
|
|
12
0
以下是我的经历, 我创建了两个应用程序,一个有试用活动,另一个没有, 我上传了一个没有试用活动的商店作为付费应用, 以及一款将试用活动作为免费应用程序的应用程序。 首次发布的免费应用程序有试用和商店购买选项, 如果用户选择商店购买,它将重定向到商店供用户购买。 但是如果用户点击试用,他们就可以进入试用活动。 注意:我使用了选项3,如@snctln,但经过了修改。 第一 ,我不依赖于设备时间,我的时间是从向数据库进行试注册的php文件中得到的, 其次 ,我使用设备序列号来唯一标识每个设备, 最后 ,应用程序取决于从服务器连接返回的时间值,而不是它自己的时间,因此只有在设备序列号发生更改时,系统才能被绕过,这对用户来说是非常有压力的。 下面是我的代码(用于试验活动):
我的php文件看起来像这样(它是一种rest-slim技术):
然后在主活动上,我使用共享首选项(在试用活动中创建的InstallDate)来监视剩余天数,如果天数超过了,我会用一条消息阻止主活动UI,并将其带到商店进行购买。 我看到的唯一的缺点是 流氓用户 购买付费应用程序,并决定与Zender、文件共享等应用程序共享,甚至直接将apk文件托管在服务器上,供人们免费下载。但是我肯定我会很快用一个解决方案或者一个到解决方案的链接来编辑这个答案。 希望这能拯救灵魂…总有一天 快乐编码… |
|
|
13
0
@ SNCTLN 选项3可以很容易地将一个php文件添加到一个安装了php和mysql的Web服务器中,因为它们中的许多都安装了php和mysql。 从android端,使用httpurlconnection在url中传递一个标识符(设备ID、google account o,无论您想要什么),php返回第一次安装的日期(如果它存在于表中),或者插入一个新行并返回当前日期。 对我来说很好。 如果我有时间,我会发布一些代码! 祝你好运! |