3 回答
TA贡献1877条经验 获得超6个赞
当前,大多数开发人员使用以下3种技术之一来完成此任务。
可以轻松规避第一种方法,第一次运行应用程序时,将日期/时间保存到文件,数据库或共享首选项中,并且每次运行该应用程序后都要检查试用期是否已结束。这很容易规避,因为卸载和重新安装将使用户拥有另一个试用期。
第二种方法更难规避,但仍然可以规避。使用硬编码的定时炸弹。基本上,通过这种方法,您将很难确定试用的结束日期,并且所有下载和使用该应用的用户都将无法同时使用该应用。我之所以使用这种方法,是因为它易于实现,而且在大多数情况下,我只是不想经历第三种技术的麻烦。用户可以通过手动更改手机上的日期来规避此问题,但是大多数用户不会遇到麻烦。
第三种技术是我听说过的真正能够完成您想做的事情的唯一方法。您将必须设置服务器,然后无论何时启动应用程序,您的应用程序都会将电话的唯一标识符发送到服务器。如果服务器没有该电话ID的条目,则它将创建一个新的ID并记录时间。如果服务器确实具有电话ID条目,则它将进行简单检查以查看试用期是否已到期。然后,它将试用期满检查的结果传达回您的应用程序。这种方法不应该被规避,但是确实需要设置一个Web服务器等。
在onCreate中进行这些检查始终是一个好习惯。如果到期已结束,则弹出带有市场链接的AlertDialog,该链接指向应用程序的完整版本。仅包括一个“确定”按钮,并且一旦用户单击“确定”,就调用“ finish()”以结束活动。
TA贡献1804条经验 获得超3个赞
我已经开发了一个Android试用版SDK,您可以将其轻松放入Android Studio项目中,它将为您处理所有服务器端管理(包括离线宽限期)。
要使用它,只需
将库添加到主模块的 build.gradle
dependencies {
compile 'io.trialy.library:trialy:1.0.2'
}
用您的主要活动的onCreate()方法初始化库
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Initialize the library and check the current trial status on every launch
Trialy mTrialy = new Trialy(mContext, "YOUR_TRIALY_APP_KEY");
mTrialy.checkTrial(TRIALY_SKU, mTrialyCallback);
}
添加一个回调处理程序:
private TrialyCallback mTrialyCallback = new TrialyCallback() {
@Override
public void onResult(int status, long timeRemaining, String sku) {
switch (status){
case STATUS_TRIAL_JUST_STARTED:
//The trial has just started - enable the premium features for the user
break;
case STATUS_TRIAL_RUNNING:
//The trial is currently running - enable the premium features for the user
break;
case STATUS_TRIAL_JUST_ENDED:
//The trial has just ended - block access to the premium features
break;
case STATUS_TRIAL_NOT_YET_STARTED:
//The user hasn't requested a trial yet - no need to do anything
break;
case STATUS_TRIAL_OVER:
//The trial is over
break;
}
Log.i("TRIALY", "Trialy response: " + Trialy.getStatusMessage(status));
}
};
要开始试用,请致电mTrialy.startTrial("YOUR_TRIAL_SKU", mTrialyCallback); 您的应用密钥,然后在Trialy开发人员仪表板中找到试用SKU 。
- 3 回答
- 0 关注
- 602 浏览
添加回答
举报