如何让Android应用程序只在一段试用期内工作

如何让Android应用程序只在一段试用期内工作,android,trialware,Android,Trialware,我有一个申请,应该只工作30天或几天 这只是一个简单的应用程序,它有一些音频文件播放,对应于显示的图像和显示的文本。只有一种方法可以真正实现这一点: 你必须建立一个 服务器,然后无论何时启动应用程序,应用程序都会发送 电话是服务器的唯一标识符。如果服务器没有 为该手机id创建一个条目,然后它创建一个新的条目并记录 时间如果服务器确实有一个电话id条目,那么它会执行 只需检查试用期是否已过期。那么 将试用期满检查的结果反馈给您的 应用这种方法不应该是可以绕过的,但确实可以 需要设置Web服务器等

我有一个申请,应该只工作30天或几天


这只是一个简单的应用程序,它有一些音频文件播放,对应于显示的图像和显示的文本。

只有一种方法可以真正实现这一点:

你必须建立一个 服务器,然后无论何时启动应用程序,应用程序都会发送 电话是服务器的唯一标识符。如果服务器没有 为该手机id创建一个条目,然后它创建一个新的条目并记录 时间如果服务器确实有一个电话id条目,那么它会执行 只需检查试用期是否已过期。那么 将试用期满检查的结果反馈给您的 应用这种方法不应该是可以绕过的,但确实可以 需要设置Web服务器等

还有其他方法(比如在某处存储安装日期),但若用户卸载了你们的应用程序,那个么这些信息就会消失,当他重新安装时,就无法知道他以前是否安装过

编辑: 好的,既然您想使用
SharedReferences
方式,下面是一个示例:

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.getTimeInMillis() - before.getTimeInMillis();
        long days = diff / ONE_DAY;
        if(days > 30) { // More than 30 days?
             // Expired !!!
        }
    }

    ...
}

我还没有编译过这篇文章,但应该会给你一个想法。

要真正做到这一点,只有一种方法:

你必须建立一个 服务器,然后无论何时启动应用程序,应用程序都会发送 电话是服务器的唯一标识符。如果服务器没有 为该手机id创建一个条目,然后它创建一个新的条目并记录 时间如果服务器确实有一个电话id条目,那么它会执行 只需检查试用期是否已过期。那么 将试用期满检查的结果反馈给您的 应用这种方法不应该是可以绕过的,但确实可以 需要设置Web服务器等

还有其他方法(比如在某处存储安装日期),但若用户卸载了你们的应用程序,那个么这些信息就会消失,当他重新安装时,就无法知道他以前是否安装过

编辑: 好的,既然您想使用
SharedReferences
方式,下面是一个示例:

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.getTimeInMillis() - before.getTimeInMillis();
        long days = diff / ONE_DAY;
        if(days > 30) { // More than 30 days?
             // Expired !!!
        }
    }

    ...
}
我还没有编译过这个,但应该会给你一个想法。

是一个很好的答案

引用原作者的话-

目前,大多数开发人员使用以下3种方法之一来完成此任务 技术

第一种方法很容易避免,第一次运行 应用程序将日期/时间保存到文件、数据库或共享首选项,并 每次运行应用程序后,请检查试用期 结束了。这很容易避免,因为卸载和 重新安装将允许用户有另一个试用期

第二种方法更难规避,但仍然可以规避。 使用硬编码的定时炸弹。基本上,通过这种方法,您将 硬编码试验的结束日期,以及所有下载和 使用该应用程序将停止同时使用该应用程序。我 我们之所以使用这种方法,是因为它易于实现,并且适用于 大多数情况下,我只是不想经历这个世界的麻烦 第三种技术。用户可以通过手动更改 在他们的手机上约会,但大多数用户不会费事去做 这样的事情

第三种方法是我听说的唯一一种真正的方法 能够完成你想做的事情。你必须建立一个 服务器,然后无论何时启动应用程序,应用程序都会发送 电话是服务器的唯一标识符。如果服务器没有 为该手机id创建一个条目,然后它创建一个新的条目并记录 时间如果服务器确实有一个电话id条目,那么它会执行 只需检查试用期是否已过期。那么 将试用期满检查的结果反馈给您的 应用这种方法不应该是可以绕过的,但确实可以 需要设置Web服务器等

在onCreate中执行这些检查始终是一种良好的做法。如果 过期已结束,弹出一个带有市场链接的AlertDialog,指向 应用程序的完整版本。仅包括一个“确定”按钮,一旦 用户单击“确定”调用“finish()”以结束活动

这是一个很好的答案

引用原作者的话-

目前,大多数开发人员使用以下3种方法之一来完成此任务 技术

第一种方法很容易避免,第一次运行 应用程序将日期/时间保存到文件、数据库或共享首选项,并 每次运行应用程序后,请检查试用期 结束了。这很容易避免,因为卸载和 重新安装将允许用户有另一个试用期

第二种方法更难规避,但仍然可以规避。 使用硬编码的定时炸弹。基本上,通过这种方法,您将 硬编码试验的结束日期,以及所有下载和 使用该应用程序将停止同时使用该应用程序。我 我们之所以使用这种方法,是因为它易于实现,并且适用于 大多数情况下,我只是不想经历这个世界的麻烦 第三种技术。用户可以通过手动更改 在他们的手机上约会,但大多数用户不会费事去做 这样的事情

第三种方法是我听说的唯一一种真正的方法 能够完成你想做的事情。你必须建立一个 服务器,然后无论何时启动应用程序,应用程序都会发送 电话是服务器的唯一标识符。如果服务器没有 为该手机id创建一个条目,然后它创建一个新的条目并记录 时间如果服务器确实有一个电话id条目,那么它会执行 只需检查试用期是否已过期。那么 将试用期满检查结果反馈给y