如何创建一个在固定时间段后过期的Android试用应用程序?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (133)

我有一个应用程序,我想作为付费应用程序进入市场。我想要有其他版本,这将是一个“试用”版本,有5天的时间限制吗?

提问于
用户回答回答于

第一种方法很容易规避,第一次运行应用程序时将日期/时间保存到文件,数据库或共享首选项,并且每次在检查后运行应用程序以查看试用期是否已结束。这很容易规避,因为卸载和重新安装将允许用户再试用一段时间。

第二种方法很难规避,但仍然可以避免。使用硬编码的定时炸弹。基本上使用这种方法,您将难以获得试用版的结束日期,所有下载和使用该应用程序的用户都将无法同时使用该应用程序。我已经使用了这种方法,因为它很容易实现,而且在大多数情况下,我只是没有想过要经历第三种技术的麻烦。用户可以通过手动更改手机上的日期来规避这种情况,但大多数用户不会经历麻烦来做这样的事情。

第三种技巧是我所听说的真正能够完成你想要做的事情的唯一方法。您将不得不建立一个服务器,然后每当您的应用程序启动时,您的应用程序将电话唯一标识符发送到服务器。如果服务器没有该电话号码的条目,则会创建一个新条目并记录时间。如果服务器确实有电话号码的条目,那么它会进行一次简单的检查,看看试用期是否已过期。然后将试用过期检查的结果传回给您的应用程序。这种方法不应该是可以避免的,但确实需要设置一个web服务器等。

用户回答回答于

这是一个古老的问题,但无论如何,也许这会帮助某人。

如果你想采用最简单的方法,这可能是这样的:

private final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
private final long ONE_DAY = 24 * 60 * 60 * 1000;

@Override
protected void onCreate(Bundle state){
    SharedPreferences preferences = getPreferences(MODE_PRIVATE);
    String installDate = preferences.getString("InstallDate", null);
    if(installDate == null) {
        // First run, so save the current date
        SharedPreferences.Editor editor = preferences.edit();
        Date now = new Date();
        String dateString = formatter.format(now);
        editor.putString("InstallDate", dateString);
        // Commit the edits!
        editor.commit();
    }
    else {
        // This is not the 1st run, check install date
        Date before = (Date)formatter.parse(installDate);
        Date now = new Date();
        long diff = now.getTime() - before.getTime();
        long days = diff / ONE_DAY;
        if(days > 30) { // More than 30 days?
             // Expired !!!
        }
    }

    ...
}

扫码关注云+社区