| |
Developing Applications Using The SoftwareShield System
> Creating Licensing Solutions
> Available License Models >
Pay-Per-Use (of a feature) License Model
Pay-Per-Use (of a
feature) License Model
This model is an extension of the Pay-Per-Feature
model and allows you to deliver software for which a user must individually
pay for each use of a feature.
Features can be as simple as the functionality behind a button click or
the ability to dynamically load a binary module. In this model features
are completely independent from one another and the uses for each of them
can be individually purchased and activated.
Overview - How to Integrate the Pay-Per-Use (of a feature) License
Model
Into Your Application
In this model, you will use a General Use Authorization Definition for
each of the pay-per-use protected features. You will interpret the stored
parameter value in the definition as the number of (pre) paid uses remaining
for that feature. The maximum number of
features you can protect with the pay-per-use (of a feature) license model
is 64. The maximum number of uses that a single feature can contain at
any one time is 65,536.
The
first step is to design the license. Ensure
that your license has the necessary Authorization Definitions built into
it. Create a number of General Use Authorization Definitions - one for
each feature that is pay-per-use. Be
sure that the definition uses a parameter value, as this will serve as
the storage location for the number of paid uses remaining. You
may wish to "pre-set" the license with a number of "complimentary
uses" of your features to let the user understand the process and
how great your features are.
Once
you are satisfied with your license, compile a distributed copy of it.
The distributed copy is encrypted and compressed and only contains absolutely
necessary information for the enforcement of your license. Place a copy
of this distributed license in your applications directory. If you have
decided to use steganographic alias files, make sure that they are also
in the application directory. Have a look at the programming notes file
that the SoftwareShield License Manager creates for your specific license.
This will make your programming a little easier by supplying you with
the code you will need to invoke the start up event. Please see Deploying
the License for Your Application for more detailed information about
deploying your license.
Next,
in your programs startup event (main form load etc.) create an instance
of the ClientProtector object and immediately call its StartUp
function. You will have to pass specific parameters such as the license
name, main license file password, and the finger print options code -
but this code will have been already written for your convenience when
you compiled your license - just look in the programming notes file created
by the SoftwareShield License Manager. Have a look at the exact details
of the StartUp function for more information on making this call.
Now,
once the ClientProtector StartUp call returns and the license state is
as you expect it to be - determine which features (if any) are activated
(have unused uses remaining):
Call
GetAuthorizationDetails
or GetAuthorizationDetailsEx
for the General Use Authorization Definition(s)
you have defined to hold the state of your features.
Interpret
the stored parameter value of the definition to determine which features
(if any) are have unused uses remaining. The
stored parameter value represents that number for the feature associated
with the definition you are inspecting.
When
the user "uses" your protected feature, you must decrement the
uses remaining count for that feature. To do this, call GetAuthorizationDetails
or GetAuthorizationDetailsEx, decrement the count of the stored parameter
and then call SetAuthorizationDetails or SetAuthorizationDetailsEx being
sure to pass the new value. If
the value reaches zero - be sure to update your UI to reflect that there
are no more uses remaining.
To
Activate the users license and add uses to your protected features you
will have to construct a numeric parameter that represents the number
of new uses they have purchased from you.
You
must be careful not to destroy any remaining unused uses when the user
activates a new Activation Code. The
successful activation of a General Use Authorization Definition always overwrites
any existing stored parameter value with the parameter value embedded
inside the Activation Code. To
be sure not to destroy any unused uses, before any call to input a new
Activation Code do the following:
Call
GetAuthorizationDetails or GetAuthorizationDetailsEx to temporarily store
the unused uses in memory for each protected feature.
Call
SetAuthorizationDetails or SetAuthorizationDetailsEx to set the Activated
state of each definition to false.
Allow
the Activation Code input to proceed. If successful, check the Activated
state of each definition, if any one is set now true, the definition was
activated and the stored parameter value is the number of uses to "add".
In this
case, add the new number in the definition to the number of unused uses
you previously stored and re-set them into the definition using SetAuthorizationDetails
or SetAuthorizationDetailsEx.
You
may (optionally) need to re-set the activated state in the definitions
depending on how your program interprets these values elsewhere.
|