U.S. patent application number 13/198809 was filed with the patent office on 2012-02-09 for system and method for rewarding application actions.
Invention is credited to Johnny Chan, Hwan-Joon Choi, Ryan Johns, Amir Manji, Stephen McCarthy, Steve Tan, Linda Tong.
Application Number | 20120036003 13/198809 |
Document ID | / |
Family ID | 45556811 |
Filed Date | 2012-02-09 |
United States Patent
Application |
20120036003 |
Kind Code |
A1 |
Tong; Linda ; et
al. |
February 9, 2012 |
SYSTEM AND METHOD FOR REWARDING APPLICATION ACTIONS
Abstract
A system and method for tracking performance of an action in an
application is disclosed in which a link to perform the application
action is transmitted to a client device. In response to receiving
an indication of the selection of the link, the performance of the
action in the application by the client device is detected. Based
on the detected performance of the application action, reward data
is associated with a user of the client device.
Inventors: |
Tong; Linda; (San Francisco,
CA) ; Manji; Amir; (San Francisco, CA) ;
Johns; Ryan; (San Francisco, CA) ; McCarthy;
Stephen; (San Francisco, CA) ; Choi; Hwan-Joon;
(Pleasanton, CA) ; Tan; Steve; (San Francisco,
CA) ; Chan; Johnny; (Richmond, CA) |
Family ID: |
45556811 |
Appl. No.: |
13/198809 |
Filed: |
August 5, 2011 |
Related U.S. Patent Documents
|
|
|
|
|
|
Application
Number |
Filing Date |
Patent Number |
|
|
61371500 |
Aug 6, 2010 |
|
|
|
Current U.S.
Class: |
705/14.39 |
Current CPC
Class: |
G06Q 30/0207 20130101;
H04W 4/60 20180201; G06F 8/61 20130101; G06Q 30/0239 20130101; H04W
4/21 20180201 |
Class at
Publication: |
705/14.39 |
International
Class: |
G06Q 30/00 20060101
G06Q030/00 |
Claims
1. A computer-implemented method comprising: transmitting, to a
client device, a link to perform an action in an application;
responsive to receiving an indication of a selection of the link,
detecting, by at least one processor, the performance of the action
in the application by the client device; and associating reward
data with a user of the client device in response to the detecting
of the performance of the action by the client device.
2. The computer-implemented method of claim 1, wherein the link is
associated with a referral offer to perform the action in the
application, and further comprising storing access by the client
device to the referral offer.
3. The computer-implemented method of claim 1, further comprising:
receiving a credit from an advertiser, the credit being deposited
in an advertiser account, wherein a portion of the credit is to be
paid for every performance of the action; storing financial
transaction data corresponding to the associated reward data;
adjusting a value in the advertiser account to account for the
performance of the action; and adjusting a value in a publisher
account to account for the performance of the action.
4. The computer-implemented method of claim 1, wherein the
detecting of the performance of the action comprises at least one
of: receiving a first indication from the application executing on
the client device, the first indication corresponding to an
initiation of the performance of the action; and receiving a second
indication from the application executing on the client device, the
second indication corresponding to a completion of the performance
of the action.
5. The computer-implemented method of claim 4, further comprising
determining an amount of time elapsed between the receiving of the
first indication and the receiving of the second indication,
wherein based on the amount of time elapsed exceeding a
predetermined amount of time, notifying the client device of an
expiration of an offer to perform the action.
6. The computer-implemented method of claim 1, further comprising
storing the detection of the performance of the action, the storing
of the detection including storing a unique device identifier
(Udid) of the client device and an application action identifier
(action ID) corresponding to the action being performed.
7. The computer-implemented method of claim 1, wherein the reward
data is one of a virtual currency amount and a virtual good.
8. The computer-implemented method of claim 1, further comprising:
receiving a registration of the action in the application to be
performed; and generating an application action identifier (action
ID) and action code, the action ID corresponding to the action, and
the action code causing the client device to transmit at least one
of a first indication and a second indication when the action is
respectively initiated and completed.
9. The computer-implemented method of claim 8, further comprising:
mapping the action ID to the action; storing the action ID and
action code with the registration of the action; inserting the
action code in the application using a registered protocol handler;
and re-directing the user operating the client device to the
application.
10. A system comprising: at least one processor; a referral module,
implemented by the at least one processor, configured to generate a
link to perform an action in an application; an application usage
module, implemented by the at least one processor, configured to
detect a performance of the action in the application by a client
device; a communication module, implemented by the at least one
processor, configured to: transmit the link to the client device;
receive an indication of the performance of the application action
from the client device; and transmit reward data associated with a
user of the client device in response to the detected performance
of the action in the application by the client device.
11. The system of claim 10, wherein the link is associated with a
referral offer to perform the action in the application, and
further comprising a database interface module configured to store
access by the client device to the referral offer.
12. The system of claim 10, wherein the application usage module is
configured to detect the performance of the action by at least one
of: receiving a first indication from the application executing on
the client device, the first indication corresponding to an
initiation of the performance of the action in the application; and
receiving a second indication from the application executing on the
client device, the second indication corresponding to a completion
of the performance of the action in the application.
13. The system of claim 12, wherein the application usage module is
further configured to determine an amount of time elapsed between
the receiving of the first indication and the receiving of the
second indication, wherein based on the amount of time elapsed
exceeding a predetermined amount of time, the communication module
is further configured to notify the client device of an expiration
of an offer to perform the action.
14. The system of claim 10, further comprising a database interface
module configured to store the detection of the performance of the
action, the storing of the detection including storing a unique
device identifier (Udid) of the client device and an application
action identifier (action ID) corresponding to the action being
performed.
15. The system of claim 10, wherein the reward data is one of a
virtual currency amount and a virtual good.
16. The system of claim 10, wherein the referral module is further
configured to: receive a registration of the action to be
performed; and generate an application action identifier (action
ID) and action code, the action ID corresponding to the action, and
the action code causing the client device to transmit at least one
of a first indication and a second indication when the action is
respectively initiated and completed.
17. The system of claim 16, wherein the referral module is further
configured to map the action ID to the application action, and
further comprising: a database interface module configured to store
the action ID and action code with the registration of the action;
a deep linking module configured to: insert the action code in the
application using a registered protocol handler, the action code
re-directing the user operating the client device to the
application.
18. A non-transitory machine-readable medium storing a set of
instructions that, when executed by at least one processor, causes
the at least one processor to perform operations comprising:
transmitting, to a client device, a link to perform an action in an
application; responsive to receiving an indication of a selection
of the link, detecting, by at least one processor, the performance
of the action in the application by the client device; and
associating reward data with a user of the client device in
response to the detected performance of the action by the client
device.
19. The non-transitory machine-readable medium of claim 18, wherein
the link is associated with a referral offer to perform the action
in the application, and further comprising storing access by the
client device to the referral offer.
20. The non-transitory machine-readable medium of claim 18, wherein
the detecting of the performance of the action in the application
comprises at least one of: receiving a first indication from the
application executing on the client device, the first indication
corresponding to an initiation of the performance of the action;
and receiving a second indication from the application executing on
the client device, the second indication corresponding to a
completion of the performance of the action.
21. The non-transitory machine-readable medium of claim 20, wherein
the operations further comprise determining an amount of time
elapsed between the receiving of the first indication and the
receiving of the second indication, wherein based on the amount of
time elapsed exceeding a predetermined amount of time, notifying
the client device of an expiration of an offer to perform the
action.
22. The non-transitory machine-readable medium of claim 18, wherein
the operations further comprise storing the detection of the
performance of the action, the storing of the detection including
storing a unique device identifier (Udid) of the client device and
an application action identifier (action ID) corresponding to the
action being performed.
23. The non-transitory machine-readable medium of claim 18, wherein
the reward data is one of a virtual currency amount and a virtual
good.
24. The non-transitory machine-readable medium of claim 18, wherein
the operations further comprise: receiving a registration of the
action in the application to be performed; and generating an
application action identifier (action ID) and action code, the
action ID corresponding to the application action, and the action
code causing the client device to transmit at least one of a first
indication and a second indication when the action is initiated and
completed.
25. The non-transitory machine-readable medium of claim 24, wherein
the operations further comprise: mapping the action ID to the
action; storing the action ID and action code with the registration
of the action; inserting the action code in the application using a
registered protocol handler; and re-directing the user operating
the client device to the application.
Description
CROSS-REFERENCE TO RELATED APPLICATIONS
[0001] This application claims priority under 35 U.S.C. .sctn.119
to U.S. Provisional Patent Application No. 61/371,500, filed Aug.
6, 2010, and entitled "SYSTEM AND METHOD FOR REWARDING APPLICATION
INSTALLS," which application is incorporated by reference herein in
its entirety.
FIELD
[0002] Example embodiments of the present application generally
relate to an application platform, and more specifically, to
techniques for detecting actions performed in applications.
BACKGROUND
[0003] Online advertising models generally involve the delivery of
advertisements or offers to users over one or more advertising
channels. The effectiveness of the offers, however, varies,
depending on the type of offer and the channel used to deliver the
offer. In particular, one reason a user may ignore an offer is that
there is no incentive for the user to follow the offer.
BRIEF DESCRIPTION OF THE DRAWINGS
[0004] In the drawings, which are not necessarily drawn to scale,
like numerals describe substantially similar components throughout
the several views. Like numerals having different letter suffixes
represent different instances of substantially similar components.
The drawings illustrate generally, by way of example, but not by
way of limitation, various embodiments discussed in the present
document.
[0005] FIG. 1 is a block diagram illustrating a networked
environment within which a client or mobile device connects, via a
network, with an application server, while a referral system
monitors the connection, according to some embodiments.
[0006] FIG. 2 is a flow diagram illustrating example interactions
between a client device, a reward machine, and an application
store, according to some embodiments.
[0007] FIG. 3 is a flow diagram illustrating example interactions
between a client device, a reward machine, and an application
developer, according to some embodiments.
[0008] FIG. 4 is a flow diagram illustrating example interactions
between a reward machine, an advertiser, and a publisher in
response to a user action, according to some embodiments.
[0009] FIG. 5 is a block diagram showing modules of an application,
running on a client device, and modules of a reward system, running
on a server, according to some embodiments.
[0010] FIG. 6 is a flowchart illustrating an example method for
tracking and incentivizing application installs, according to some
embodiments.
[0011] FIG. 7 is a flowchart illustrating an example method for
delivering and monitoring targeted pay-per-action events occurring
within an application, according to some embodiments.
[0012] FIG. 8 is a flowchart illustrating an example method for
registering and mapping actions occurring within an application to
a pay-per-action model, according to some embodiments.
[0013] FIG. 9 is a flowchart illustrating an example method for
tracking and incentivizing the performance of actions within an
application, according to some embodiments.
[0014] FIG. 10 illustrates a diagrammatic representation of machine
in the example form of a computer system within which a set of
instructions, for causing the machine to perform any one or more of
the methodologies discussed herein, may be executed.
DETAILED DESCRIPTION
[0015] The following detailed description includes references to
the accompanying drawings, which form a part of the detailed
description. The drawings show illustrations in accordance with
example embodiments. These embodiments, which are also referred to
herein as "examples," are described in enough detail to enable
those skilled in the art to practice the invention. It will be
apparent to one skilled in the art that specific details in the
example embodiments are not required in order to practice the
present invention. For example, although the example embodiments
are disclosed with reference to client devices, the teachings of
the present disclosure can be used in other environments wherein
applications are downloaded, installed, and executed. The example
embodiments may be combined, other embodiments may be utilized, or
structural, logical and electrical changes may be made without
departing from the scope what is claimed. The following detailed
description is, therefore, not to be taken in a limiting sense, and
the scope is defined by the appended claims and their
equivalents.
[0016] In a mobile environment, applications may be offered for
download at a centralized site, such as an application store or
market ("app store"). Applications in the app store may be listed
by a variety of metrics, such as by category, popularity, and cost.
As concerns applications provided for download in an app store, a
publisher may refer to the entity that publishes or otherwise
provides an application for download by users. An advertiser may
refer to an entity that provides an offer, usually in the form of
an action to be taken by the user.
[0017] FIG. 1 is a block diagram illustrating an example embodiment
of a networked environment in which a client device connects, via a
network, to an application server hosting an application store.
Referring to FIG. 1, client devices 102 and 104, each storing one
or more applications 106, may connect via a network 108, such as
the Internet, to an application server 120 executing an application
store 122. Client devices 102 and 104 may be re-directed to the app
store 122 to download application(s) via the network 108.
[0018] Web server 110 may host a website for a mobile application
platform that connects advertisers and publishers. Web server 110
may provide various hosted web services to the website, including
code deployment and testing, online analytics, data storage, and
task management. Web server 110 may be connected to one or more
databases 112 that store data associated with the website, among
other things. In an example embodiment, web server 110 may be an
Amazon.com hosted web server providing web services. However, it is
contemplated that different third party hosted providers of web
services may be used, or servers associated with the website may
provide web services without resort to third party-provided web
services. Additional web servers (not shown) may include servers
associated with the hosted website.
[0019] In some embodiments, the one or more databases 112 may be
SimpleDB distributed databases. SimpleDB distributed databases use
a key-value pair to enable fast lookup and retrieval operations as
compared to structured query language (SQL) databases. It is
contemplated that other databases employing key-value pairs to
store and index data may be used. In some embodiments, at least one
of the databases 112 may be a SQL database. Data associated with
the website, such as user data and application tracking data, also
may be stored in cache server 114. Cache server 114 may include
memory 116, in the form of RAM, for example, that stores part or
all of the data stored in database(s) 112. Cache server 114 may
operate as a backup or supplemental data store for the website. In
some embodiments, cache server may be a Memcached distributed
memory caching system. Publisher server 118 may either serve as the
source of applications downloaded to a client device 102 or 104 or
provide the applications to the application server 120 for storage
and listing in the app store 122. Similarly, advertiser server 120
may provide and deliver advertisements to client device 102 or 104
on behalf of advertisers or advertising networks or may provide
advertisements via the network 108 to the application server 120
for the application server 120 to deliver.
[0020] FIG. 2 is a flow diagram illustrating example interaction
between a client device, a reward machine, and an application
store, in accordance with an example embodiment. Referring to FIG.
2, when an application using or associated with the website ad
platform executes, a call is made to the reward machine. In some
embodiments, the reward machine may be part of a reward system or
platform that comprises a website, one or more web servers
providing web services, and one or more data storage devices,
either distributed and accessible via the network 108 or connected
to the one or more web servers. The call may be in the form of a
ping initiated by software code in the application. The ping is
pushed to the reward machine.
[0021] At block 208, a reward machine(s) 204 associated with the
reward platform may deliver an advertisement to the client device
202 executing the application. The reward machine(s) may track the
display of the advertisement so that the platform may record the
advertisement impression. At block 210, the client device 202 may
receive the advertisement. The advertisement may be an offer or a
referral related to the application being executed on the client
device 202. In some embodiments, the referral offer may prompt the
user to download a different application in exchange for a reward
or incentive. In some embodiments, the reward or incentive may be
virtual currency or a virtual good for use with the executing
application. The virtual currency may be used to purchase virtual
or actual goods associated with the executing application. At block
212, the client device 202 accesses the referral, such as by
clicking a URL or hyperlink. In some embodiments, the referral may
direct the user to the app store 206, and in some embodiments, to
the referred application in the app store 206.
[0022] At block 214, when the user clicks on the referral, the
referral is directed to the reward machine(s) 204, where it is
tracked and stored. In some embodiments, the unique device
identifier ("Udid") for the client device 202 that accessed the
referral is stored. Although Udid is the term commonly associated
with a device identifier for client devices operating the Apple iOS
mobile operating system, the present application is not intended to
be limited to client devices operating the iOS operating system or
device identifiers associated only with the iOS operating system.
The use of the term "unique device identifier" or "Udid" in the
present application may refer to any device identifier associated
with any operating system, including, but not limited to, device
IDs commonly associated with client devices operating the Android
operating system, the Palm operating system, and the Blackberry
operating system. In some embodiments, an application identifier
("AppID") associated with the referred application also is stored.
It is contemplated that other identification information may be
stored as well, including an Internet Protocol ("IP") address, a
Media Access Control ("MAC") address, or an account identifier,
such as a client device account identifier (e.g., a telephone
number) or a third party account identifier (e.g., Facebook.RTM.
username, Apple.RTM. account identifier, Google.RTM. account
identifier). Once stored, the reward machine(s) 204 may redirect
the user to the app store 206.
[0023] At block 216, the client device 202 may be re-directed to
the referred application in the app store. At block 218, the
referred application may be downloaded from the app store 206 to
the client device 202. At block 220, the client device 202 may
install the referred application. In some embodiments, the reward
machine(s) 204 may have no knowledge of whether the client device
202 actually downloaded the referred application from the app store
206 because the reward machine(s) 204 may not have access to the
mechanisms and inner workings of the app store 206.
[0024] At block 222, the client device 202 may execute the
installed application. A script or other code included in the
referred application by the reward machine(s) 204 or by an
advertiser may trigger the referred application to ping or
otherwise push data to the reward machine(s) 204 of the reward
platform. The ping may indicate to the reward platform that the
client device 202, as identified by its Udid, has executed the
referred application.
[0025] At block 224, the reward platform may verify whether a
referral conversion has occurred. A referral conversion (e.g., an
installation of a referred application) is verified by searching a
table of stored clicks using the Udid of the device executing the
application and the AppID of the application being executed. The
stored clicks table may store an installation history for every
application downloaded by a client device, in addition to other
data, such as a date of execution or access. If the search of the
stored clicks table shows that the user recently clicked to the
application within a predetermined amount of time and the user has
not previously installed the application, the execution of the
application is considered a conversion.
[0026] At block 226, if a conversion is determined to have
occurred, a rewards domain of the reward platform is updated. The
rewards domain tracks all rewards in the system. At block 228, the
rewards machine(s) 204 may associate reward data with the client
device 202 or an account associated with a user of the client
device 202 and may transmit the reward data to the user account or
the client device 202. The rewards machine(s) 204 may call a
software method or command to transmit the reward to the user. In
some embodiments, the rewards machine(s) 204 may push the reward to
the user account or client device 202. In some embodiments, a user
of the client device 202 may retrieve the reward from the rewards
machine(s) 204. The reward may be virtual currency or a virtual
good for use within the referring application.
[0027] FIG. 3 is a flow diagram illustrating example interactions
between a client device, a reward machine(s), and an application
developer, according to some embodiments. Referring to FIG. 3, an
application developer may desire to engage a user of an
application. In some embodiments, the application developer may
accomplish deeper engagement of an application by incentivizing the
user to perform targeted actions within the application. At block
308, the application developer 306 may register an application
action that it wishes to incentivize with the reward machine(s)
304. In some embodiments, as part of the registration process, the
application developer 306 enters a name and a description of the
action to be performed within the application. In some embodiments,
the application developer 306 also may enter a bid price
corresponding to an amount of currency that the application
developer 306 is willing to pay for the user to complete the
action.
[0028] At block 310, the reward machine(s) 304 may generate an
action identifier (ID) for the corresponding registered action. In
some embodiments, the generated action ID may be a unique, random,
or pseudo-random number of n bits. The action ID may be mapped to
the action. In some embodiments, the reward machine(s) 304 may be
part of a reward system or platform that comprises a website, one
or more web servers providing web services, and one or more data
storage devices, either distributed and accessible via the network
108 or connected to the one or more web servers.
[0029] At block 312, the reward machine(s) 304 may create and store
an offer corresponding to the incentivized action registered by the
application developer 306. The action ID mapped to the action may
be stored with the offer.
[0030] At block 314, the reward machine(s) 304 may generate
software code corresponding to the offer and return the software
code and the action ID to the application developer 306. The
application developer 306 may integrate the offer code and action
ID into the application at the point of the action. The offer code
may trigger a ping or cause a ping to be transmitted from a client
device executing the application to the reward machine(s) 304 when
the user completes the incentivized action in the application. In
some embodiments, the generated offer code may be client device
platform-specific. The application developer 306 may specify which
device platform (e.g., Android.RTM., iOS.RTM.) the application is
configured to execute on, and the offer code may be generated
specifically for the specified device platform.
[0031] At block 316, a client device 302 may execute the
application containing the incentivized action. In some
embodiments, the application may have been previously installed by
the user of the client device 302. In some embodiments, the user
may navigate to a web page that lists offers associated with
various actions for various applications. The user may select an
offer from the web page (called in some embodiments, an "offer
wall") and be redirected to the application relating to the offer.
In some embodiments, the redirection may guide a user to the
application in the app store, where the user then is able to open
or execute the application. In the event the user has not
previously installed the application, the user may be prompted or
offered the opportunity to download and/or install the application,
in some cases, for an additional incentive.
[0032] At block 318, the user may initiate and perform the action
being incentivized within the application. The offer code inserted
in the application by the application developer 306 may cause the
client device 302 to ping or otherwise notify the reward machine(s)
304 upon the initiation of the action. In some embodiments, the
client device 302 may send an additional ping or other notification
to the reward machine(s) upon completion of the action.
[0033] At block 320, the reward machine(s) 304 may receive the ping
or other notification from the client device 302. In some
embodiments, the reward machine(s) 304 may receive a first ping
when the action is first initiated by the user of the client device
302 and a second ping when the action is completed by the user of
the client device 302. For example, if an action is time consuming,
the user may initiate the action at a first point in time and then
resume completion of the action at a later point in time. Within or
in addition to the ping or other notification, the reward
machine(s) 304 may receive identifying information concerning the
action. For example, the reward machine(s) 304 may receive a click
ID that is generated when a user clicks or otherwise selects or
interacts with the action, the action ID generated and mapped to
the incentivized action, a partner ID, and a device ID, such as the
Udid of the client device 302 or a user account identifier
associated with the user. The click ID may enable the reward
machine(s) 304 to match the click with stored clicks to determine
when a user interaction in the application is a conversion of a
referral offer or an organic interaction (unrelated to the referral
offer) with an aspect of the application.
[0034] At block 322, the reward machine(s) 304 may update the
reward domain to indicate the successful completion of an action by
a user. The rewards domain tracks all rewards in the system. In
some embodiments, the reward machine(s) 304 may record the
identifying information received in block 320 in a record of a
database along with an indication that a reward has been allocated
or transmitted to the user for performing the action.
[0035] At block 324, the client device 302 or a user account
associated with the user operating the client device 302 may
receive the reward for performing and completing the incentivized
action. In some embodiments, the reward may correspond to and be
usable within the application in which the incentivized action was
performed. In some embodiments, the reward may correspond to and be
usable within a different application within the client device
application platform, such as an application that referred the user
to the offer to perform the incentivized action. The rewards
machine(s) 304 may call a software method or command to transmit
the reward to the user. In some embodiments, the rewards machine(s)
304 may push the reward to the user account or client device 202.
In some embodiments, a user of the client device 302 may retrieve
the reward from the rewards machine(s) 304. The reward may be
virtual currency or a virtual good for use within the referring
application.
[0036] Note that FIG. 3 shows operations 316, 318, 320, 322, and
324 are not connected to the other operations. This illustrates
that, in some embodiments, these operations may be performed
independently of the other operations.
[0037] FIG. 4 is a block diagram illustrating an example
interaction between a reward system, an advertiser, and a publisher
in response to a user action, in accordance with an example
embodiment. At block 408, an advertiser 406 seeking to market an
application to users of the reward system platform adds credits to
their account. The credits may instruct the platform as to how much
the advertiser is willing to pay per application installation. At
block 410, reward machine(s) 404 associated with the platform (or
reward website) may update an account associated with the
advertiser 406. Account data may be stored in a database or lookup
table.
[0038] At block 412, the reward machine(s) 404 track and verify a
referral conversion. A referral conversion may comprise the
installation of an application referred by the advertiser 406. When
a user clicks on a referral, that click and accompanying data,
including but not limited to the client device's Udid and IP
address, are stored. Because the reward machine(s) 404 may not have
access to the inner workings of an app store or other third party
application repository, a referral conversion is verified by
detecting execution of the referred application by the client
device. The application may push data to the reward machine(s) 404
indicating that the client device has executed the referred
application.
[0039] If a referral conversion has occurred, at block 414,
financial records are updated on the rewards machine(s) 404. In an
example embodiment, a software method "send_money_txn" may be
called to send transaction data to web server 110. It is
contemplated that the name of the software method used to send
transaction data to web server 110 is immaterial; other software
methods may be invoked to send the transaction data to the web
server 110. Web server 110 may insert the transaction into a
database table that stores application transactions. A script may
execute on a periodic basis to perform a SUM operation over the
table. In an example embodiment, the script pay execute every
minute. The script may debit an advertiser account at block 416.
The script also may credit a publisher account at block 418. In an
example embodiment, blocks 414, 416, and 418 may be performed for
each detected application installation.
[0040] Note that FIG. 4 shows operations 414, 416, and 418 are not
connected to the other operations. This illustrates that, in some
embodiments, these three operations may be performed independently
of the other operations. Also, the embodiments of FIG. 4 may be
equally applicable to referrals involving incentivized actions. For
example, block 412 may track the conversion of an incentivized
action referral by receiving information from a client device that
indicates an initiation and a completion of an incentivized and
referred action.
[0041] FIG. 5 is a block diagram showing modules of an application,
executing on a client device, and modules of a reward system,
executing on a server, according to some embodiments. The
application 106 may include an execution detection module 502, a
communication module 504, and a protocol handler module 506.
[0042] Execution detection module 502 may detect when the
application 106 is executed. In an example embodiment, execution
detection module 502 may be inserted into application 106 by the
reward system 508 or an advertiser to track execution of the
application. In addition to tracking execution of the application
106, execution detection module 502 may track application usage
data, including user interaction with the application, duration of
use, and use of virtual goods or currency, among other things. In
some embodiments, the application usage data tracked by the
execution detection module 502 includes events or actions performed
within the application by the user. Performance of the actions may
be incentivized by an advertiser or other entity.
[0043] Communication module 504 may transmit and receive data to
and from the application. Communication module 504 may operate in
conjunction with execution detection module 502 to push data, for
example, a ping, to the reward system upon execution of the
application 106 or initiation and completion of an action within
the application 106. In some embodiments, the ping may include
identifying information concerning use of the application, such as
an action performed within the application. In some embodiments,
identifying information, such as an identifier (e.g., Udid) of the
client device 102 or an account identifier (e.g., user name,
telephone number) associated with a user of the client device 102
is received by the communication module 504 in addition to the
ping. Communication module 504 also may receive referral offers
from the reward system 508 and may transmit acceptance of a
referral offer, along with identifying information about the
application, the client device 102, and the incentivized and
referred action.
[0044] Protocol handler module 506 may register a protocol handler
for use on the mobile device 102. The protocol handler module 506
may register the protocol handler on behalf of a publisher of an
application. The reward system 508 may cooperate with the publisher
of the application to use the protocol handler to gain access to
the application. The reward system 508 may transmit code via
communication module 504 to the client device 102 and use the
exposed protocol handler to insert the code in the application 106.
The code may enable the reward system to offer and track the
effectiveness of incentives to users for targeted pay-per-action
events. Examples of targeted pay-per-action events may include but
are not limited to logging in or checking in to an application
account, watching videos, taking surveys, performing specific
actions within the application, and accessing particular
advertisements. Protocol handler module 506 may operate in
conjunction with execution detection module 502 to detect when a
user performs a pay-per-action event. In response to a
pay-per-action event, the execution detection module 502 may
generate a ping or initiate a data push to notify the reward system
that the user has engaged in a pay-per-action event. In some
embodiments, the protocol handler module 506 may detect an
initiation of a pay-per-action event and a completion of the
pay-per-action event. The execution detection module 502 may
generate a ping or initiate a data push upon the initiation of the
pay-per-action event and upon the completion of the pay-per-action
event.
[0045] In some embodiments, an application developer may contact
the reward system 508 directly to register an action to be
incentivized with the reward system 508. The application developer
may describe the action, including measurable events, such as what
constitutes an initiation of the action, what action steps need to
be performed, and what constitutes a completion of the action, and
circumstances surrounding the action (e.g., the action takes place
in level 1 of a game). In some embodiments, the reward system 508
may pre-approve the action as being suitable for a referral offer
or incentive. The reward system 508 may generate an action ID to
identify the action and code corresponding to a referral offer or
incentive. The application developer may insert the code and the
action ID into the application itself rather than use the protocol
handler module 506.
[0046] The reward system 508 includes a referral tracking module
510, an application use/install module 512, a database interface
module 514, a deep linking module 516, a fraud prevention module
518, and a communication module 520.
[0047] The referral module 510 may select and generate referral
offers to be transmitted to the client device 102. In some
embodiments, the referral offer is a list of offers optimized for
the application being executed. The list of offers may comprise a
list of applications incentivized for download by the user, with
the incentive being virtual currency or a virtual good. The list of
offers also may include one or more actions capable of being
performed within one or more applications, with different actions
being awarded differing incentives. In some embodiments, the
difficulty of performing the actions may factor into the amount of
incentive offered. In some embodiments, the advertiser or
application developer's desire to have a particular action
performed may influence the amount of incentive offered.
[0048] The list of offers may be compared to a list of disabled
offers stored on a per application basis to determine which offers
should be culled from the offer list. The referral module 510 may
use advertisements from a variety of advertising networks. The
referral module 510 may select an advertisement to be offered to
the user, with different advertisements being offered depending on
the application being executed by the client device 102. The
advertisement offered as a referral may be chosen for delivery
using an ad order algorithm that optimizes advertisements to be
delivered by one or more predetermined metrics. In an example
embodiment, the effective cost per mille for each advertisement may
be considered in determining which advertisement to deliver. In
some embodiments, the advertisements may be aggregated and listed
on a web page or user interface in the form of an offer wall. The
advertisements may be sortable or capable of being filtered by
application, action, incentive, Udid, and so forth. For example, if
the user has installed the application previously via the reward
machine(s) (e.g., as part of a pay-per-install offer), the offer to
install the application may be filtered out and not shown to the
user again.
[0049] The application use/install module 512 may monitor and track
application usage and installation. The application use/install
module 512 may store the client device's Udid whenever a referral
sends a user to the app store for a specific application that the
client device 102 has not previously run. The client device's Udid
may be stored with application identifiers corresponding to every
application executed by the mobile device 102. The Udid may serve
as a key to enable a fast lookup whenever a client device executes
an application. In this respect, the reward system 508 may use the
Udid to lookup a list of every application executed by the client
device 102 to determine whether an executed application is a newly
installed application.
[0050] Similarly, the application use/install module 512 may store
the Udid and AppID as a key in a stored click table whenever a user
clicks to an app store to download an application. The stored click
table may be referenced by the application use/install module 512
when the module 512 is attempting to determine whether an executing
application was recently downloaded and is a new installation.
[0051] In some embodiments, the application use/install module 512
tracks application usage by a user. Application usage may include
actions initiated and performed within one or more applications.
The application use/install module 512 may store the Udid of the
client device 102, the AppID and an action ID, among other things,
as keys in a stored click table when a user initiates an
incentivized action within an application. The application
use/install module 512 also may store the same identifiers in the
stored click table when the user completes the incentivized action
within the application.
[0052] The database interface module 514 may interface with
connected and distributed databases to store and retrieve
application and user data. In an example embodiment, the database
interface module 514 may interface with databases or data storage
devices to access an installation history for applications on a per
client device basis. For example, the reward platform may use both
SQL and SimpleDB storage platforms for storing and maintaining
records concerning installed applications and rewards. In some
embodiments, the database interface module 514 interfaces with
databases and data storage devices to access a history of
application actions undertaken by a client device. The history of
application actions may reflect the status and progress of actions
performed by a client device 102. The database interface module 514
may receive database retrieval and storage commands from other
modules in the reward system 508 and may translate these commands,
if necessary, to appropriately interface with the storage
platforms.
[0053] The deep linking module 516 may interface with a protocol
handler registered on the client device 102 to insert code in the
application 106, redirect users to the application from an offer
wall (e.g., a user interface or web page containing referral
offers), or redirect users to a specific event or action in the
application. The code may facilitate the linking or redirection of
users to specific events inside the application, thereby allowing
the reward system to provide targeted incentives for certain
pay-per-action events occurring in the application. For example,
the deep linking module 516 may insert code in the application 106
that rewards a user for watching a video or performing a game
action in the application 106. The deep linking module 516 may use
the registered protocol handler, in essence, to open up the
application and allow the reward system to deposit code related to
pay-per-action events.
[0054] The fraud detection module 518 may detect and block
fraudulent activity within the reward system. Fraudulent activity
may be determined by monitoring certain identifiers, such as a
client device IP address, a mobile device Udid, an AppID, an action
ID, and a publisher identifier. In an example embodiment, fraud is
detected by determining that the same IP address is installing the
same application multiple times in an attempt to be rewarded for
each installation of the same application. In another example
embodiment, fraud may be detected by identifying the same publisher
ID being passed during multiple installations for the same
application. In each scenario, the fraud detection module 518 may
block the offending users from the reward system or otherwise
prevent the offending users from being unjustly rewarded.
[0055] The communication module 520 may transmit and receive data
to and from the reward system 508 to the mobile device 102. The
communication module 520 may operate in conjunction with other
modules of the reward system to transmit generated referral offers,
receive a ping or pushed data from an application executed on the
client device 102, and transmit rewards to the client device 102
upon a referral conversion.
[0056] FIG. 6 is a flowchart illustrating an example method for
tracking and incentivizing application installs. At block 602, the
reward system 508 may provide a client device 102 with a referral
offer. The referral offer may be an offer to download an
application from an app store in exchange for virtual currency or a
virtual good. The reward system 508 may determine prior to
providing the client device 102 with the referral offer whether the
client device is eligible to perform the referral offer. For
example, the reward system 508 may determine whether the client
device 102 has executed the application before determining whether
to send the referral offer to download and execute the application
to the client device 102.
[0057] At block 604, the reward system may monitor whether the user
clicked on the referral. The reward system may track referral
clicks using the Udid of the client device 102. If the user did not
click on the referral, the example method returns to block 602.
[0058] If the user did click on the referral offer, at block 606,
the reward system 508 may store the click with the client device's
102 Udid. The click may be stored in a table. If the referral offer
redirects the user to an app store to download an application, the
AppID of the application may be stored as well in the table.
Together, the Udid and the AppID may serve as a key in the table,
thereby enabling easy searching for the combination of the mobile
device and application when the user runs the referred
application.
[0059] At block 608, the reward system 508 detects the execution of
the application. Detection may be facilitated by the pushing of
data from the client device 102 to the reward system 508. The
pushing of data may be caused by code inserted into the application
106 by the reward system 508 or an advertiser that transmits a ping
to the server.
[0060] At block 610, in response to detecting the execution of the
referred application, the rewards system 508 determines whether or
not the client device 102 has clicked to the app in the app store
recently. If the client device 102 is found to have clicked to the
app within a predetermined amount of time, the client device 102
will be adjudged to have recently downloaded the app. If the client
device 102 did not recently click to the app, the example method
may return to block 608 for detection of additional application
executions.
[0061] At block 612, the rewards system 508 determines whether or
not the client device 102 has previously installed the referred
application. Determination of this query may involve searching the
stored click table using the client device 102 Udid and the AppID
of the referred application 106. If the stored click table does not
contain a record of the referred application 106 being previously
installed, then in block 614, the rewards system 508 may be
updated. If the stored click table does contain a record of the
referred application being previously installed, then the example
method returns to block 608 to detect additional application
executions.
[0062] At block 614, the rewards system 508 may be updated to
reflect that a referral conversion occurred. The updating may
include updating the stored click table to indicate that the
referred application has been installed. Further, the rewards
system 508 may be updated to reflect that a reward (e.g., virtual
currency, virtual good) is to be awarded to the client device
102.
[0063] At block 616, the rewards system 508 may transmit the reward
to the user, for example, by transmitting the reward to the client
device 102 or an account associated with the user. At block 618,
financial transaction data relating to the referral conversion may
be recorded and stored. In an example embodiment, transaction data
relating to the referral conversion may be inserted into a
MoneyTransactions table. In one example embodiment, the
MoneyTransactions table may be a Microsoft SQL database. At block
620, an advertiser account is debited to reflect that a user
installed a referred application. At block 622, a credit is given
to a publisher account.
[0064] FIG. 7 is a flowchart illustrating an example method for
delivering and monitoring targeted pay-per-action events occurring
within an application. At block 702, the rewards system 508, or one
of its components, may access an application via an exposed
registered protocol handler. The protocol handler may be registered
by a publisher of the application.
[0065] At block 704, the rewards system 508 may insert code into
the application using the registered protocol handler. The code may
operate to redirect a user executing the application to a
particular application event. For example, the user may be
redirected to a particular video or survey and may be prompted to
watch the video or take the survey. In some embodiments, the code
may provide a callback mechanism by which the application pings or
transmits data to the reward system 508 when the user performs an
action or event associated with the portion of the application
where the code is inserted. In some embodiments, no code is
inserted by the rewards system 508 using the registered protocol
handler. Rather, code may be generated by the rewards system 508
and provided to the application developer for integration with the
application. Redirection of the user may occur in response to the
user selecting an offer from an offer wall (in the form of a user
interface or web page with selectable referral offers). The offer
wall may call a web view of the wall that triggers the protocol
handler to redirect the user to the referred application or event
in the application identified by the code inserted by the
application developer.
[0066] At block 706, the rewards system 508 may monitor user
interaction with the application event. The user's interaction with
the targeted pay-per-action event may be recorded in block 708. A
reward or incentive offered in exchange for the user interacting
with the pay-per-action application event may be logged and
transmitted to the user.
[0067] FIG. 8 is a flowchart illustrating an example method for
registering and mapping actions occurring within an application to
a pay-per-action model, according to some embodiments. At block
802, the referral module 510 of the reward system 508 receives
registration of an application action to be incentivized or
referred. Registration of the application action may entail an
application developer or publisher submitting a title of the
action, one or more steps needed to perform the action, and a bid
amount indicating an amount of currency the application developer
or publisher is willing to pay for the user to perform the action.
In some embodiments, the title of the action submitted to the
rewards system 508 is shown to the users on an offer wall or when
the user views the incentivized action. The steps submitted by the
application developer or publisher are required to be performed in
order for the incentive associated with the application action to
be awarded to the user. The bid amount may be actual currency
(e.g., U.S. currency) that the application developer is willing to
pay the reward system 508. All or a portion of the actual currency
may be converted into virtual currency to be awarded to the user.
The virtual currency may be redeemable or applicable to the
application in which the action is being performed or may apply to
a different application. A remaining amount of the actual currency
may be retained by the reward system 508 as a fee for providing the
referral offer.
[0068] At block 904, the referral module 510 of the reward system
508 may generate an action ID and action code associated with the
incentivized application action. The action ID identifies the
action with the application. In some embodiments, the action ID may
be a unique, random, or pseudo-random number. In some embodiments,
the action code generated by the referral module 510 of the reward
system 508 operates as a callback mechanism to the reward system
508 upon performance of the action. For example, the action code
may prompt a ping and a transmission of identifying information (if
the identifying information is not included in the ping itself) to
the reward system 508. The identifying information may include user
identifying information, such as an account identifier (e.g.,
telephone number, user name), the action ID, and the app ID.
[0069] At block 906, the referral module 510 of the reward system
508 may map the action ID to the application action. The mapping
may be stored in a table, database, or other data structure. The
mapping may enable a fast look up of the action being performed by
a user when action identifying information (e.g., action ID, App
ID) is received by the reward system 508.
[0070] At block 908, the reward system 508 may transmit the action
ID and action code to the application developer. In some
embodiments, the reward system 508 may use the deep linking module
516 described in the example embodiment of FIG. 5 to insert the
action code in the application via protocol handler module 506. In
some embodiments, the action code is transmitted to the application
developer who incorporates the code into the application.
[0071] FIG. 9 is a flowchart illustrating an example method for
tracking and incentivizing the performance of actions within an
application, according to some embodiments. At block 902, a
referral offer to perform an action in an application is generated.
In some embodiments, the reward system 508 generates the referral
offer in response to the registration of the action by an
application developer or publisher. The offer may include a title
of the action, one or more steps needed to be performed to complete
the offer, and an incentive offered for performing the offer. The
offer is caused to be displayed on a client device 102 to the user,
for example, on an offer wall contained in a web page or user
interface.
[0072] At block 904, a user's selection of an offer to perform an
action is received. At block 906, in some embodiments, selection of
the referral offer may redirect a user to the application
containing the incentivized action. If the application is not
installed, in some embodiments, selection of the referral offer may
redirect the user to an app store to download and install the
application.
[0073] At block 908, the reward system 508 may receive an
indication that the user has initiated the action within the
application. The indication may take the form of a ping and may
include information identifying the application, the action being
undertaken, and the user or client device performing the action. In
some embodiments, the action code generated for the incentivized
offer may prompt or cause the application or the client device 102
to transmit the indication of the action initiation to the reward
system 508. The indication (and accompanying identification
information) may be recorded and stored in a table, database, or
other data structure.
[0074] At decision block 910, the reward system 508 may wait for
the completion of the action by the user of the client device 102.
Completion of the action may be detected by the receipt of an
additional indication, for example, in the form of a ping,
representing a completion of the action. The identifying
information may further identify the step of the action being
performed such that the reward system 508 may be able to track the
status of the performance of the action. If the completion of the
action is not detected, the example method proceeds to decision
block 912, where the reward system 508 determines whether the
amount of time elapsed since the user selected the referral offer
exceeds an expiration time for performing the referral offer. The
expiration time may be set by the reward system 508 or the
application developer.
[0075] If the referral offer has expired prior to performance of
the action, the reward system 508 may notify the user and redirect
the user to block 906 of the example method to restart the action
in the application. In some embodiments, if the offer has not been
completed, the reward system 508 may not display the offer again to
the user.
[0076] If the referral offer has not expired yet, the example
method is redirected to decision block 910, where the reward system
508 may continue monitoring and waiting for performed action data
to arrive.
[0077] Referring back to decision block 910, if the completion of
the action is detected and determined by the reward system 508, the
method proceeds to block 914, where the reward system 508 may
transmit the offered incentive to the user. In some embodiments,
the reward system 508 will record the completion of the action in a
table, database, or other data structure, along with other
identifying information, such as the user identity (e.g., Udid,
account identifier), the issuance of the incentive, the date and
time of action performance, and so forth. In some embodiments, the
reward system 508 may transmit the incentive to the client device
102 of the user or to a user account associated with the user. In
some embodiments, a notification of the incentive may be
transmitted to the user. The notification may inform the user that
an incentive has been awarded and may be claimed at a location
(e.g., a web site, a page identified by a hyperlink) specified in
the notification.
Modules, Components and Logic
[0078] Certain embodiments are described herein as including logic
or a number of components, modules, or mechanisms. A component or a
module is a non-transitory and tangible unit capable of performing
certain operations and may be configured or arranged in a certain
manner. In example embodiments, one or more computer systems (e.g.,
a standalone, client or server computer system) or one or more
components of a computer system (e.g., a processor or a group of
processors) may be configured by software (e.g., an application or
application portion) as a component that operates to perform
certain operations as described herein.
[0079] In various embodiments, a component or a module may be
implemented mechanically or electronically. For example, a
component or a module may comprise dedicated circuitry or logic
that is permanently configured (e.g., as a special-purpose
processor) to perform certain operations. A component or a module
also may comprise programmable logic or circuitry (e.g., as
encompassed within a general-purpose processor or other
programmable processor) that is temporarily configured by software
to perform certain operations. It will be appreciated that the
decision to implement a component or a module mechanically, in
dedicated and permanently configured circuitry, or in temporarily
configured circuitry (e.g., configured by software) may be driven
by cost and time considerations.
[0080] Accordingly, the term "component" or "module" should be
understood to encompass a tangible entity, be that an entity that
is physically constructed, permanently configured (e.g., hardwired)
or temporarily configured (e.g., programmed) to operate in a
certain manner and/or to perform certain operations described
herein. Considering embodiments in which components or modules are
temporarily configured (e.g., programmed), each of the components
or modules need not be configured or instantiated at any one
instance in time. For example, where the components or modules
comprise a general-purpose processor configured using software, the
general-purpose processor may be configured as respective different
components or modules at different times. Software may accordingly
configure a processor, for example, to constitute a particular
component or module at one instance of time and to constitute a
different component or module at a different instance of time.
[0081] Components or modules can provide information to, and
receive information from, other components or modules. Accordingly,
the described components or modules may be regarded as being
communicatively coupled. Where multiple of such components or
modules exist contemporaneously, communications may be achieved
through signal transmission (e.g., over appropriate circuits and
buses) that connect the components or modules. In embodiments in
which multiple components or modules are configured or instantiated
at different times, communications between such components or
modules may be achieved, for example, through the storage and
retrieval of information in memory structures to which the multiple
components or modules have access. For example, one component or
module may perform an operation, and store the output of that
operation in a memory device to which it is communicatively
coupled. A further component or module may then, at a later time,
access the memory device to retrieve and process the stored output.
Components or module may also initiate communications with input or
output devices, and can operate on a resource (e.g., a collection
of information).
Electronic Apparatus and System
[0082] Example embodiments may be implemented in digital electronic
circuitry, or in computer hardware, firmware, software, or in
combinations of them. Example embodiments may be implemented using
a computer program product, e.g., a computer program tangibly
embodied in an information carrier, e.g., in a machine-readable
medium for execution by, or to control the operation of, data
processing apparatus, e.g., a programmable processor, a computer,
or multiple computers. In an example embodiment, the
machine-readable medium may be a non-transitory machine- or
computer-readable storage medium.
[0083] A computer program can be written in any form of programming
language, including compiled or interpreted languages, and it can
be deployed in any form, including as a stand-alone program or as a
module, subroutine, or other unit suitable for use in a computing
environment. A computer program can be deployed to be executed on
one computer or on multiple computers at one site or distributed
across multiple sites and interconnected by a communication
network.
[0084] In example embodiments, operations may be performed by one
or more programmable processors executing a computer program to
perform functions by operating on input data and generating output.
Method operations can also be performed by, and apparatus of
example embodiments may be implemented as, special purpose logic
circuitry, e.g., an FPGA (field programmable gate array) or an ASIC
(application-specific integrated circuit).
[0085] The computing system can include clients and servers. A
client and server are generally remote from each other and
typically interact through a communication network. The
relationship of client and server arises by virtue of computer
programs running on the respective computers and having a
client-server relationship to each other. In embodiments deploying
a programmable computing system, it will be appreciated that that
both hardware and software architectures require consideration.
Specifically, it will be appreciated that the choice of whether to
implement certain functionality in permanently configured hardware
(e.g., an ASIC), in temporarily configured hardware (e.g., a
combination of software and a programmable processor), or a
combination permanently and temporarily configured hardware may be
a design choice. Below are set out hardware (e.g., machine) and
software architectures that may be deployed, in various example
embodiments.
Example Machine Architecture and Machine-Readable Medium
[0086] FIG. 10 is a block diagram of machine in the example form of
a computer system 1000 within which instructions, for causing the
machine to perform any one or more of the methodologies discussed
herein, may be executed. In alternative embodiments, the machine
operates as a standalone device or may be connected (e.g.,
networked) to other machines. In a networked deployment, the
machine may operate in the capacity of a server or a client device
102, 104 in server-client network environment, or as a peer machine
in a peer-to-peer (or distributed) network environment. The machine
may be a personal computer (PC), a tablet PC, a set-top box (STB),
a Personal Digital Assistant (PDA), a cellular telephone, a web
appliance, a network router, switch or bridge, or any machine
capable of executing instructions (sequential or otherwise) that
specify actions to be taken by that machine. Further, while only a
single machine is illustrated, the term "machine" shall also be
taken to include any collection of machines that individually or
jointly execute a set (or multiple sets) of instructions to perform
any one or more of the methodologies discussed herein.
[0087] The example computer system 1000 includes at least one
processor 1002 (e.g., a central processing unit (CPU), a graphics
processing unit (GPU) or both), a main memory 1004 and a static
memory 1006, which communicate with each other via a bus 1008. The
computer system 1000 may further include a video display unit 1010
(e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)).
The computer system 1000 also includes an alphanumeric input device
1012 (e.g., a keyboard), a user interface (UI) navigation device
1014 (e.g., a mouse), a disk drive unit 1016, a signal generation
device 1018 (e.g., a speaker) and a network interface device
1020.
Machine-Readable Medium
[0088] The disk drive unit 1016 includes a machine-readable medium
1022 on which is stored one or more sets of instructions and data
structures (e.g., software 1024) embodying or utilized by any one
or more of the methodologies or functions described herein. The
software 1024 may also reside, completely or at least partially,
within the main memory 1004 and/or within the processor 1002 during
execution thereof by the computer system 1000, the main memory 1004
and the processor 1002 also constituting machine-readable
media.
[0089] While the machine-readable medium 1022 is shown in an
example embodiment to be a single medium, the term
"machine-readable medium" may include a single medium or multiple
media (e.g., a centralized or distributed database, and/or
associated caches and servers) that store the one or more
instructions or data structures. The term "machine-readable medium"
shall also be taken to include any tangible medium that is capable
of storing, encoding or carrying instructions for execution by the
machine and that cause the machine to perform any one or more of
the methodologies of the present invention, or that is capable of
storing, encoding or carrying data structures utilized by or
associated with such instructions. The term "machine-readable
medium" shall accordingly be taken to include, but not be limited
to, solid-state memories, and optical and magnetic media. Specific
examples of machine-readable media include non-volatile memory,
including by way of example semiconductor memory devices, e.g.,
EPROM, EEPROM, and flash memory devices; magnetic disks such as
internal hard disks and removable disks; magneto-optical disks; and
CD-ROM and DVD-ROM disks.
Transmission Medium
[0090] The software 1024 may further be transmitted or received
over a communications network 1026 using a transmission medium. The
software 1024 may be transmitted using the network interface device
1020 and any one of a number of well-known transfer protocols
(e.g., HTTP). Examples of communication networks include a local
area network ("LAN"), a wide area network ("WAN"), the Internet,
mobile telephone networks, Plain Old Telephone (POTS) networks, and
wireless data networks (e.g., WiFi and WiMax networks). The term
"transmission medium" shall be taken to include any intangible
medium that is capable of storing, encoding or carrying
instructions for execution by the machine, and includes digital or
analog communications signals or other intangible medium to
facilitate communication of such software.
Example Three-Tier Software Architecture
[0091] In some embodiments, the described methods may be
implemented using one a distributed or non-distributed software
application designed under a three-tier architecture paradigm.
Under this paradigm, various parts of computer code (or software)
that instantiate or configure components or modules may be
categorized as belonging to one or more of these three tiers. Some
embodiments may include a first tier as an interface (e.g., an
interface tier). Further, a second tier may be a logic (or
application) tier that performs application processing of data
inputted through the interface level. The logic tier may
communicate the results of such processing to the interface tier,
and/or to a backend, or storage tier. The processing performed by
the logic tier may relate to certain rules, or processes that
govern the software as a whole. A third, storage tier, may be a
persistent storage medium, or a non-persistent storage medium. In
some cases, one or more of these tiers may be collapsed into
another, resulting in a two-tier architecture, or even a one-tier
architecture. For example, the interface and logic tiers may be
consolidated, or the logic and storage tiers may be consolidated,
as in the case of a software application with an embedded database.
The three-tier architecture may be implemented using one
technology, or, a variety of technologies. The example three-tier
architecture, and the technologies through which it is implemented,
may be realized on one or more computer systems operating, for
example, as a standalone system, or organized in a server-client,
peer-to-peer, distributed or so some other suitable configuration.
Further, these three tiers may be distributed between more than one
computer systems as various components.
Components
[0092] Example embodiments may include the above described tiers,
and processes or operations about constituting these tiers may be
implemented as components. Common to many of these components is
the ability to generate, use, and manipulate data. The components,
and the functionality associated with each, may form part of
standalone, client, server, or peer computer systems. The various
components may be implemented by a computer system on an as-needed
basis. These components may include software written in an
object-oriented computer language such that a component oriented,
or object-oriented programming technique can be implemented using a
Visual Component Library (VCL), Component Library for Cross
Platform (CLX), Java Beans (JB), Java Enterprise Beans (EJB),
Component Object Model (COM), Distributed Component Object Model
(DCOM), or other suitable technique.
[0093] Software for these components may further enable
communicative coupling to other components (e.g., via various
Application Programming interfaces (APIs)), and may be compiled
into one complete server, client, and/or peer software application.
Further, these APIs may be able to communicate through various
distributed programming protocols as distributed computing
components.
Distributed Computing Components and Protocols
[0094] Some example embodiments may include remote procedure calls
being used to implement one or more of the above described
components across a distributed programming environment as
distributed computing components. For example, an interface
component (e.g., an interface tier) may form part of a first
computer system that is remotely located from a second computer
system containing a logic component (e.g., a logic tier). These
first and second computer systems may be configured in a
standalone, server-client, peer-to-peer, or some other suitable
configuration. Software for the components may be written using the
above described object-oriented programming techniques, and can be
written in the same programming language, or a different
programming language. Various protocols may be implemented to
enable these various components to communicate regardless of the
programming language used to write these components. For example, a
component written in C++ may be able to communicate with another
component written in the Java programming language through
utilizing a distributed computing protocol such as a Common Object
Request Broker Architecture (CORBA), a Simple Object Access
Protocol (SOAP), or some other suitable protocol. Some embodiments
may include the use of one or more of these protocols with the
various protocols outlined in the Open Systems Interconnection
(OSI) model, or Transmission Control Protocol/Internet Protocol
(TCP/IP) protocol stack model for defining the protocols used by a
network to transmit data.
A System of Transmission Between a Server and Client
[0095] Example embodiments may use the OSI model or TCP/IP protocol
stack model for defining the protocols used by a network to
transmit data. In applying these models, a system of data
transmission between a server and client, or between peer computer
systems may for example include five layers comprising: an
application layer, a transport layer, a network layer, a data link
layer, and a physical layer. In the case of software, for
instantiating or configuring components, having a three-tier
architecture, the various tiers (e.g., the interface, logic, and
storage tiers) reside on the application layer of the TCP/IP
protocol stack. In an example implementation using the TCP/IP
protocol stack model, data from an application residing at the
application layer is loaded into the data load field of a TCP
segment residing at the transport layer. This TCP segment also
contains port information for a recipient software application
residing remotely. This TCP segment is loaded into the data load
field of an IP datagram residing at the network layer. Next, this
IP datagram is loaded into a frame residing at the data link layer.
This frame is then encoded at the physical layer, and the data
transmitted over a network such as an internet, Local Area Network
(LAN), Wide Area Network (WAN), or some other suitable network. In
some cases, internet refers to a network of networks. These
networks may use a variety of protocols for the exchange of data,
including the aforementioned TCP/IP, and additionally ATM, SNA,
SDI, or some other suitable protocol. These networks may be
organized within a variety of topologies (e.g., a star topology),
or structures.
[0096] Although an embodiment has been described with reference to
specific example embodiments, it will be evident that various
modifications and changes may be made to these embodiments without
departing from the broader spirit and scope of the invention.
Accordingly, the specification and drawings are to be regarded in
an illustrative rather than a restrictive sense. The accompanying
drawings that form a part hereof, show by way of illustration, and
not of limitation, specific embodiments in which the subject matter
may be practiced. The embodiments illustrated are described in
sufficient detail to enable those skilled in the art to practice
the teachings disclosed herein. Other embodiments may be utilized
and derived therefrom, such that structural and logical
substitutions and changes may be made without departing from the
scope of this disclosure. This Detailed Description, therefore, is
not to be taken in a limiting sense, and the scope of various
embodiments is defined only by the appended claims, along with the
full range of equivalents to which such claims are entitled.
[0097] Such embodiments of the inventive subject matter may be
referred to herein, individually and/or collectively, by the term
"invention" merely for convenience and without intending to
voluntarily limit the scope of this application to any single
invention or inventive concept if more than one is in fact
disclosed. Thus, although specific embodiments have been
illustrated and described herein, it should be appreciated that any
arrangement calculated to achieve the same purpose may be
substituted for the specific embodiments shown. This disclosure is
intended to cover any and all adaptations or variations of various
embodiments. Combinations of the above embodiments, and other
embodiments not specifically described herein, will be apparent to
those of skill in the art upon reviewing the above description.
[0098] The preceding technical disclosure is intended to be
illustrative, and not restrictive. For example, the above-described
embodiments (or one or more aspects thereof) may be used in
combination with each other. Other embodiments will be apparent to
those of skill in the art upon reviewing the above description. The
scope of the claims should, therefore, be determined with reference
to the appended claims, along with the full scope of equivalents to
which such claims are entitled. In the appended claims, the terms
"including" and "in which" are used as the plain-English
equivalents of the respective terms "comprising" and "wherein."
Also, in the following claims, the terms "including" and
"comprising" are open-ended, that is, a system, device, article, or
process that includes elements in addition to those listed after
such a term in a claim are still deemed to fall within the scope of
that claim. Moreover, in the following claims, the terms "first,"
"second," and "third," etc. are used merely as labels, and are not
intended to impose numerical requirements on their objects.
[0099] In this document, the terms "a" or "an" are used, as is
common in patent documents, to include one or more than one. In
this document, the term "or" is used to refer to a nonexclusive or,
such that "A or B" includes "A but not B," "B but not A," and "A
and B," unless otherwise indicated. Furthermore, all publications,
patents, and patent documents referred to in this document are
incorporated by reference herein in their entirety, as though
individually incorporated by reference. In the event of
inconsistent usages between this document and those documents so
incorporated by reference, the usage in the incorporated
reference(s) should be considered supplementary to that of this
document; for irreconcilable inconsistencies, the usage in this
document controls.
[0100] The Abstract is provided to comply with 37 C.F.R.
.sctn.1.72(b), which requires that it allow the reader to quickly
ascertain the nature of the technical disclosure. The abstract is
submitted with the understanding that it will not be used to
interpret or limit the scope or meaning of the claims. Also, in the
above Detailed Description, various features may be grouped
together to streamline the disclosure. This should not be
interpreted as intending that an unclaimed disclosed feature is
essential to any claim. Rather, inventive subject matter may lie in
less than all features of a particular disclosed embodiment. Thus,
the following claims are hereby incorporated into the Detailed
Description, with each claim standing on its own as a separate
embodiment.
* * * * *