我可以通过编程方式关闭Google Apps脚本库吗?

时间:2019-04-01 04:35:21

标签: google-apps-script google-sheets

因此,我有一堆要分配的电子表格功能。我实际上想为它们收费,在应用程序内订阅保持最新状态之前,保持它们的功能和可访问性,然后使它们不可用,直到续订为止。

因此,尽管我想出了如何为Google Apps Script设置订阅机制(是否已经在某处解决了这个问题),但是如何避免人们使用您的收藏集?

我想到过类似的东西

function WHATEVER() {
    if (!Subscribed()) {
        return new Error("Subscription not current");
    }
    // ... rest of function
}

我想很好,但是有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

每次运行功能以测试用户是否仍订阅时访问持久性存储都会增加处理时间。因此,您的Subscribed()函数应缓存当前的付款状态,以避免每次运行函数时读取属性服务(或存储到期日期的任何地方)。

但是即使使用缓存也可能是一个负担。我不确定会带来多大的负担,您需要对其进行测试或获得用户反馈。

如果您希望避免每次函数运行时都进行测试,则还可以在边栏或对话框打开时或在电子表格打开时检查当前的付款状态。但是还有一个问题,就是您如何停止运行该功能。

由于每个函数名称都不相同,因此您需要向每个函数添加if语句,但是我认为除了对每个函数进行测试之外,没有其他选择。

您没有显示您的Subscribed()函数,因此我将提供建议。

function Subscribed_() {
  var cache,usrProps,expireDate,todaysDate;
  cache = CacheService.getUserCache();

  todaysDate = new Date();
  todaysDate = todaysDate.getTime();//Today's date in milliseconds

  expireDate = cache.get('expDate');//Get the expiration date

  if (expireDate === null) {//No value stored in cache
    //Now look up persistent value
    usrProps = PropertiesService.getUserProperties();
    expireDate = usrProps.get('expDate');//Get the expiration date
  }

  if (!expireDate) {
    return false;
  }

  expireDate = Number(expireDate);//Store the expiration date in milliseconds

  if (todaysDate < expireDate) {
    return true;
  } else {
    return false;
  }

}