DaysBetweenChecks & GracePeriodLengthAnswered

*Forgive me if this is spelled out better somewhere, I did look. 
Hi.  If I am reading this correctly… assume I have TurboActivate set as follows:

DaysBetweenChecks = 30
GracePeriodLength = 14

This means, that:

  1. If the user connects with the server today, and uses the software every day, it will not try to connect to the server again for 30 days.   If, after 30 days, it cannot connect, then it starts a 14 day clock as a grace period.  Correct?
    1. Assuming that is true.  Does it warn every day for those 14 days to reverify?  
    2. And would that essentially just be showing the ReVerifyNow form?  
    3. Or is there some other place I should edit the verbiage.
  2. Ideally, in my case I would prefer, the system attempt to connect every day.
    If it has been ‘DaysBetweenChecks’ days and been unable to connect, 
    1. then the Grace period would begin and we would start warning each day until either connection was successful or GracePeriodLength days has passed, in which case we would set isGenuine to false.

Can I make it work the way I want?

Also, is there a method to actively tell it to connect to the server?  This from TurboActivate.vb tells me it should do it, but when I disable my internet connection, and call it, it comes back as TA_OK


        ''' <summary>Checks whether the computer is genuinely activated by verifying with the LimeLM servers.</summary>
       ''' <returns>IsGenuineResult</returns>
       Public Function IsGenuine() As IsGenuineResult

I need this because I am going to build in expiration into the custom fields.  So it is conceivable that the user has updated their license, but the local copy is showing a different expire date.  So, giving them a way to actively ‘Refresh’ would be helpful.

Thanks!

If I could add 1 more question to the above.  Not really related, but might as well keep my q's to 1 post for now.

I am struggling a bit with Verified Trial functionality.  My app is an add-in.  So I dont want any messages showing when we call ShowTrial()  I just want to know whether we are using a trial license and whether it has expired.

In that instance do I even need to call ShowTrial?

Or can I just call useTrial() upon Startup.  Track expired with TrialDaysRemaining().
Then if NOT isGenuine we know we are using trial?  And if TrialDaysRemaining <1 I know it is expired.

Sorry if I am being dense here.  It is really hard to debug this as my programming machine is TrialDaysRemaining=0.  (I understand why you do not have a function to clear that - but it does make debugging a bit difficult.)

Thanks again.

Answer

If the user connects with the server today, and uses the software every day, it will not try to connect to the server again for 30 days.   If, after 30 days, it cannot connect, then it starts a 14 day clock as a grace period.  Correct?

Yep.

Assuming that is true.  Does it warn every day for those 14 days to reverify?  

Nope. The API doesn't show any warnings or errors to users whatsoever. You're in control of the UI / UX. Use TA_GenuineDays() if you want to show UIs of some sort.

And would that essentially just be showing the ReVerifyNow form?  

The reverify form is after the X + Y days has elapsed.

Ideally, in my case I would prefer, the system attempt to connect every day.
If it has been ‘DaysBetweenChecks’ days and been unable to connect, 

  1. then the Grace period would begin and we would start warning each day until either connection was successful or GracePeriodLength days has passed, in which case we would set isGenuine to false.

You can do that, but it's not recommended. There are very few reasons to re-verify with the servers so often unless you're *constantly* changing custom license fields or your level of credit card fraud is extremely high.

Which, I'm guessing neither of those things is happening. So, sticking with the defaults is the best option.

Also, is there a method to actively tell it to connect to the server?  This from TurboActivate.vb tells me it should do it, but when I disable my internet connection, and call it, it comes back as TA_OK

There's a local cache from causing users of TA to hammer our activation servers on “internet failure”. So, it works, but “testing it” often will result in TA ignoring some requests.

Calling it normally will result in normal behavior.

Or can I just call useTrial() upon Startup.  Track expired with TrialDaysRemaining().
Then if NOT isGenuine we know we are using trial?  And if TrialDaysRemaining <1 I know it is expired.

Yes, you could do that.

Sorry if I am being dense here.  It is really hard to debug this as my programming machine is TrialDaysRemaining=0.  (I understand why you do not have a function to clear that - but it does make debugging a bit difficult.)

Just extend the trial.

Thanks for the reply. All good answers.

Ideally, in my case I would prefer, the system attempt to connect every day.
If it has been ‘DaysBetweenChecks’ days and been unable to connect, then the Grace period would begin and we would start warning each day until either connection was successful or GracePeriodLength days has passed, in which case we would set isGenuine to false.

You can do that, but it's not recommended. There are very few reasons to re-verify with the servers so often unless you're *constantly* changing custom license fields or your level of credit card fraud is extremely high.
Which, I'm guessing neither of those things is happening. So, sticking with the defaults is the best option.


Hmm. My products are subscription based. If/when they expire and/or renew and extend expiration date (in a custom field), it seems that 90 days (or even 7) would be too long for the changes to propagate, no?

I feel like there is a piece of this I am not understanding and maybe the defaults DO work for me if you can explain what I am missing please.

But…. I am going to ask the next question under the assumption I am going to set daysbetweenchecks=1 and GracePeriodLength =30. Then, I will track daysSinceConnected myself to warn if we are getting close to grace ending. 
So, this will attempt to connect to server at least once per day, right? 
How can I know whether the isGenuineResult (which is valid)  actually did connect to the server so I can track when to show warnings?  The only thing I can find is to perhaps tap into inGracePeriod  during the isGeniune check.  If inGracePeriod=True then do I know that it did not successfully connect to the server TODAY?  Then, I can save and track when we last connected.

Thanks!

In practice customers will not be renewing their subscription every day. They'll either do it annually or monthly. So, setting days between checks as 30 should be fine. Also, showing a prompt when the custom license field has expired and they've already recently re-verified with the servers.

Hi Wyatt.  Sorry to be so dense.  Yes, renewing/sub would happen yearly in my case.
So, lets say the last time the system spoke to the servers happened to be 1 day before renewal.  (using your DaysBetweenChecks=30), then it would be 29 days until the software even attempts to connect to the server, right?  So, a user could be expired and still using it for 45 days - or worse and what I am really concerned with - renewed and unable to refresh the new expiration date?

Am I misunderstanding DaysBetweenChecks all together?  Does it somehow actually connect if the connection is available during those 30 days?

then it would be 29 days until the software even attempts to connect to the server, right?

If you didn't handle the edge-cases by calling again, once, with TA_IsGenuine(). But you should handle those edge-cases.

Does that make sense?

, edited

Sorry.  No.  What is an “Edge Case”?  ‘calling again, once’??

I call TA_IsGenuine() everytime the software starts up.  I am under the impression that if DaysBetweenChecks=30 then the sofware will not attempt to contact the server again for 30 days after it's last successful connect (only check the local license). 

What is an “Edge Case”?  

It's a general programming term referring to a case that's not covered by the “default code path”.

I call TA_IsGenuine() everytime the software starts up.  I am under the impression that if DaysBetweenChecks=30 then the sofware will not attempt to contact the server again for 30 days after it's last successful connect (only check the local license). 

Correct. And that's the behavior you want.

Then, if TA_GetFeatureValue("your_expiration_field_name") == [today date] AND the DaysRemaining from TA_GenuineDays() is < 30, then (and only then) call TA_IsGenuine() a single time to see if they've renewed.

Otherwise just show a dialog that they customer needs to renew with you on the website (and a button to click to re-check after they've renewed with you).

Does that make sense?

Thanks for continuing to play with me.  I think we are getting close to my misunderstanding.

If my assumption above is correct - as you said it was…. then how would calling TA_IsGenuine() a second time try to connect when it didnt the first time.  Is that the piece I am missing.  Calling it twice forces an attempt to the server?

click to re-check after they've renewed with you

This is the question I was asking all the way at the top.  I dont see any documentation that tells me how to force it connecting with the server.  If TA_GenuineDays() is < 30 then calling TA_IsGenuine() does NOT connect to the server. 

Repeating the paragraph above now.  ‘click to re-check’ would have to call TA_IsGenuine() twice and it will attempt to connect (not just load the local license)?
 

>> then calling TA_IsGenuine() does NOT connect to the server. 


It does. Just not if you call it multiple times in a row.

, edited