View previous topic :: View next topic |
Author |
Message |
Javier
Joined: 09 Oct 2009 Posts: 215
|
Posted: Wed Mar 14, 2018 9:45 pm Post subject: Authenticated licenses with a Maintenance Plan |
|
|
I want to add a Maintenance Plan to my licenses. It means that the user will need to purchase an annual plan in order to receive tech support and free upgrades.
I saw the expiry date feature for time-limited subscriptions, but this is not exactly what I want. If after a year the user doesn't renew the Maintenance Plan, then the license will continue working, but some features of the application will not work anymore, and in addition the user will not be able to move the license to another computer.
How can I implement this? Thank you. |
|
Back to top |
|
|
Javier
Joined: 09 Oct 2009 Posts: 215
|
Posted: Thu Mar 15, 2018 12:47 am Post subject: |
|
|
I was reading your answers to similar posts, and probably the best way to do it is entering the expiry date as Authentication Data, and then compare to today's date internally. My question is what format is the information in Authentication Data? Is it a string? Can I enter the expiry date as mm/dd/yyyy format? Not sure how to get that value in my application once the license is authenticated.
How can I check that the clock has not been tampered? Thank you.
Thank you. |
|
Back to top |
|
|
Infralution
Joined: 28 Feb 2005 Posts: 5027
|
Posted: Thu Mar 15, 2018 7:03 am Post subject: |
|
|
You can put your maintenance expiry date in the AuthenticationData like you suggest or you can use the built in ExpiryDate and uncheck the "Disable Expired Licenses" option in the Product Dialog. In this case you can continue using the license once the expiry date is reached and your code can just read the AuthenticatedLicense.ExpiryDate property and make decisions based on this. The only drawback with this approach is that you can't then also use the ExpiryDate as a true license expiry date.
The AuthenticationData is just a string. If you go down this approach then you should ensure that you convert the date to/from a string using a fixed format or InvariantCulture to ensure you don't get issues with customers who have different culture settings to you.
You can use an instance of the RegistryEvaluationMonitor to check for clock winding. The Invalid property will be set to True if the evaluation monitor detects clock winding. _________________ Infralution Support |
|
Back to top |
|
|
Javier
Joined: 09 Oct 2009 Posts: 215
|
Posted: Sat Mar 17, 2018 4:56 pm Post subject: |
|
|
I will use the AuthenticationData approach.
Regarding the question about limiting the ability to move the license to another computer, how can I do this? I think it has to do with the number of authentications / deauthentications, but how do I control this from my application if it detects that the maintenance is expired?
If the user renews his maintenance subscription, do I have to send another license key to this user? If not, how do I change the expiry date in a license that was already authenticated? |
|
Back to top |
|
|
Infralution
Joined: 28 Feb 2005 Posts: 5027
|
Posted: Sun Mar 18, 2018 1:57 am Post subject: |
|
|
Quote: | Regarding the question about limiting the ability to move the license to another computer, how can I do this? I think it has to do with the number of authentications / deauthentications, but how do I control this from my application if it detects that the maintenance is expired? |
Personally I would not limit customers from transferring their license to another computer in this circumstance. If part of the software licensing agreement is a perpetual license then my expectation as a customer would be that I could transfer that to another computer if required. If you really did want to go down this path then to implement it would probably require a modification to the Authentication Server to prevent users deauthenticating once the maintenance expiry date was reached. This effectively would prevent them from transferring a license.
Quote: | If the user renews his maintenance subscription, do I have to send another license key to this user? If not, how do I change the expiry date in a license that was already authenticated? |
You can just update the AuthenticationData for their existing key. They can either reinstall their existing key - or if you are using Background Reauthentication this should happen automatically when they are next reauthenticated. _________________ Infralution Support |
|
Back to top |
|
|
Javier
Joined: 09 Oct 2009 Posts: 215
|
Posted: Sun Mar 18, 2018 2:43 pm Post subject: |
|
|
Quote: | Personally I would not limit customers from transferring their license to another computer in this circumstance. If part of the software licensing agreement is a perpetual license then my expectation as a customer would be that I could transfer that to another computer if required. |
I can see your point, but somehow I have to limit the capacity of the user to do certain things, otherwise he will simply ignore the maintenance renewal, and probably also will ignore to purchase the upgrade. One of my competitors is currently doing this, by limiting the capacity to move to another computer, so I won't be the first one.
The idea behind the maintenance plan is precisely to create a sense of necessity and therefore commit yourself with the software provider. If not completely eliminate the capacity to move the license, I do want to limit the number of license transfers, maybe one transfer per year or so. What do you think? I would like to hear the opinion of other developers as well. Thank you. |
|
Back to top |
|
|
Infralution
Joined: 28 Feb 2005 Posts: 5027
|
Posted: Mon Mar 19, 2018 3:43 am Post subject: |
|
|
If you are selling maintenance then I wouldn't sell upgrades separately. If they want an upgrade (or any bug fixes) then your customers have to purchase maintenance. I think this generally provides enough incentive for customers to upgrade. Most customers don't appreciate being forced into upgrades or maintenance for things that they feel like they should be entitled to anyway. You may lose more customers then the small increase in revenue is worth.
If you do want to proceed with this then you could change the Authentication Server source code so that if the maintenance contract has expired then the number of allowed deauthentications is reduced or set to zero. _________________ Infralution Support |
|
Back to top |
|
|
Javier
Joined: 09 Oct 2009 Posts: 215
|
Posted: Mon Mar 19, 2018 2:20 pm Post subject: |
|
|
Quote: | If you are selling maintenance then I wouldn't sell upgrades separately. |
I agree, but now I'm in the transition to maintenance-only approach. For the new users this is absolutely right, but all the existing users that purchased a license last year for example, will not expect to pay an additional maintenance fee now. They purchased a perpetual license of a certain version of the application and nobody told them about maintenance at the time of purchasing. I'm curious how this transition should be done to avoid bad feelings among users. Your opinion is well appreciated. Thank you. |
|
Back to top |
|
|
Infralution
Joined: 28 Feb 2005 Posts: 5027
|
Posted: Tue Mar 20, 2018 12:44 am Post subject: |
|
|
I would consider giving existing customers 1 year maintenance from the time that they purchased. This is fairly common - you bundle the price of the first years maintenance into the initial purchase price. _________________ Infralution Support |
|
Back to top |
|
|
Higdon
Joined: 20 Mar 2018 Posts: 1
|
Posted: Fri Mar 30, 2018 4:37 pm Post subject: |
|
|
Infralution wrote: | I would consider Crazy Bulk and giving existing customers 1 year maintenance from the time that they purchased. This is fairly common - you bundle the price of the first years maintenance into the initial purchase price. |
This makes a lot of sense. It really makes my decisions easier when I see an offer like that. Means I'll have a lot less headache the first year of use, which is often times the hardest as well.
Last edited by Higdon on Wed Oct 19, 2022 10:52 am; edited 2 times in total |
|
Back to top |
|
|
Javier
Joined: 09 Oct 2009 Posts: 215
|
Posted: Mon Apr 22, 2019 1:56 pm Post subject: |
|
|
Quote: | The AuthenticationData is just a string. If you go down this approach then you should ensure that you convert the date to/from a string using a fixed format or InvariantCulture to ensure you don't get issues with customers who have different culture settings to you.
|
Would you mind to share the required lines of code to do this comparison? Thank you. |
|
Back to top |
|
|
Infralution
Joined: 28 Feb 2005 Posts: 5027
|
Posted: Wed Apr 24, 2019 3:45 am Post subject: |
|
|
Here is some code:
Code: | DateTime writeDate = DateTime.Now;
string dateString = writeDate.Value.ToString("u")
DateTime readDate = DateTime.Parse(dateString, CultureInfo.InvariantCulture).ToUniversalTime() |
_________________ Infralution Support |
|
Back to top |
|
|
Javier
Joined: 09 Oct 2009 Posts: 215
|
Posted: Wed Apr 24, 2019 4:00 am Post subject: |
|
|
I stored the date when the license was issued in AuthenticationData. Could you please share the code to get that string in the application? Thank you. |
|
Back to top |
|
|
Infralution
Joined: 28 Feb 2005 Posts: 5027
|
Posted: Wed Apr 24, 2019 4:05 am Post subject: |
|
|
The AuthenticationData is just a property on the license object eg
Code: | if (_licenseProvider.IsValid(_license))
{
string authenticationData = _license.AuthenticationData;
_licenseProvider.StartBackgroundReauthentication();
}
|
_________________ Infralution Support |
|
Back to top |
|
|
Javier
Joined: 09 Oct 2009 Posts: 215
|
Posted: Fri Aug 09, 2019 1:24 pm Post subject: |
|
|
I'm using ILS 5.11. It seems that AuthenticationData is a property of _localLicense, but not a property of _floatingLicense. Not sure if this has changed in the latest version. Is it possible to read the AuthenticationData in a floating network license? Thank you. |
|
Back to top |
|
|
|