Time between checks vs grace on internet

Hi we have some confusion on the following:

So the recommented settings:nDaysBetweenChecks = 90nGraceDaysOnInetErr = 14

Here is what we think happens: The users activates, after 14 days (without internet) the limelm servers will be checked if the activation is still valid.Then what does the 90 do in this case? will it just check again?

Settings as follows:nDaysBetweenChecks = 10nGraceDaysOnInetErr = 365

Now will it try to check every 10 days and keep doing that until the 365 days expire?

Please tell me i'm right or correct me when i'm wrong 😀 (I could not find a clear anwser on the website)

>> "Then what does the 90 do in this case? will it just check again?"

Yes, it will check again for the 90 days. And after the 90-days the customer will be forced to recheck with the activation servers immediately before continuing to use your app.

This is good because it stops malicious users from just blocking your app from accessing the activation servers.

>> "Now will it try to check every 10 days and keep doing that until the 365 days expire?"

I wouldn't recommend doing that. Only because malicious users are the only ones who will benefit. And what's the point in giving them a break?

Thanks Wyatt, it clears this up a bit, just to make sure is the following behavoir correct?

nDaysBetweenChecks = 5nGraceDaysOnInetErr = 2Activated -> do nothing -> do nothing -> try internet check (fail) -> do nothing -> do nothing -> try internet (fail) -> deactivated

nDaysBetweenChecks = 2nGraceDaysOnInetErr = 5Activated -> do nothing -> do nothing -> do nothing -> do nothing -> do nothing -> try internet (fail) -> deactivated

No, you have it exactly backwards. The "nDaysBetweenChecks " is just that: the Days Between Checks (to the activation servers).

Wyatt, thanks for the help 🙂 everything is clear now

In this case I do not understand the standard setting of 90 days.

In the worst case a check is happening and returns valid license. In case for some reason the license is invalid the next day, but the next check is 90 days later, the user can use the software for 90 more days without license (because it is not being checked) and when disabling internet he even could use it 90+14 days?

The only reasonable default settings seems to be then:nDaysBetweenChecks = 1nGraceDaysOnInetErr = 14

>> "The only reasonable default settings seems to be then:nDaysBetweenChecks = 1nGraceDaysOnInetErr = 14"

No, that's not a reasonable default. Legitimate users who have valid licenses and allow unrestricted outgoing communication will be forced to contact the activation servers every single day. Whereas malicious users will use your app for 15 days. This is bad for 2 reasons (1) it punishes legit users and (2) while the activation process is blazing fast, it's still not instantaneous. Even once we get the activation speed to a negligible length of time (it's at about 300-ish ms right now) we have the speed of light to deal with -- i.e. latency due to distance.

Long story short: don't do that. If you do anything, do the reverse:

nDaysBetweenChecks = 14nGraceDaysOnInetErr = 1

Ok, sorry I've to bother you, but then please help me out.

I've a monthly subscription model for my software. The expiration time is handled by checking a custom license field. So I need to be able to change this field and have more or less immediate effect for my users.

Also, I want my users to be able to use the software without internet for 14 days.

So, what would be the required setting then?

Thanks

>> "So, what would be the required setting then?"

The ones I just suggested.

And for custom license fields that contain date information, if the date "expires" on the customer's end of things I'd recommend re-checking with the servers once (via an IsGenuine() call), and then not re-checking again if the custom license fields have not changed.

Plus you should add a window somewhere in your app to allow customers to re-check with the activation servers so that they can get the latest custom license field value (for cases where they let their subscription lapse, but then they renew).

Does that make sense?

Thanks.

Recalling your suggestion:nDaysBetweenChecks = 14nGraceDaysOnInetErr = 1

Wouldn't it be very inconvenient if a user had his last check 13 days ago, then moves for 3 days to somewhere without internet. On the second day the 14 day counter is up, he cannot reach the server and has only 1 day to use the software without server connection.

Whereas:nDaysBetweenChecks = 1nGraceDaysOnInetErr = 14

Would give the user the desired 14 days of grace period without internet? I understand that you don't want to recommend this setting in general to avoid the increased server hammering. However it is important for me to understand the process, so that my users have the best possible experience.

Using "1" for either value is unreasonable. The best default is what we recommend: 90, 14.

If you want to check once a week, that is fine. Maybe something like 7,7.

As recommended by Wyatt, I use IsGenuineEx with 90/14.

In addition, my app will call IsGenuine once every 24 hours, but ignores its return value. This is a daily check for updated license fields. Plus, when the call succeeds, it restarts the 90 day counter, which I also like. As I understand it, when calls to IsGenuine fail, this has no effect on the day counting done by IsGenuineEx.

On any given day, my "active" users number fewer than a dozen or two, not thousands or more. Some users go weeks or months between sessions of using my app.

I like smooth sailing with no rough spots, especially for my users, and I think this does it for me. But your mileage may vary.

I'm sure Wyatt will chime in if he sees a flaw in my logic.

Your shouldn't be calling IsGenuine() every day. There's no point in it. Are you updating the custom license fields every day? If so, then maybe using custom license fields is not the best use for whatever data you're storing.

Using IsGenuineEx() on every startup with reasonable values (like 90, 14) is sufficient.

A user might use my app on the 89th day, and then not start my app for 30 days, and then go on the road any try to use my app where there is no internet. That is a very valid scenario for the type of application I sell, and the types of users that use it.

For me, the number of users on Lime licenses on any given day is pretty small. The way I've implemented calls to IsGenuine won't be generating much activity for your servers, but it will help prevent times like the above when the user would get an unpleasant surprise when he tries to use my app.

I should have added that instead of daily calls to IsGenuine, it could be weekly or biweekly. I would have done that if I had thousands of users.

I see this as a nice complement to calling IsGenuineEx(90/14). But it's not for everyone.