The present disclosure generally relates to development systems and methods for providing external functionality to applications.
In recent years, the use of Internet-connected devices such as smartphones has grown exponentially. The number and variety of available software applications for such devices has similarly grown by orders of magnitude. Presently, many diverse functions can be performed and many diverse sets of data can be analyzed on any given Internet-connected device. The applications that offer this functionality and data span business-oriented applications, educational applications, games, new applications, shopping applications, messaging applications, media streaming applications, social media applications, etc.
With such a wide array of available applications, many users of Internet-connected devices are not aware of the availability of applications that may perform functions and/or provide data of interest to the users. Even app developers, who generally focus on one segment of the market for applications, are unable to keep up to date on all of the applications that their users might find valuable in other segments.
The background description provided here is for the purpose of generally presenting the context of the disclosure. Work of the presently named inventors, to the extent it is described in this background section, as well as aspects of the description that may not otherwise qualify as prior art at the time of filing, are neither expressly nor impliedly admitted as prior art against the present disclosure.
A system of one or more computing devices includes a user interface presented to a first application developer. The system includes a data store configured to store information identifying a plurality of functions. Each of the plurality of functions corresponds to external functionality available from third party applications. The system includes an app functionality management module configured to receive a selection from the first application developer of at least one of the plurality of functions to supplement functionality of a first application under development by the first application developer. The system includes a code generation module configured to provide a first software object to the first developer for incorporation into the first application. The first software object includes instructions for transmitting a query wrapper to a search system. The query wrapper includes a predefined text string corresponding to one of the functions selected by the first application developer. The first software object includes instructions for receiving a result set from the search system. The result set includes a plurality of items. Each one of the plurality of items includes (i) a name of an application and (ii) a corresponding access mechanism configured to at least one of download the application and open the application. The first software object includes instructions for displaying at least a portion of the result set. The first software object includes instructions for, in response to user selection of a first one of the plurality of items of the result set, actuating the access mechanism to at least one of download the corresponding application and open the corresponding application.
A method of operating one or more computing devices includes presenting a user interface to a first application developer. The method includes storing information identifying a plurality of functions. Each of the plurality of functions corresponds to external functionality available from third party applications. The method includes receiving a selection from the first application developer of at least one of the plurality of functions to supplement functionality of a first application under development by the first application developer. The method includes providing a first software object to the first developer for incorporation into the first application. The first software object includes instructions for transmitting a query wrapper to a search system. The query wrapper includes a predefined text string corresponding to one of the functions selected by the first application developer. The first software object includes instructions for receiving a result set from the search system. The result set includes a plurality of items. Each one of the plurality of items includes (i) a name of an application and (ii) a corresponding access mechanism configured to at least one of download the application and open the application. The first software object includes instructions for displaying at least a portion of the result set. The first software object includes instructions for, in response to user selection of a first one of the plurality of items of the result set, actuating the access mechanism to at least one of download the corresponding application and open the corresponding application.
A non-transitory computer-readable medium stores instructions for execution on a processor of a computing device. The instructions include displaying a first user interface element and a first label for the first user interface element. The first label indicates a selected function. The method includes, in response to user selection of the first user interface element, preparing a query wrapper. The query wrapper includes a predefined text string corresponding to the selected function. The method includes transmitting the query wrapper to a search system. The method includes receiving a result set from the search system. The result set includes a plurality of items. Each one of the plurality of items includes (i) a name of an application and (ii) a corresponding access mechanism configured to at least one of download the application and open the application. The method includes displaying at least a portion of the result set. The method includes, in response to user selection of a first one of the plurality of items of the result set, actuating the access mechanism to at least one of download the corresponding application and open the corresponding application.
Further areas of applicability of the present disclosure will become apparent from the detailed description, the claims and the drawings. The detailed description and specific examples are intended for purposes of illustration only and are not intended to limit the scope of the disclosure.
The present disclosure will become more fully understood from the detailed description and the accompanying drawings.
In the drawings, reference numbers may be reused to identify similar and/or identical elements.
A developer of an application (referred to interchangeably as an app) generally focuses on providing a good user experience for a limited number of functions. For example, an app developer may focus on providing accurate and intuitively-presented movie showtimes but may not invest effort in providing other related functionality, such as directions to movie theaters, dining options near the movie theaters, and/or reviews of the movies.
While an app developer generally would prefer that a user remain within their app, additional functionality, and therefore an improved user experience, may be provided by connecting to other apps. Connecting to other apps may provide a better user experience than attempting to replicate the functionality within the developer's own app. For example, if the developer is skilled at presenting movie showtimes and possesses valuable data and processing algorithms related to showtimes, the developer may not have expertise or unique content related to movie reviews. The developer can therefore rely on other apps whose focus is directed to movie reviews. For some functionality, such as GPS-based directions, a massive investment in mapping data and routing algorithms is required. As a result, few developers attempt to replicate mapping functionality within their app.
In order to access the functionality of another app, a developer may hard code a reference to that app when writing their code. In some circumstances, it is virtually guaranteed that an operating system will include a certain app. For example, a developer may reasonably expect that Google Maps will be available on an Android smartphone, although there are notable exceptions to this general rule, especially outside of the United States.
For most other categories of apps, such as movie review apps or restaurant review apps, there is no guarantee that any particular app will be present. Therefore, hard coding access to other specific apps is an exercise in guesswork. Also, the constant evolution of the app ecosystem means that the most popular, the most widely installed, and the most useful apps in any category may be different and may change with time.
For certain functions, a request may be passed to the operating system. For example, to map a location or to generate directions to a destination, a request can be passed to the operating system. The operating system may present the user with a list of installed apps to service that request. The operating system may allow the user to choose one of the apps as a default and, once a default is selected, the average user may never revisit that choice. Certain operating systems may not present a choice for certain requests, instead passing the request to a default app or service unless a specific configuration change is made by the user.
For all these reasons, the ability of an app developer to connect to other apps that would provide valuable functionality to the app developer's users is limited and difficult to implement. There is also no systematic way for developers to enter business relationships with each other. For example, an ad hoc arrangement may be possible where the developer of a movie reviews app compensates the developer of a movie showtimes app for each time that the movie reviews app is installed as a result of an advertisement or suggestion in the movie showtimes app.
The present disclosure presents a system where an app developer can quickly and easily add a wide variety of external functionality to an app. Instead of hard coding for specific apps, the present disclosure allows the developer to define a function of interest and, when a user expresses a desire to activate that function, an application search system provides one or more apps that provide the desired functionality. These app results may include apps already installed and may also include apps not yet installed. For apps that are not yet installed, a mechanism may be provided for easy installation of the app.
Further, a monetization system is integrated so that a third-party developer can promote their app and compensate the first app developer for activity driven by the first app developer. For example, compensation may be based on one or more of impressions (the number of times a user sees the sponsored app), cost per click (the number of times users click on the sponsored app being presented by the first app developer), and number of installs (when the sponsored app had not previously been installed and as a result of the first app developer, the sponsored app is installed by the user). A portion of the revenue received from an advertising developer is retained by the monetization system and the remainder is distributed to the first app developer.
To allow the first app developer to harness the functionality of the rest of the app ecosystem with a minimal amount of extra coding, a developer portal is offered to developers. The developer portal offers pre-written code that a developer can incorporate into their app with little to no custom coding. The pre-written code may be offered as part of a software development kit (SDK), which may be implemented as a plugin for an integrated development environment, or as one or more libraries or packages.
Included with the code or provided separately are user interface elements, such as logos, fonts, and graphics. The first app developer may add a button to one of the states (or, screens) of the app and display a logo from the developer portal on the face of the button. The action performed by the button (querying the search system and displaying results) is simply provided by a call to the downloaded library. The software development kit may even automate creation and placement of a button or other user interface element and may automatically associate the button with corresponding code, such as a routine or function contained within a library downloaded from the developer portal.
The developer portal may allow the first app developer to make choices relating to monetization, such as whether and how sponsored apps should be presented to a user, and how to be compensated for the display, access, or installation of sponsored apps. The first app developer may also be able to select apps or classes of apps not to present to the user. For example, the developer may not want to present a third-party app that is a competitor of the first app developer or that duplicates some of the functionality of the first app developer's own app.
The settings chosen by the developer may be stored local to the developer and integrated into the app itself or may be stored by the developer portal and shared with the application search system. As mentioned above, when an end user of the developer's app clicks on a button enabled by the developer portal, a query will be sent to an application search system, which returns app results, including names, icons, and other metadata related to the apps, and may include a ranking of the relevance of the returned apps.
The returned apps can be displayed to the user by code included within the libraries or packages provided by the developer portal. The app results may be presented by themselves in a full screen or as only part of the screen real estate of the originating app. In some implementations, the developer is allowed to develop their own custom presentation layout for how the returned apps will be displayed. In other implementations, the display format may be fixed by the provider of the developer portal. Although the provider of the developer portal and the provider of the application search system will be treated as a single entity below for ease of explanation, the developer portal and the application search system may be operated by independent organizations.
In
The Showtimes App 100 at 100-1 then lists a number of theaters at which the selected movie is playing and the corresponding showtimes at those theaters 120. Additional functionality not previously built into the Showtimes App 100 may include restaurants within the same vicinity as the movie theaters, directions to one of the movie theaters, reviews of the movie, purchase mechanisms for movie tickets, etc.
As described in more detail below, using the developer portal, the developer of the Showtimes App 100 can include buttons such as a “Find Food” button 124 and a “directions” button 128. The buttons 124 and 128 may be labeled with an icon or logo of the supplier of the developer portal or the operator of a search system 132. For example, only a stylized “Q” may be displayed, which is associated with Quixey.
When a user of the Showtimes App 100 selects (such as by tapping their finger) the “Find Food” button 124, a query wrapper 136 is sent to the search system 132. The search system 132, as described in more detail below, identifies relevant apps based on the query wrapper 136 and transmits app results 140 to the smartphone 104.
A representation of the app results 140 are displayed by the smartphone 104 (at 104-2) and this state of the Showtimes App 100 is shown at 100-2. The app results may be displayed in a portion of the Showtimes App 100, and the app results may appear to hover (not shown) over native content of the Showtimes App 100, such as by restricting the app results to a portion of the Showtimes App 100, leaving a border of native content of the Showtimes App 100. In addition, the app results may be shown on a semi-transparent background so that the native content of the Showtimes App 100 remains at least faintly visible. In various implementations, the app results may slide in from one side or from the top or bottom, suggesting to the user that the app results can be dismissed by swiping in an opposite direction.
For example, the “Find Food” button 124 may have initiated a search for late night food. The Showtimes App 100-2 displays a list of relevant apps, including Yelp, Domino's Pizza, TripAdvisor, OpenTable, and Urbanspoon. The Showtimes App 100-2 may also retain its own branding, such as the title, indicated at 108-2.
Note that “late night food” may not be the preferred search in conjunction with afternoon matinee performances. The Showtimes App 100 may therefore implement multiple external functionality buttons, one that corresponds to a search for “late night food”, one that corresponds to “restaurants”, and one that corresponds to “brunch restaurants.” The Showtimes App 100 may select which one of these buttons is included in the state based on a current time in the user's time zone, or based on the times of movie showtimes being displayed.
The search string that yielded the app results may be presented to the user, such as at 144. This search string may be revised by the user to perform additional app searches. In this way, the Showtimes App 100-2 can allow access to an array of functions not explicitly anticipated by the developer. Each app result may include a title (such as the title “Yelp” at 148), a graphic (such as the Yelp icon at 152), and an access user interface element (such as the open button for Yelp at 156).
Note that if information of which apps are installed is available, the action can be tailored to state “Open” when the app is already installed or “Download” (or “Install”) when the app has not been installed. A Domino's Pizza app may not be installed and therefore a user interface element (button 160) gives the user the ability to download the app. While text (such as “Open” and “Download”) is used in these examples, icons or other visual cues may distinguish between apps that can simply be opened or need to be installed.
The Domino's Pizza app is a sponsored app, which may be indicated as shown at 164 using a sponsorship banner. Sponsored apps can be highlighted in any way that is perceptible to the user, including increasing the font size, using different colors, moving the app higher in the list, adding a graphic or text sponsorship label, etc. In some implementations, the sponsorship may not be immediately displayed to the user, and may simply cause the sponsored app to be moved up in the rankings.
The button 160 may trigger the opening of a digital distribution platform in either a web browser or a dedicated app, such as the Google Play Store app. The identity of the app to be downloaded is provided to the digital distribution platform so that the user is immediately presented with the ability to download the desired app. In some implementations, the download may begin immediately, and the user may be given the choice of approving installation.
Referring back to the query wrapper 136, example fields are shown. For example, a query text field 136-1 may include a text string indicating the query to be performed (such as “late night food”). An installed apps field 136-2 includes an indication of the apps installed in the smartphone 104. A blacklist field 136-3 indicates apps that the Showtimes App 100 does not want to present to the user, such as apps from a competitor. A device info field 136-4 provides information about the smartphone 104, such as an operating system version, a screen resolution, geolocation of the smartphone 104, etc.
Fields for an example implementation of the app results 140 include an ordered list 140-1 that includes an array or set data structure listing the apps in order according to rank. The rank may be based on relevance, and may be adjusted based on sponsorship. The data in the ordered list 140-1 may include a text string indicating a name of each app. An images field 140-2 contains binary images, such as icons, for the apps. A field 140-3 for access links provides information on how to produce the open or download action to access the selected app. Other metadata 140-4 can include data such as number of reviews for the apps, number of downloads for the apps, a user rating score (such as a number of stars), etc.
Additional metadata 140-4 can include download velocity (the number of downloads over a recent time horizon) or other indicators of trending popularity of an app. A new and valuable app may not yet have a large installed base, but may show rapid growth in number of downloads. Therefore, trending popularity may be used as a signal to rank the display of apps, with trending apps moved higher up in a results list. Further, a visual indication of trending, such as text (“trending” or a word correlated with trending, such as “popular”) or an icon, may be shown in close proximity to an app for which a trending metric of the app is above a threshold. The threshold may be an absolute threshold for all apps, or may be relative/normalized to the market segment in which the app exists or to the other apps in the results list.
In
Activation of the “Directions” button 184 opens up a results page (state 180-2, shown in the smartphone 104-4) including a title 188 indicating that the below apps are for “Driving Directions.” The first app listed in this example is Google Maps with an associated “Open” button 192. A download button 194 is present for the second result, Waze. Sponsored apps may be grouped together and labeled with a sponsored apps title 196. In various implementations, the sponsored apps may be shown at the top of the list, at the bottom of the list, in the middle or the list, or interspersed throughout the list.
As described in more detail below, apps may also be accessed through intermediary software, such as a web browser. These apps, such as HTML5 apps, may be shown with an open action and may be identified as being a web-based app using an icon or text. For example, a globe icon is shown at 198 to indicate that the “Mapquest GPS Navigation & Maps” app will be opened in a web browser. As another example, instead of only stating “Open”, the action element 156 could state “Open in browser” or “Open in Chrome.”
In
The developer portal 204 provides code for App A that allows external functionality to be implemented into App A. A button associated with this external functionality will cause App A to query a search system 132. The developer portal 204 may provide parameters to the search system 132 based on the decisions made by the app developer 200. In some implementations, some or all of the decisions that the app developer 200 makes are incorporated into the code provided by the developer portal 204 to the app developer 200.
In other words, some data about App A may be known beforehand by the search system 132, while other data will be provided directly from App A, such as via the query wrapper. As one example, the app developer 200 may decide that App M should not be shown to users of App A and adds App M to a blacklist. The developer portal 204 may provide the blacklist to the search system 132 so that the search system 132 will return apps only if those apps are not in the blacklist. Alternatively, the code provided by the developer portal 204, and that is integrated into App A, may provide the blacklist to the search system 132 while App A is running. In other implementations, App A may not provide any information about a blacklist to the search system 132 and instead filter the results returned by the search system 132 to remove apps corresponding to the blacklist.
Once the app developer 200 receives the code from the developer portal 204, the app developer 200 finalizes App A (which may include compiling and linking) and provides App A to a digital distribution platform 208. One example of the digital distribution platform 208 is the Google Play® digital distribution platform by Google, Inc.
The developer portal 204 may provide code to the app developer 200 in a variety of forms. The code may be provided in plain text that can be copied and pasted into the coding platform used by the app developer 200. The developer portal 204 may instead provide some or all of the code in the form of a library, which may be precompiled object code.
The library may be associated with an API (Application Programming Interface), and a definition of the API may be provided to the app developer 200. In some implementations, the app developer 200 may use a graphical user interface on the developer portal 204 (such as a website) to automatically generate appropriate API calls. These API calls can be included in App A during its development. The developer portal 204 may provide visual elements, such as buttons, for use by the app developer 200.
Choices made by the app developer 200 during development of App A may be fixed into the code received from the developer portal 204. Alternatively, the app developer 200 may be able to modify certain aspects of the code, such as by supplementing a blacklist. Once App A is provided to the digital distribution platform 208, the code in App A may be relatively fixed. Changes to App A may require a version update at the digital distribution platform 208. As a result, post-distribution changes, such as updating of blacklists, may instead be done using the developer portal 204 and communicated to the search system 132.
When a user of the smartphone 104 installs and opens App A from the digital distribution platform 208, an external functionality button 212 will be present on some or all of the states of App A. The term “state” may refer to a screen of App A. If App A is a movie showtimes app, each state may correspond to the showtimes of a particular movie in a particular location. The external functionality button 212 may be present in a template that applies across all of the states of App A that show movie showtimes.
App A may have additional states, such as a movie listing that lists all currently playing movies according to geographical area, a theater listing that lists all theaters within the geographical area, etc. The external functionality button 212 may be present in those states or may be absent. Depending on the choices made by the app developer 200, other external functionality buttons (not shown) may be present in those other states.
The app developer 200 may specify a template, or layout, for each type of state of App A. For example, the template may include two external functionality buttons, such as are shown in
When the user of the smartphone 104 actuates the external functionality button 212, such as by touching the external functionality button 212, a query wrapper is sent to the search system 132. The search system 132 processes the query wrapper, as described in more detail below, and returns a set of suitable apps to the smartphone 104. The suitable apps may be displayed within App A using code provided by the developer portal 204. In other implementations, the smartphone 104 may include an app developed by an operator of the search system 132. This search system app may display the suitable apps to the user of the smartphone 104.
Although
In
App Developer A creates one or more app profiles in the developer portal 204. Settings and data related to App A are shown at 304, and the app developer 200 may be able to cycle through other apps using “Previous” and “Next” user interface elements 306-1 and 306-2. Global policies are shown at 308 and include monetization preferences 312 and a blocked apps list 316 that apply to all apps. The monetization preferences 312 may include payment details for App Developer A, including how App Developer A can provide money to the developer portal 204 to obtain advertising as well as how the developer portal 204 can pay App Developer A for sponsored links being shown in the apps associated with App Developer A. For example only, the monetization preferences 312 may include billing addresses and PayPal account information.
The blocked apps list 316 includes a list of apps that App Developer A does not want to have displayed in any of the apps for App Developer A. A “Choose” button 320 allows App Developer A to choose, from a list, which apps should be blocked. This list (not shown) may be searched, filtered, etc. Explicitly chosen apps for a blacklist are shown at 324. In addition, a “Manage Patterns” button 328 may allow App Developer A to specify wildcard patterns that match apps not to be presented to users of App Developer A's apps. For example, if App Developer A works for Sam's Club Warehouse Centers, one specified pattern may be for Costco. The Costco pattern may include wildcards before and after “Costco” so that any Costco app is identified.
Although this discussion focuses on the titles of apps, blacklists may also be specified based on words in the description of an app, the name of the developer of the app, etc. In addition, general blacklist criteria may specify that, for example, an app downloaded less than a specified number of times should not be shown to a user. The manage patterns button 328 may allow App Developer A to specify patterns using wildcards, regular expressions, etc. A first specified pattern followed by two apps that match that pattern are shown at 332. Similarly, a second pattern and four matching apps are shown at 336.
In various other implementations, App Developer A may specify a whitelist of apps to display, where any apps not included in the whitelist will not be presented to a user of App A. In other implementations, App Developer A may specify a preference list including apps that are preferred: these apps are then emphasized (such as by moving higher on the screen) when present in the result set. The preference list may be an ordered structure, such that an app appearing higher in the preference list is to be given greater precedence than an app appearing lower in the preference list.
In the app specific settings 304, a list of functions 340 identifies what external functionality will be available to App A. For example, the listed functions within 340 may correspond to finding food, finding driving directions, and finding movie reviews. An “Add” button 344 allows a new/edit function to be identified using a new function interface 348. A list of available functions 352 may include functions of interest identified by the developer portal 204 for various verticals, such as movies, dining, travel, sports, etc. A filter interface 356 allows the available functions to be filtered for easier identification of the desired function. If none of the available predefined functions appear to address App Developer A's needs, a custom function may be specified at 360. For example, a text string may be typed into a text box.
A user interface options portion 364 allows App Developer A to specify how results for the selected function should be displayed. The options may include specifying how many results are to be shown, what associated information (such as starred ratings) should be shown, how the button corresponding to the function should be displayed, and how sponsored apps will be identified. As one example, App Developer A may specify how many sponsored apps should be shown in a results set. In another example, App Developer A may be able to specify that only already-installed apps should be shown to the user. App Developer A may also specify, such as by using CSS (Cascading Style Sheets), the graphical presentation of search results.
For example, in the user interface options portion 364, the App Developer A may specify a particular shape and size for a button, and may identify whether logos or texts identifying the developer portal 204 (such as a logo of a provider of the developer portal 204) should be shown on the button. App Developer A may be able to specify in the user interface options portion 364 that App Developer A will create the button or other user interface element and that therefore the user interface element does not need to be provided by the developer portal 204. Instead, the developer portal 204 can provide the code for searching for the function, which will be called by whatever user interface element App Developer A creates.
A function-specific blocked apps list 368 allows App Developer A to block apps specifically per function. For example, App Developer A may believe that a particular popular app does not provide a good user experience for the particular function at issue. This app can therefore be added to the function specific blocked apps list 368. When a function has been specified and/or edited, a “Done” button 372 can be actuated by App Developer A. An app-specific blocked apps list 376 allows App Developer A to block apps for all functions specified for App A. For example, App Developer A may develop apps for a number of small companies. Each app may therefore correspond to a different company. Each company may have their own list of competitors that may be added to the app-specific blocked apps list 376.
A “Download” button 380 allows App Developer A to obtain the code necessary to access the specified functions in the list of functions 340. As discussed above, a customized library may be downloaded in response to the “Download” button 380. Alternatively, a predetermined library may be downloaded that forms query wrappers and presents search results. This library may be accessed using an API; API calls corresponding to the list of functions 340 may be downloaded for use in the programming environment of App Developer A.
A software development kit (SDK) may be downloaded using the “Download” button 380. The SDK may integrate with the programming environment of App Developer A, such as an integrated development environment. The SDK may duplicate or replace some of the features of the developer portal 204, in one example resulting in
The settings specified in the developer portal 204 may be reflected in the parameters of the API calls, the downloaded code, a custom library, etc., provided by the developer portal 204. This code may then be integrated into App A and the code integrated into App A is solely responsible for providing relevant information to the search system 132. Alternatively, some data may be communicated by the developer portal 204 to the search system 132. For example, the global policies 308 may be provided to the search system 132. Then, whenever an app corresponding to App Developer A queries the search system 132, the search system 132 is aware of, and operates according to, the global policies 308 set by App Developer A.
App-specific policies may also be communicated to the search system 132. That way, when the search system 132 receives a query from App A, the search system 132 is aware of some or all of the parameters specified in the developer portal 204 for App A. App Developer A may make changes in the developer portal 204 subsequent to distributing App A. These changes may be sent to the search system 132 to allow for the behavior of external functionality buttons to be adapted over time without having to create a new version of App A digital distribution platform 208.
As mentioned above, some parameters may never be communicated to the search system 132 in some implementations. For example, certain blocked apps may be filtered out within App A itself as opposed to being filtered out by the search system 132. This filtering may be performed by code provided by the developer portal 204 and customized by, for example, the blocked apps list 316. Alternatively, the developer portal 204 may provide instructions to App Developer A on how to perform the filtering using appropriate API calls to functions or libraries provided by the developer portal 204.
In
At 404-2, a representation of installed apps is provided. For example, an exhaustive listing of all installed apps including titles and version numbers may be included. In some implementations, a bit field may be specified for the one-hundred most popular apps. In other words, one hundred binary digits correspond to whether each of those apps is installed, with a zero indicating that the app is not installed and then one indicating that app is installed. Although one hundred is used as an example, for efficient storage a power of two (such as 128) may be used. To allow for this shortened bit field format, the set of apps must be pre-arranged.
Another mechanism for indicating installed apps using a limited number of bits is a Bloom filter. The Bloom filter specifies whether an app from a predefined set of apps is possibly installed on the device or whether the app is definitely not installed. To achieve storage compression, the output of a Bloom filter does not definitively state that a certain app is present; the Bloom filter output only definitively states whether certain apps are not present.
At 404-3, a blacklist is specified. This blacklist may supplement a blacklist already present in the search system 132 or may be a stand-alone blacklist. The blacklist may list apps not to return based on unique identifiers of those apps, which are known beforehand by the search system 132.
At 404-4, device info of the device transmitting the query wrapper 404 may be included. This information may include the operating system and the operating system version number, geolocation data for the device, an identity of the app sending the query wrapper 404, and an identity of the app developer of the app. For example, the app or app developer identities may be used by the search system 132 to apply pre-arranged parameters provided by the developer portal 204, such as a blacklist. The app identity may also be used by the search system 132 to remove that app from the app results—in other words, to avoid returning an app result for the very same app that sent the query wrapper.
In
In
In
In this way, the text of the query may change over time, so that a “find food” query may later be changed by the developer portal 204 or the search system 132 to be a “find restaurants” query. These updates may be made by operators of the search system 132 and/or the developer portal 204 based on user experiences. For example, a search for “find food” may identify grocery stores, which will be less valuable for users trying to find a restaurant prior to a movie. The query wrapper 416 may also include device info 416-2, such as an operating system version number.
In
An images field 504-2 may include encoded images for each of the apps in the app list 504-1. Access links 504-3 specify access mechanisms for each of the apps in the app list 504-1. For example, the access links may include commands to open the app if installed and/or links to a digital distribution platform to download an app that is not installed. Other access mechanisms may include a URL (uniform resource locator) to access a web-based app. When the app results structure 504 is returned, code within the app may determine whether open versus download is the appropriate action based on the specific installation status of each app.
Other metadata 504-4 may include a star rating for each app, a text description for each app, review text and metrics (such as number of reviews), and a designation of sponsorship. The sponsorship designation may be a simple binary flag or may include an indication of sponsorship level. For example, a sponsor may be willing to pay a significant amount for an install. This level of interest by the sponsor may allow the app to promote the sponsored app more prominently in hopes of recognizing that revenue.
At
The HTML image map 508-1 may be sized according to the size of the requesting device by the search system 132. In other implementations, multiple HTML image maps may be provided and an appropriate one may be selected at the device according to the resolution of the device's screen and the amount of real estate to be dedicated to the app results display. The search system 132 may create one HTML image map that will work with a certain range of display sizes and resolutions, and the HTML image map may be proportionally scaled by the device to fit the specified region for display.
At
In
An app blocking management module 612 allows for the formulation of patterns that match against apps desired to be blocked by the app developer 200. The patterns and explicitly selected apps to block are stored in the data store 608, and may have associated metadata indicating whether those apps are blocked for all apps of the developer, for a specific app of the developer, or for a specific function of one or more apps. The entire list of apps available to be blocked may also be stored in the data store 608, and may be obtained from the search system 132.
A search service communication module 616 may periodically update the data store 608 based on the list of apps recognized by the search system 132. User-specific data may be encrypted while stored in the data store 608. In various implementations, general data, such as the list of apps, may be stored in unencrypted form.
An app management module 620 tracks various apps that each developer is working on, including names and other parameters of each app. An app functionality management module 624 tracks what external functionality is being used for each app. The app functionality management module 624 stores a list of the functions used in each app in the data store 608. The app management module 620 stores a list of apps developed by the app developer in the data store 608.
A user interface customization module 628 stores data controlling how each function or app will appear as specified by the developer. This may include graphical properties of a button, such as whether a shadow is present, whether a 3D effect is used, font, etc. In addition, preferences for labelling and presentation of sponsored apps may be set using the monetization preferences module 632 and stored in the data store 608.
A monetization preferences module 632 stores monetization preferences for each app developer. In various implementations, monetization preferences may be different for each app of the app developer. An app developer, or an advertiser working on behalf of an app developer, may use the monetization preferences module to book promotion of their app, even if their app does not take advantage of the external functionality features offered by the developer portal 204.
In other words, such developers can pay (according to, for example, cost per impression, cost per click, or cost per install) to have their app promoted by app developers who have implemented external functionality using the code offered by the developer portal 204. For this reason, the developer portal 204 may also be referred to as an advertiser portal. In various implementations, the developer portal 204 may charge a developer a fee (which may be assessed per app or per query sent to the search system 132) to use the code and services from the developer portal 204.
A code generation module 636 generates code to be provided to the app developer 200. This code may include a custom library based on data from the app blocking management module 612, the app management module 620, the app functionality management module 624, the user interface customization module 628, and the monetization preferences module 632. The code generation module 636 may generate specific API calls to implement the preferences of the app developer. The code generation module 636 may also provide a software development kit to the app developer 200.
As preferences change in the data store 608, the search service communication module 616 may update the search system 132 with the updated preferences. In this way, the app developer may be able to alter which apps are blocked, which sponsored apps are shown, etc. for an app that has already been distributed.
In some implementations, user devices communicate with the search system 132 via a partner computing system (not illustrated). The partner computing system may be a computing system of a third party that leverages the search functionality of the search system 132. The partner computing system may be owned by a company or organization other than the operator of the search system 132. Examples of such third parties include Internet service providers, aggregated search portals, and mobile phone providers. The user devices may send search queries to the search system 132 and receive search results from the search system 132, all via the partner computing system. The partner computing system may provide a customized user interface to the user devices and/or may modify the search experience provided on the user devices.
The example implementation of the search system 132 shown in
The application data store 704 may be updated with databases, indices, tables, files, and other data structures, which may be populated by the data sources 708. Parsers and other ETL (extract, transform, and load) processes may adapt data from the data sources 708 for storage in the application data store 704. In some implementations, data may be manually entered and/or manually transformed into a format usable by the application data store 704. The data sources 708 may include data from application developers 708-1, such as application developers' websites and data feeds provided by developers.
The data sources 708 may include operators of digital distribution platforms 708-2 configured to distribute native applications to user devices. Example digital distribution platforms 708-2 include the Google Play® digital distribution platform by Google, Inc., the Application Store® digital distribution platform by Apple, Inc. and Windows Phone® store by Microsoft Corp. The data sources 708 may also include other websites, such as blogs 708-3, application reviews websites 708-4, and social networking sites 708-5, such as Facebook® by Facebook, Inc. and Twitter® by Twitter, Inc.
The data sources 708 may also include online databases 708-6 of data related to movies, television programs, music, restaurants, etc. Each of the data sources 708 may have independent ontologies and may be updated at different rates. Therefore, the application data store 704 may be updated from each of the data sources 708 at different rates. In addition, credibility and accuracy of data may differ across the data sources 708. Measures of reliability, timeliness, and accuracy may be stored in the application data store 704 and may be used to weight search results obtained from those data sources 708.
In
A single value for the application ID 800-2 may cover multiple application editions. The term “edition” applies to multiple versions of a single app and may also apply to versions of that app released for alternative operating systems. For example only, Angry Birds (as shown in
An example Angry Birds application record 804 includes a name 804-1 of “Angry Birds” and a unique ID 804-2 expressed in hexadecimal as 0x3FF8D407. Attributes 804-3 for Angry Birds may include a name of the developer of Angry Birds, text reviews of Angry Birds, a genre indicator for Angry Birds (such as “Games,” or sub-genre “Physics-Based Games”), ratings (such as star ratings) for Angry Birds, a textual description (which may be provided by the developer), a number of downloads (which may be restricted to the most recent edition or could be for all editions), access mechanisms (how to open Angry Birds when already installed or how to install Angry Birds when not yet installed), and device info (for example, minimum requirements of operating system, hardware, and resolution for best operation).
The term “software application” can refer to a software product that causes a computing device to perform a function. In some examples, a software application may also be referred to as an “application,” an “app,” or a “program.” Software applications can perform a variety of different functions for a user. For example, a restaurant reservation application can make reservations for restaurants, and an Internet media player application can stream media (such as a song or movie) from the Internet.
In some examples, a single software application can provide more than one function. For example, a restaurant reservation application may also allow a user to read user reviews for a restaurant in addition to making reservations. As another example, an Internet media player application may also allow a user to perform searches for digital media, purchase digital media, generate media playlists, and share media playlists.
The functions of an application can be accessed using native application editions of the software application and/or web application editions of the software application. A native application edition (or “native application”) is, at least in part, installed on a user device. In some scenarios, a native application is installed on a user device, but accesses an external resource (e.g., an application server) to obtain data from the external resource. For example, social media applications, weather applications, news applications, and search applications may respectively be accessed by one or more native application editions that execute on various user devices. In such examples, a native application can provide data to and/or receive data from the external resource while accessing one or more functions of the software application.
In other scenarios, a native application is installed on the user device and does not access any external resources. For example, some gaming applications, calendar applications, media player applications, and document viewing applications may not require a connection to a network to perform a particular function. In these examples, the functionality of the software product is encoded in the native application itself.
Web application editions (also referred to as “web applications”) of a software application may be partially implemented by a user device (such as a web browser executing the user device) and partially implemented by a remote computing device (such as a web server or application server). For example, a web application may be an application that is implemented, at least in part, by a web server and accessed by a web browser native to the user device. Example web applications include web-based email, online auctions websites, social-networking websites, travel booking websites, and online retail websites. A web application accesses functions of a software product via a network. Example implementations of web applications include web pages and HTML5 application editions.
When rendering a set of app search results, a user device displays a set of user-selectable links that can be selected by a user of the user device. A user-selectable link may include one or more underlying access mechanisms. A user-selectable link, when selected by a user, causes the user device to access a software application using an edition of the software application identified by the access mechanism.
Examples of access mechanisms include application access mechanisms, web access mechanisms, application download addresses, and scripts. An application access mechanism may be a string that includes a reference to a native application and indicates one or more operations for the user device to perform. If a user selects a user selectable link including an application access mechanism, the user device may launch the native application referenced in the application access mechanism.
In some implementations, any combination of the operating system of the user device, a search application executed by the user device, a native application executed by the user device, and/or a web browser executed by the user device can launch the native application referenced in the application access mechanism. An application resource identifier is an example application access mechanism.
A web access mechanism may be a string that includes a reference to a web application edition of a software product, and indicates one or more operations for a web browser to execute. A web access mechanism may be a resource identifier that includes a reference to a web resource (e.g., a page of a web application/website). For example, a web access mechanism may refer to a uniform resource locator (URL) used with hypertext transfer protocol (HTTP). If a user selects a user-selectable link including a web access mechanism, the user device may launch a web browser application and may pass the resource identifier to the web browser.
An application download access mechanism may indicate a location (such as a digital distribution platform) where a native application can be downloaded in the scenario where a native application edition of the application is not installed on the user device. If a user selects a user-selectable link including an application download access mechanism, the user device may access a digital distribution platform from which the referenced native application edition may be downloaded. The user may opt to download the native application edition. Upon installation, the user device may automatically launch the native application edition.
A script access mechanism is a set of instructions that, when executed by the user device, cause the user device to access a resource indicated by the script. For example, the script may instruct an operating system of the user device to launch a digital distribution platform interface application; browse to the specified native application within the digital distribution platform interface application; install the specified native application; and then open the specified native application.
In
The set generation module 1008 identifies a consideration set of application records based on the query tokens. Some or all of the contents of the records of the application data store 704 may be indexed in inverted indices. In some implementations, the set generation module 1008 uses the Apache Lucene software library by the Apache Software Foundation to identify records from the inverted indices.
The set generation module 1008 may search the inverted indices to identify records containing one or more of the query tokens. As the set generation module 1008 identifies matching records, the set generation module 1008 can include the unique ID of each identified record in the consideration set. Further, in some implementations, the set generation module 1008 may determine an initial score of the record with respect to the search query. The initial score may indicate how well the contents of the record matched the query tokens. For example, the initial score may be a function of the term frequency-inverse document frequency (TF-IDF) values of the respective query terms.
A set processing module 1012 receives the unique IDs from the set generation module 1008 and determines a result score for some or all of the IDs. A result score indicates the relevance of an app, given the query tokens and context parameters, with a higher score indicating a greater perceived relevance. For example, other items in the query wrapper may act as context parameters. Geolocation data may limit the score (or simply remove altogether) of apps that are not pertinent to the location of the user device. A blacklist in the query wrapper may cause the set processing module 1012 to remove apps from the consideration set that match the criteria in the blacklist, or to set their score to zero.
The set processing module 1012 may generate a result score based on one or more scoring features, such as record scoring features, query scoring features, and record-query scoring features. Example record scoring features may be based on measurements associated with the record, such as how often the record is retrieved during searches and how often links generated based on the record are selected by a user. Query scoring features may include, but are not limited to, the number of words in the search query, the popularity of the search query, and the expected frequency of the words in the search query. Record-query scoring features may include parameters that indicate how well the terms of the search query match the terms of the record indicated by the corresponding ID.
The set processing module 1012 may include one or more machine learned models (such as a supervised learning model) configured to receive one or more scoring features. The one or more machine learned models may generate result scores based on at least one of the function ID scoring features, the record scoring features, the query scoring features, and the record-query scoring features.
For example, the set processing module 1012 may pair the search query with each ID and calculate a vector of features for each {query, ID} pair. The vector of features may include one or more record scoring features, one or more query scoring features, and one or more record-query scoring features. In some implementations, the set processing module 1012 normalizes the scoring features in the feature vector. The set processing module 1012 can set non-pertinent features to a null value or zero.
The set processing module 1012 may then input the feature vector for one of the application IDs into a machine-learned regression model to calculate a result score for the ID. In some examples, the machine-learned regression model may include a set of decision trees (such as gradient-boosted decision trees). Additionally or alternatively, the machine-learned regression model may include a logistic probability formula. In some implementations, the machine-learned task can be framed as a semi-supervised learning task, where a minority of the training data is labeled with human-curated scores and the rest are used without human labels.
The machine-learned model outputs a result score of the ID. The set processing module 1012 can calculate result scores for each of the IDs that the set processing module 1012 receives. The set processing module 1012 associates the result scores with the respective IDs and outputs the most relevant scored IDs.
A developer portal data module 1016 stores data provided by the developer portal 204. For example, when the developer portal data module 1016 identifies the app that sent the query wrapper, the developer portal data module 1016 may provide a pre-arranged blacklist to the set processing module 1012.
A sponsored app module 1020 receives the query wrapper and identifies apps relevant to the query for which sponsorship has been indicated by an advertiser. For example, the sponsored app module 1020 may receive the consideration set of apps from the set generation module 1008 and identify apps within the consideration set for which sponsorship is desired. The sponsored app or apps that received the highest initial score from the set generation module 1008 may be selected as sponsored apps and provided to the set processing module 1012. The set processing module 1012 may score the apps provided by the sponsored app module 1020, and if the result score is high enough, output the sponsored app or apps as part of the ordered search results.
The sponsored app module 1020 may operate according to a variety of targeting parameters, which may be specified by an advertiser, such as by using the developer portal 204. For example, the advertiser may desire to have their app shown when similar apps are included in the consideration set. The similarity may be explicitly specified by the advertiser—for example, by listing apps similar to the advertiser's app.
In other implementations, the search system 132 may include a similarity assessment module (not shown) that assesses how similar two apps are to each other. The similarity assessment module may determine the similarity between each of the apps in the consideration set with each of the potential sponsored apps. In various implementations, the advertiser may choose to have their app shown when the search query includes certain keywords.
The sponsored app module 1020 may take into account whether a sponsored app is already installed on the user device from which the query wrapper was received. An advertiser may only be willing to pay a reduced price (even zero) to promote their app when their app is already installed on the user device.
The sponsored app module 1020 may select sponsored apps based on bid prices set by advertisers. An advertiser may set different bid prices to promote their app based on, for example, whether their app is already installed, how similar their app is to other apps in the result set, etc. The sponsored app module 1020 may choose, for inclusion in the ordered search results, apps having the highest bid prices for the present search.
In
At 1120, the app developer distributes App A over a digital distribution platform. Once App A is available on the digital distribution platform, a user can install and run App A at 1124. At 1128, control determines whether a current screen (or state) of App A includes a search interface element, such as an external functionality button. If so, control transfers 1132; otherwise, control remains at 1128.
At 1132, control determines whether the user operates the external functionality element, such as by clicking or tapping a button. If so, control transfers to 1136; otherwise, control returns to 1128. At 1136, the search code in App A gathers data including geolocation, apps installed on the device, a version of the operating system installed on the device, etc. At 1140, the search code, based on the gathered data, assembles a query wrapper.
At 1144, an optional decision is made. In certain circumstances, a developer may be willing to hand off the search results presentation to an app operated by the developer portal or by the search system. If this is desired by the developer, the decision at 1144 will transfer to 1148 when the search-system-specific app is present on the device. If the search-system-specific app is not present on the device, or if the developer of App A does not wish to hand off the results presentation to the search-system-specific app, control continues at 1152.
At 1148, the search-system-specific app sends the query wrapper to the search system and at 1156 the search system returns app results. At 1160, the search-system-specific app parses and displays the results to the user. Control then continues at 1164.
At 1164, if the user selects one of the apps in the results, control transfers to 1168; otherwise, if the user exits from the result listing, control returns to 1128. At 1168, control opens the selected app or transitions to downloading the selected app, depending on whether the selected app is already installed. At 1172, if the user returns to App A from this newly opened app, control transfers to 1128; otherwise, control remains at 1172.
At 1152, search code embedded in App A sends the query wrapper to a predefined search system, which may be specified by a fully qualified domain name or one or more IP (Internet Protocol) addresses. At 1176, the search system returns app results. At 1180, the search code embedded in App A parses and displays the app results from the search system to the user. Control then continues at 1164.
In
For example only, the security policy may include exponentially increasing a time that the user has to wait before attempting to authenticate again. In addition, the security policy may include a set number of unsuccessful attempts before the user is prevented from logging in without manual intervention at the developer portal. Further, unsuccessful authentication may be logged and may be communicated to a predetermined email address of the user.
At 1220, control allows selection from among the developers' apps. At 1228, if a new app is indicated by the developer, control transfers to 1232; otherwise, control transfers to 1236. At 1232, control creates a new app record for that developer and control returns to 1220. At 1236, control determines whether the developer has indicated that general settings should be edited. If so, control transfers to 1240, where settings are presented for editing. These settings may include a global blacklist, monetization policies, etc.
Control then returns to 1220. If, at 1236, the developer has not indicated that general settings should be edited, control transfers to 1244. At 1244, control determines whether the developer has indicated that data corresponding to an app should be edited. If so, control transfers to 1248; otherwise, control transfers to 1252. At 1248, control allows for selection of supplemental functions, which indicate external functionality that the developer wants to introduce to their app. In addition, settings for already selected functions may be changed, such as function specific blocked apps and user interface options. Control then returns to 1220.
At 1252, if a download has been requested, control transfers to 1256; otherwise, control transfers to 1260. At 1260, if the user logs out, control returns to 1204; otherwise, control returns to 1220. At 1256, control prepares a package of images and code to implement the desired external functionality for the selected app. At 1264, control transmits the package to the developer for the developer's integration into an app under development. Control then returns to 1220.
In
At 1316, control determines whether an apparent source of the query wrapper is associated with search parameters. If so, control transfers to 1320; otherwise, control transfers to 1324. At 1320, the search parameters may have been provided by the developer portal 204 after specification by the developer. These search parameters may include a blacklist. Control therefore filters the consideration set, such as by removing apps from the consideration set that are found in the blacklist. Control then continues at 1324.
At 1324, control generates scores for each app in the consideration set. At 1328, control selects apps having the top scores. At 1332, control identifies sponsored apps present in the consideration set and, if not already present within the selected apps identified simply based on score, includes one or more sponsored apps in the selected apps. At 1336, control responds with the selected apps. As described above, this response may include information from the application data store 704, such as access mechanisms, icons, ratings, etc. Control then returns to 1304.
Modules and data stores included in the search system 132 and the developer portal 204 represent features that may be included in the search system 132 and the developer portal 204 of the present disclosure. The modules and data stores described herein may be embodied by electronic hardware, software, firmware, or any combination thereof. Depiction of different features as separate modules and data stores does not necessarily imply whether the modules and data stores are embodied by common or separate electronic hardware or software components.
In some implementations, the features associated with the one or more modules and data stores depicted herein may be realized by common electronic hardware and software components. In some implementations, the features associated with the one or more modules and data stores depicted herein may be realized by separate electronic hardware and software components.
The modules and data stores may be embodied by electronic hardware and software components including one or more processing units, one or more memory components, one or more input/output (I/O) components, and interconnect components. Interconnect components may be configured to provide communication between the one or more processing units, the one or more memory components, and the one or more I/O components. For example, the interconnect components may include one or more buses that are configured to transfer data between electronic components. The interconnect components may also include control circuits (e.g., a memory controller and/or an I/O controller) that are configured to control communication between electronic components.
In some implementations, the search system 132 and the developer portal 204 may be a system of one or more computing devices (e.g., a computer search system) that are configured to implement the techniques described herein. Put another way, the features attributed to the modules and data stores described herein may be implemented by one or more computing devices. Each of the one or more computing devices may include any combination of electronic hardware, software, and/or firmware described above.
For example, each of the one or more computing devices may include any combination of processing units, memory components, I/O components, and interconnect components described above. The one or more computing devices of the search system 132 and the developer portal 204 may also include various human interface devices, including display screens, keyboards, pointing devices (e.g., a mouse), touchscreens, speakers, and microphones. The computing devices may also be configured to communicate with additional devices, such as external memory (e.g., external HDDs).
The one or more computing devices of the search system 132 and the developer portal 204 may be configured to communicate with the network 220. The one or more computing devices of the search system 132 and the developer portal 204 may also be configured to communicate with one another (e.g., via a computer network). In some examples, the one or more computing devices of the search system 132 and the developer portal 204 may include one or more server computing devices configured to communicate with user devices (e.g., receive query wrappers and transmit search results), gather data from data sources 708, index data, store the data, and store other documents.
The one or more computing devices may reside within a single machine at a single geographic location in some examples. In other examples, the one or more computing devices may reside within multiple machines at a single geographic location. In still other examples, the one or more computing devices of the search system 132 and the developer portal 204 may be distributed across a number of geographic locations.
The computing device 1400 includes a processor 1410, memory 1420, a storage device 1430, a high-speed interface/controller 1440 connecting to the memory 1420 and high-speed expansion ports 1450, and a low-speed interface/controller 1460 connecting to low-speed bus 1470 and storage device 1430. Each of the components 1410, 1420, 1430, 1440, 1450, and 1460, are interconnected using various busses, and may be mounted on a common motherboard or in other manners as appropriate.
The processor 1410 can process instructions for execution within the computing device 1400, including instructions stored in the memory 1420 or on the storage device 1430 to display graphical information for a graphical user interface (GUI) on an external input/output device, such as display 1480 coupled to the high-speed controller 1440. In other implementations, multiple processors and/or multiple buses may be used, as appropriate, along with multiple memories and types of memory. Also, multiple computing devices 1400 may be connected, with each device providing portions of the necessary operations (e.g., as a server bank, a group of blade servers, or a multi-processor system).
The memory 1420 stores information non-transitorily within the computing device 1400. The memory 1420 may be a computer-readable medium, a volatile memory unit(s), or non-volatile memory unit(s). The memory 1420 may be physical devices used to store programs (e.g., sequences of instructions) or data (e.g., program state information) on a temporary or permanent basis for use by the computing device 1400. Examples of non-volatile memory include, but are not limited to, flash memory and read-only memory (ROM)/programmable read-only memory (PROM)/erasable programmable read-only memory (EPROM)/electronically erasable programmable read-only memory (EEPROM) (e.g., typically used for firmware, such as boot programs). Examples of volatile memory include, but are not limited to, random access memory (RAM), dynamic random access memory (DRAM), static random access memory (SRAM), phase change memory (PCM) as well as disks or tapes.
The storage device 1430 is capable of providing mass storage for the computing device 1400. In some implementations, the storage device 1430 is a computer-readable medium. In various different implementations, the storage device 1430 may be a floppy disk device, a hard disk device, an optical disk device, or a tape device, a flash memory or other similar solid state memory device, or an array of devices, including devices in a storage area network or other configurations. In additional implementations, a computer program product is tangibly embodied in an information carrier. The computer program product contains instructions that, when executed, perform one or more methods, such as those described above. The information carrier is a computer- or machine-readable medium, such as the memory 1420, the storage device 1430, or memory on processor 1410.
The high-speed controller 1440 manages bandwidth-intensive operations for the computing device 1400, while the low-speed controller 1460 manages less bandwidth-intensive operations. Such allocation of duties is exemplary only. In some implementations, the high-speed controller 1440 is coupled to the memory 1420, the display 1480 (e.g., through a graphics processor or accelerator), and to the high-speed expansion ports 1450, which may accept various expansion cards (not shown).
In some implementations, the low-speed controller 1460 is coupled to the storage device 1430 and low-speed expansion port 1470. The low-speed expansion port 1470, which may include various communication ports (e.g., USB, Bluetooth, Ethernet, wireless Ethernet), may be coupled to one or more input/output devices, such as a keyboard, a pointing device, a scanner, or a networking device such as a switch or router, e.g., through a network adapter.
The computing device 1400 may be implemented in a number of different forms, as shown in the figure. For example, it may be implemented as a standard server 1400-1 or multiple times in a group of such servers 1400-1, as a laptop computer 1400-2, or as part of a rack server system 1400-3.
Various implementations of the systems and techniques described here can be realized in digital electronic and/or optical circuitry, integrated circuitry, specially designed ASICs (application specific integrated circuits), computer hardware, firmware, software, and/or combinations thereof. These various implementations can include implementation in one or more computer programs that are executable and/or interpretable on a programmable system including at least one programmable processor, which may be special or general purpose, coupled to receive data and instructions from, and to transmit data and instructions to, a storage system, at least one input device, and at least one output device.
These computer programs (also known as programs, software, software applications or code) include machine instructions for a programmable processor, and can be implemented in a high-level procedural and/or object-oriented programming language, and/or in assembly/machine language. As used herein, the terms “machine-readable medium” and “computer-readable medium” refer to any computer program product, non-transitory computer readable medium, apparatus and/or device (e.g., magnetic discs, optical disks, memory, Programmable Logic Devices (PLDs)) used to provide machine instructions and/or data to a programmable processor, including a machine-readable medium that receives machine instructions as a machine-readable signal. The term “machine-readable signal” refers to any signal used to provide machine instructions and/or data to a programmable processor.
Implementations of the subject matter and the functional operations described in this specification can be implemented in digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Moreover, subject matter described in this specification can be implemented as one or more computer program products, i.e., one or more modules of computer program instructions encoded on a computer readable medium for execution by, or to control the operation of, data processing apparatus. The computer readable medium can be a machine-readable storage device, a machine-readable storage substrate, a memory device, a composition of matter, or a combination of one or more of them.
The terms “data processing apparatus”, “computing device”, and “computing processor” encompass all apparatus, devices, and machines for processing data, including by way of example a programmable processor, a computer, or multiple processors or computers. The apparatus can include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, or a combination of one or more of them. A propagated signal is an artificially generated signal (e.g., a machine-generated electrical, optical, or electromagnetic signal) that is generated to encode information for transmission to suitable receiver apparatus.
A computer program (also known as an application, program, software, software application, script, or code) 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, component, subroutine, or other unit suitable for use in a computing environment. A computer program does not necessarily correspond to a file in a file system.
A program can be stored in a portion of a file that holds other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program in question, or in multiple coordinated files (e.g., files that store one or more modules, sub programs, or portions of code). A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network.
The processes and logic flows described in this specification can be performed by one or more programmable processors executing one or more computer programs to perform functions by operating on input data and generating output. The processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application specific integrated circuit).
Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors, and any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read only memory or a random access memory or both. The essential elements of a computer are a processor for performing instructions and one or more memory devices for storing instructions and data. Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto optical disks, or optical disks. However, a computer need not have such devices.
Moreover, a computer can be embedded in another device, e.g., a mobile telephone, a personal digital assistant (PDA), a mobile audio player, a Global Positioning System (GPS) receiver, to name just a few. Computer readable media suitable for storing computer program instructions and data include all forms of non-volatile memory, media and memory devices, including by way of example semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices; magnetic disks, e.g., internal hard disks or removable disks; magneto optical disks; and CD ROM and DVD-ROM disks. The processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry.
To provide for interaction with a user, one or more aspects of the disclosure can be implemented on a computer having a display device, e.g., a CRT (cathode ray tube), LCD (liquid crystal display) monitor, or touch screen for displaying information to the user and optionally a keyboard and a pointing device, e.g., a mouse or a trackball, by which the user can provide input to the computer. Other kinds of devices can be used to provide interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, or tactile input. In addition, a computer can interact with a user by sending documents to and receiving documents from a device that is used by the user; for example, by sending web pages to a web browser on a user's client device in response to requests received from the web browser.
One or more aspects of the disclosure can be implemented in a computing system that includes a backend component, e.g., as a data server, or that includes a middleware component, e.g., an application server, or that includes a frontend component, e.g., a client computer having a graphical user interface or a Web browser through which a user can interact with an implementation of the subject matter described in this specification, or any combination of one or more such backend, middleware, or frontend components. The components of the system can be interconnected by any form or medium of digital data communication, e.g., a communication network. Examples of communication networks include a local area network (“LAN”) and a wide area network (“WAN”), an inter-network (e.g., the Internet), and peer-to-peer networks (e.g., ad hoc peer-to-peer networks).
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 some implementations, a server transmits data (e.g., an HTML page) to a client device (e.g., for purposes of displaying data to and receiving user input from a user interacting with the client device). Data generated at the client device (e.g., a result of the user interaction) can be received from the client device at the server.
While this specification contains many specifics, these should not be construed as limitations on the scope of the disclosure or of what may be claimed, but rather as descriptions of features specific to particular implementations of the disclosure. Certain features that are described in this specification in the context of separate implementations can also be implemented in combination in a single implementation. Conversely, various features that are described in the context of a single implementation can also be implemented in multiple implementations separately or in any suitable sub-combination. Moreover, although features may be described above as acting in certain combinations and even initially claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination may be directed to a sub-combination or variation of a sub-combination.
Similarly, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In certain circumstances, multi-tasking and parallel processing may be advantageous. Moreover, the separation of various system components in the embodiments described above should not be understood as requiring such separation in all embodiments, and it should be understood that the described program components and systems can generally be integrated together in a single software product or packaged into multiple software products.
A number of implementations have been described. Nevertheless, it will be understood that various modifications may be made without departing from the spirit and scope of the disclosure. Accordingly, other implementations are within the scope of the following claims. For example, the actions recited in the claims can be performed in a different order and still achieve desirable results. As used herein, the phrase at least one of A, B, and C should be construed to mean a logical (A OR B OR C), using a non-exclusive logical OR, and should not be construed to mean “at least one of A, at least one of B, and at least one of C.”
This application claims the benefit of U.S. Provisional Application No. 62/054,237, filed on Sep. 23, 2014, the entire disclosure of which is incorporated herein by reference.
Number | Name | Date | Kind |
---|---|---|---|
7673327 | Polis et al. | Mar 2010 | B1 |
8321847 | Garvin et al. | Nov 2012 | B1 |
20030043192 | Bouleau | Mar 2003 | A1 |
20030182196 | Huang | Sep 2003 | A1 |
20050160104 | Meera | Jul 2005 | A1 |
20120166276 | Chitnis et al. | Jun 2012 | A1 |
20120233567 | Brown et al. | Sep 2012 | A1 |
20120284247 | Jiang et al. | Nov 2012 | A1 |
20120311526 | DeAnna et al. | Dec 2012 | A1 |
20130290319 | Glover | Oct 2013 | A1 |
20140129265 | Arena | May 2014 | A1 |
20140172840 | Kumar et al. | Jun 2014 | A1 |
20140282358 | Mowatt et al. | Sep 2014 | A1 |
20140282398 | Podolyak et al. | Sep 2014 | A1 |
20150154644 | Saxena | Jun 2015 | A1 |
20160085515 | Ben-Tzur et al. | Mar 2016 | A1 |
20160085516 | Ben-Tzur et al. | Mar 2016 | A1 |
20160085521 | Savliwala et al. | Mar 2016 | A1 |
20160103693 | Berlin et al. | Apr 2016 | A1 |
Number | Date | Country |
---|---|---|
WO-03062946 | Jul 2003 | WO |
WO-2013059605 | Apr 2013 | WO |
Entry |
---|
International Search Report and Written Opinion for PCT Application No. PCT/US2015/051751, mailed Mar. 24, 2016. |
International Search Report and Written Opinion for PCT Application No. PCT/US2015/051762, mailed Mar. 18, 2016. |
Hindman, Nate; URX Arrives on the Web; URX Blog; Jan. 15, 2015. |
Lawler, Ryan; TechCrunch; Button Raises $12 Million From Redpoint to Deep Link All Your Apps; Jan. 22, 2015. |
Stephen Robertson, (2004) “Understanding Inverse Document Frequency: on Theoretical Arguments for IDF,” Journal of Documentation, vol. 60 Iss: 5, pp. 503-520. |
U.S. Appl. No. 14/588,351, filed Dec. 31, 2014, Taher Savliwala. |
U.S. Appl. No. 14/683,004, filed Apr. 9, 2015, Jonathan Ben-Tzur. |
U.S. Appl. No. 14/683,020, filed Apr. 9, 2015, Jonathan Ben-Tzur. |
Number | Date | Country | |
---|---|---|---|
20160085514 A1 | Mar 2016 | US |
Number | Date | Country | |
---|---|---|---|
62054237 | Sep 2014 | US |