使用 Google Play 应用内结算的一次性购买的时间试用

Time trial for one-time purchases with Google Play In-App Billing

目前,我可以免费下载一个功能有限的应用程序。为了解锁全部功能,用户需要使用 Google Play 应用内结算进行一次性购买。

最近为了提高转化率,打算提供限时试用全功能。

也就是说,用户可以在前 7 天使用全部功能,而无需进行一次性购买。

7 天后,他将退回到功能有限的应用。如果他喜欢最近 7 天内的全部功能,他将执行一次性购买。如果没有,他就让它成为:)

我想知道,有没有什么方法可以利用现有的应用内购买结算API,来实现我的计时功能?

如果可能的话,我不想自己处理服务器端。

我知道应用内订阅模式确实提供试用期:http://developer.android.com/google/play/billing/billing_subscriptions.html

但是,订阅模式不是我想要的。我的属于 Non-consumable Items

Google的应用内结算不会直接支持您的试用案例。这是因为应用内结算是一种简单的一次性购买模型(适用于托管应用内产品),它只处理实际的购买流程和所有权管理。您可以根据 Google.

提供的购买和所有权提供实际的应用内产品

所以这意味着您必须实施:

1) 您对全部功能的 7 天试用,完全在您自己的代码中。具体来说,您必须弄清楚如何以用户不能简单地卸载并重新安装应用程序来获得全新 7 天的方式来实现它。

2) 用户试用期结束后,您的应用将必须锁定全部功能。

3) 然后,您的应用应支持通过 Google 应用内购买流程,购买流程完成后,将永久解锁全部功能。

显然,这其中棘手的部分是 (1)。这可能需要在您的设备 and/or 用户 ID 端进行一些服务器端跟踪,因为任何仅依赖客户端存储的解决方案都可以很容易地被用于多次试验。

我的应用程序 class 中有存储日期

class MyApp extends Application {
    @Override
    public void onCreate() {
       super.onCreate();
       setTrialDate();
    }
 }

设置试用版

protected void setTrialDate() {

        // test already set
        SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
        long trialDate = settings.getLong(TRIAL_PERIOD_DATE_START, -1);
        if(trialDate == -1){
            long date = new Date().getTime() ;
            date += Consts.NUM_TRIAL_DAYS * Consts.DAY_MILSEC;
            SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
            SharedPreferences.Editor editor = settings.edit();
            editor.putLong(TRIAL_PERIOD_DATE_START, date);

        }
    }

然后你随时查看是否还在试用中

    public boolean isInTrial(){
       SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       long trialDate = settings.getLong(TRIAL_PERIOD_DATE_START, -1);

       if(trialDate == -1) {
          setTrialDate();
          return true;
       }

       long now = new Date().getTime();

       if(trialDate < now){
           return false;
       } else {
           return true;
       }
}

但是 akira sed 不会保护您免于安装和卸载应用程序,我认为为了保护您必须使用特定的设备 ID 和试用日期开始的服务器。