Advertisers often desire to target advertisements (“ads”) to users because doing so is more likely to result in a “conversion” of an advertisement to revenue when a user purchases the advertiser's product or service. When a service provider is able to provide some identifying information about a user that an advertiser can use to target an ad, the advertiser is often willing to pay more to the service provider to provide the ad to the user. For example, search engines are able to provide information about a user's current and prior search terms so that an advertiser can target ads relating to the user's search terms or inferred interests.
Legal and ethical restrictions prevent the use of some types of information to target advertisements to users. Because of these restrictions, a service provider may be unable to use information about a user's bank balance, medical history, etc., even if that service provider has access to such information. These restrictions exist because, to use that information, the information would have to be made available to the service provider, such as by transmitting the information to the service provider's server computers or storing the information therein. Doing so may be considered by some to be an invasion of the user's privacy.
However, fewer restrictions exist on how discovered information can be used without transmitting that information to the service provider's computers. For example, if the user has stored this information at the user's personal computer (e.g., desktop, laptop, or handheld computer) there would probably be no legal or ethical restrictions on using that information locally at the user's computer without transmitting that information to the service provider's server computers.
When components are installed in a user's computer, such as to enable providing targeted ads, the components may need to be updated from time-to-time. For example, an advertiser may change its logic for selecting ads. When the logic changes, the components may need to be updated to employ the changed logic, such as by downloading new executable code. However, downloading new code to user computers can lead to problems, such as increased use of network bandwidth, corruption of the executable components, and so forth.
Technology is described for local ad targeting. An engine executing on a client computing device may select ads based on rules that can be modified without modifying the engine. The engine can select from advertisements stored locally based on data discovered at the client computing device, such as by observing the user's actions, stored documents, state of the client computing device and/or its peripherals, etc. The technology can employ plug-ins to extend functionality provided by the engine. The technology can include a plug-in manager that manages plug-ins. The technology can also download and manage rules. Each rule can specify what actions to take, such as when an event occurs. When a component of the operating system (e.g., the engine) observes an event, the engine (or a rule executor component associated with the engine) executes each related rule. The technology can thus select ads based on arbitrary events of the operating system, applications, or other components of the client computing device.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used as an aid in determining the scope of the claimed subject matter.
Technology is described for local ad targeting. In various embodiments, an engine executing on a client computing device (e.g., a user's computer) selects ads based on rules that can be modified without modifying the engine. The engine can select from advertisements stored locally based on data discovered at the client computing device, such as by observing the user's actions, stored documents, state of the client computing device and/or its peripherals, etc.
The technology can employ plug-ins to extend functionality provided by the engine. A plug-in is a component that can be individually installed or removed dynamically, such as after the engine is installed at the client computing device. Each plug-in can provide services to the engine, such as by communicating with other hardware or software components. As an example, there can be plug-ins to communicate with device drivers, software applications, etc. The computing device may have a plug-in that communicates with printer drivers, Internet browsers, office productivity applications, etc.
The technology can include a plug-in manager that manages plug-ins. The plug-in manager can download plug-ins, verify the plug-ins (e.g., by verifying a digital certificate), remove plug-ins, etc. The technology can also download and manage rules. A rule can be specified in a programming language (e.g., JavaScript, VBScript, etc.) or in a declarative language (e.g., extensible markup language (“XML”)). Each rule can specify what actions to take, such as when an event occurs. Once the technology registers a downloaded rule, the rule executes when a related event occurs. A rule may be registered by storing it in a registry, a local file (e.g., at the client computing device), a remote file (e.g., at a server), or elsewhere. In various embodiments, rules may be stored at a canonical location at the client computing device and thereafter automatically discovered by the technology.
When a component of the operating system (e.g., the engine) observes an event, the engine (or a rule executor component associated with the engine) executes each related rule. A rule may change an event state so that subsequent related rules may not be executed.
The technology can thus select ads based on arbitrary events of the operating system, applications, or other components (e.g., peripherals, device drivers, etc.). As an example, the technology can select an ad based on the state of a peripheral and target the ad based on documents stored on the computing system. As a more specific example, when a printer driver provides an event indicating that the printer's toner is running low on ink, the technology may determine that the user can afford an expensive ink (e.g., based on the user's bank balance stored at the client computing device or based on prior purchase transactions) and provide an ad for the expensive ink. The ad may be placed by a window that describes the low ink condition. Alternatively, if the technology determines that the user generally purchases economical products, the technology may provide an ad for a more economical ink cartridge.
In various embodiments, the user can determine what data the engine has recorded or used and configure the engine so that the engine does not use some of the recorded or used data. As an example, the user may prevent the engine from using health-related data.
The described technology can also be employed to update components (e.g., service components) other than ad selection service components.
The computing devices on which the technology may operate include handheld computing devices, mobile computing devices, stationary computing devices, game consoles, etc.
Several embodiments of the facility are described in more detail in reference to the Figures. The computing devices on which the described technology may be implemented may include one or more central processing units, memory, input devices (e.g., keyboard and pointing devices), output devices (e.g., display devices), storage devices (e.g., disk drives), and network devices (e.g., network interfaces). The memory and storage devices are computer-readable media that may store instructions that implement the importance system. In addition, the data structures and message structures may be stored or transmitted via a data transmission medium, such as a signal on a communications link. Various communications links may be used, such as the Internet, a local area network, a wide area network, or a point-to-point dial-up connection.
A rule can have flow statements. The following example shows IF, SWITCH, and DO-WHILE statements.
The following example shows operations inside rule:
Rules can have other nested rules, as in the examples below:
The rule engine may work in cooperation with one or more plug-ins, such as with plug-ins 206a, 206b, and 206n. The plug-ins may expose an application program interface (API) that the engine 202 can employ to execute functions provided by the plug-ins. As an example, a rule 218 may request the engine 202 to take a specified action when an event 220 occurs. The engine 202 may then request a plug-in 206a to take the specified action. The following example illustrates taking a special action when the event is the user clicking on an ad.
The engine 202 may also work with one or more services 210, 212, and 214. An ad_selector_service 214 is a service that selects advertisements (“ads”), such as from an ad content component 216. The ad_selector_service may select ads based on various criteria. These criteria may be specified by rules 218. Ads can also be related to rules, as the example below illustrates:
In this example, an ad having an identifier BSS003 is related to rules having identifiers 12345 and 67890.
The client computing device 200 may also include a plug-in manager 208 that can manage plug-ins, such as by installing, verifying, modifying/replacing, and removing plug-ins. In various embodiments, plug-ins 206a-n and rules 218 may be added, removed, modified, or replaced dynamically, such as by downloading them, copying them from memory external to the client computing device (e.g., optical disks or other transportable media), etc. A manifest 207 may indicate in which order plug-ins are to be executed by the engine 202.
This example manifest has three plug-ins: DisplayEngine, ContextCollection, and Math.
The technology may update the manifest from time to time, such as by downloading it from a server, updating it from a transportable memory (e.g., an optical disk), etc. The manifest may indicate one or more plug-ins. The routine may then load each plug-in, such as in an order indicated by the manifest. In the loop of blocks 306-310, the routine loads the plug-ins indicated by the manifest. At block 306, the routine selects a plug-in indicated by the manifest. At block 308, the routine loads the selected plug-in. As an example, the routine may load a dynamic link library (DLL) that includes the code for the plug-in. At block 310, the routine selects another plug-in. At block 312, the routine returns.
Those skilled in the art will appreciate that the logic illustrated in
The technology may provide a similar function to determine whether a function is provided by a plug-in. As an example, the following rule may evaluate whether a printer plug-in (“ptrpl”) provides an “OutOfInk” function:
Because the ad selection can occur locally, different users using different applications may see different ads. For example, a wealthy user may see different ads than a less wealthy user. A user with a very sophisticated computer may see different ads than a user with a less sophisticated computer.
The technology thus provides an ability to frequently change how advertisements are selected to incorporate new features without updating client executable components.
In various embodiments, the technology can support versioning of plug-ins and rules. As an example, an enterprise may disallow a newer version of a plug-in or rule until the enterprise tests the plug-in or rule for compatibility, security, or other reasons.
In various embodiments, the technology may track ad selection. As an example, when a user selects an ad (e.g., by clicking a mouse button when the mouse pointer is “over” an ad), the technology can log the selection in a local storage. When the user next connects to a network, the technology may transmit the selected ads to a server.
Various additional embodiments will now be described. These embodiments may operate independently or in association with one another.
The technology may perform a method comprising: receiving a rule, the rule specifying a condition and an action wherein the condition is based on an event; registering the received rule; receiving an indication that the event has occurred; identifying the rule as associated with the event; determining that the condition indicated by the rule is satisfied; and causing the action to be performed, wherein receiving the rule does not require an executable engine to be modified when the rule is received. The method can include receiving a plug-in; registering the received plug-in; determining that the action specified by the rule is associated with the plug-in; and invoking a function provided by the plug-in to cause the action to be performed. The plug-in may be associated with a device driver. The method can include receiving a plug-in; and registering the received plug-in, wherein the event is raised by the plug-in when the plug-in determines that another component has raised an event. The other component can be a hardware component. The other component can be a software component. The action can be to display an advertisement. The rule can be specified in an extensible markup language. The rule can be specified in a scripting language. The method can include evaluating the received rule at a client computing device that stores information private to a user to select an advertisement based on the private information such that no aspect of the rule is evaluated by a server computing device.
The technology can include one or more computer-readable storage media collectively storing computer-executable instructions that, when executed, cause a computing system to perform a method, the method comprising: receiving a first plug-in; verifying the first plug-in; if the first plug-in is verified, registering the first plug-in; if an event occurs, determining whether the event is associated with the first plug-in; if the event is associated with the plug-in and a condition specified by the event is satisfied, causing the first plug-in to take an action. The action can be to query an application for data. The method can include selecting an advertisement based on the data. The data may be private to a user and may not be transmitted to an advertiser and may also not be transmitted to a service provider via which the advertiser advertises. The method can include receiving a manifest indicating two or more plug-ins and an order for executing the two or more plug-ins; receiving a second plug-in that is different from the received first plug-in; and if the event occurs, executing the plug-ins in the order indicated by the manifest. The plug-in may be implemented as a dynamic link library.
The technology may include a system for enabling local ad targeting, comprising: an engine including a rule executor wherein the rule executor evaluates one or more rules wherein dynamically adding a rule does not require modification of executable code of the engine; a first plug-in that exposes an application program interface to the engine that includes a function name wherein when the function is invoked by the engine, a first logic is executed; a second plug-in that also exposes the application program interface to the engine that also includes the function name, wherein when the function is invoked by the engine, a second logic is executed; and a manifest that can be updated from time-to-time wherein the manifest indicates a list of plug-ins accessible by the engine. The dynamically added rule may specify how an advertisement is to be selected. The first plug-in can cause an action to occur when an event occurs and the rule executor determines that the event has occurred and the dynamically added rule specifies that the action is to occur. The second plug-in can retrieve a document stored at a client computing device wherein the document contains information private to a user and a rule specifies that the information is to be used to select an advertisement. The document can be, e.g., Internet browser history, Internet browser cookies, office productivity application documents, databases, and any other document type.
Although the subject matter has been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Rather, the specific features and acts described above are disclosed as example forms of implementing the claims. Accordingly, the invention is not limited except as by the appended claims.