Enhanced feature vector

The number, popularity, sophistication, etc. of mobile applications have grown dramatically with the rise of smartphones, tablets, and other such devices. Alternatives to native application development, including approaches such as hybrid application development which may employ among other things a container paradigm, inter alia address various of the drawbacks associated with native application development. A flexible, extensible, and dynamically configurable Feature Vector (FV) facility addresses one challenge with approaches such as hybrid application development—controlling an application's access to features (e.g., functions, methods, resources, etc.) and the efficient administration, management, etc. same.

TECHNICAL FIELD

This document relates generally to methods and systems for use with computer networks. More particularly, this document relates to the enhanced control of features within various classes of mobile applications.

BACKGROUND

The number, popularity, sophistication, etc. of mobile applications (applications, or simply apps) have increased dramatically with the rise of smartphones, tablets, and other such devices. It is common for these applications to be downloaded by end users from a central repository, sometimes referred to as an “app store” or other location where digital files can be downloaded to user devices. Software developers often create apps and upload these apps to such a central repository.

Apps may be designed as self-contained through a process known as native application development. One drawback to native application development is that it can become difficult to develop applications that operate on multiple different mobile platforms (cross-platform solutions), thus driving up the cost of development for apps that are intended to operate on multiple different mobile platforms.

Alternatives to native application development, including approaches such as hybrid application development which may employ among other things a container paradigm, inter alia, address various of the drawbacks associated with native application development. One challenge with approaches such as hybrid application development concerns an application's access to features (e.g., functions, methods, resources, etc.) and how one can efficiently control, manage, etc. same.

DETAILED DESCRIPTION

The description that follows includes illustrative systems, methods, techniques, instruction sequences, and computing machine program products that embody illustrative embodiments. In the following description, for purposes of explanation, numerous specific details are set forth in order to provide an understanding of various embodiments of the inventive subject matter. It will be evident, however, to those skilled in the art that embodiments of the inventive subject matter may be practiced without these specific details. In general, for simplicity of exposition well-known instruction instances, protocols, structures, techniques, etc. have not been shown in detail.

For purposes of this disclosure, a container is a runtime environment that is inter alia executable on a mobile device within which mobile applications (or apps) can be executed. A container is a native application that is installed on the mobile device. A container may include inter alia messaging libraries, a local datastore, toolkits having a runtime from the native operating system's software development kit (SDK), etc. It may also embed a browser, which allows developers to build mobile applications using web development paradigms as opposed to traditional software development paradigms, while still maximizing the power of the native device services. This allows rapid development of mobile workflows across multiple platforms. These types of applications may extend existing enterprise business processes to, for example, a mobile device, so that business process decisions can be made on a mobile device.

In some example embodiments, a container may be designed to allow developers to create applications in open, standards-based protocols such as inter alia HyperText Markup Language (HTML) 5, JavaScript, and Cascading Style Sheets (CSS). A set of HTML files may define, etc. inter alia the app screens. A set of JavaScript files may include the methods for navigating from screen to screen and the functions for accessing data for the screens. A set of CSS files may provide the styling for the screen elements.

FIG. 1is a diagram illustrating a system100, in accordance with an example embodiment, to provide a container to a mobile device. The system100may include a container platform102, which may store workflow metadata104obtained from one or more designers106A,106B. Each designer106A,106B may design container forms, including, for example, HTML, CSS, and JavaScript files, which may then be sent to the container platform102and stored as workflow metadata104. A client mobile device108may then operate a container110, which includes container services112, a browser114, and container metadata116. The container services112may include various libraries of functions, including, for example, storage, messaging, security, provisioning functions, etc. The browser114may create a runtime environment using the container services112and the container metadata116, which is obtained from the workflow metadata104.

In an example embodiment, the container110may be dynamically extended or altered through the use of one or more plug-ins.FIG. 2is a diagram illustrating a system200, in accordance with an example embodiment, to provide a plug-in204to a container110on a mobile device. The system200may include the container platform102, which may store workflow metadata104obtained from one or more designers106A,106B. The system may additionally include a plug-in developer202. A client mobile device108may then operate a container110, which includes container services112, a plug-in204, a browser114, and container metadata116. The plug-in204may be transmitted to the client mobile device108from the plug-in developer202via the container platform102. In an alternative example embodiment, the plug-in developer202sends the plug-in directly to the client mobile device108.

A plug-in204may provide functionality not available in the container services112that the plug-in developer202believes that application designers, such as designers106A,106B, may wish to utilize. At runtime, the browser114is designed to run both the container services112and the plug-in204, making for a seamless experience for the user. This is accomplished without modifying the other aspects of the container110, such as the container services112, browser114, and container metadata116.

In an example embodiment, the container services112include JavaScript libraries that provide consistent APIs that can call the same way on any supported device. In this example embodiment, multiple plug-ins204are provided, including plug-ins204for application lifecycle management, implementation of a common logon manager, single sign-on (SSO), integrating with server-based push notifications, etc. The plug-ins204may utilize a configuration file of the container110and extend it for any settings they need for their purposes. For example, if a plug-in204needs to extend application configuration items such as sandboxing, application lifecycle, supportability, and so on, it may utilize additional property name fields in the configuration file.

In an example embodiment, a designer106A,106B may install the container services112and plug-ins, such as plug-in204on its own system, in order to be used for creating and testing the container metadata116prior to distribution to mobile devices, such as client mobile device108.

The designer106A,106B may then set configuration parameters to configure the ultimate client devices that will run the container110. This may include, for example, designing back-end connections for selected native and hybrid applications. This may be performed by setting fields defining whether the client device will use a system proxy, whether the client device will rewrite uniform resource locators (URLs), the maximum connections for the client device, and identifying a certificate alias of a specific certificate in the system keystone that is used when making a secure connection to the specified server. Additionally, whitelisted and/or blacklisted connections may be expanded.

A plug-in204may expand the universe of capabilities, services, etc. that are available to applications written in open, standards-based protocols, that operate within the container110without altering the container110or any of the other plug-ins that may reside within the container110. Thus, such a plug-in204may coexist with any other plug-ins and would not impact the ability of a mobile device108to update aspects of the container110, while minimizing the time required for an application designer to create the application.

Such a plug-in204may also make a container110more capable, robust, etc. by offering additional or missing features, functions, services, etc. and generally make the container110more enterprise-ready, among other things.

Such a plug-in204may also provide access to native functionality (e.g., camera, accelerometer, contact list entries) of a mobile device108. As such, the plug-in serves as something of a bridge between the native or traditional world of mobile device applications, which would have direct access to native functionality such as the camera, and non-native applications. Such a plug-in204can abstract, or otherwise hide, various of the complexities associated with accessing and using this native functionality by, for example, exposing a simplified interface for it. Such a plug-in204may offer, among other things, enhanced security, limits on available operations, in connecting with, accessing and using native functionality.

Such a plug-in204may also provide various performance enhancements that can improve, among other things, the loading time of the application.

Such a plug-in204may also support server-controlled management (e.g. provisioning, updating, etc.) of applications as frequently required within an enterprise setting. Among other things the transfer and application of secure incremental updates, patches, etc., transparent to the user, may be supported.

Such a plug-in204may also support the flexible, extensible, and dynamic management of activities during any of the different phases (e.g., instantiation, startup, operation, shutdown, etc.) of the lifecycle of an application. Such a plug-in204may also address structural weaknesses, deficiencies, etc. that exist within a container110, such as data access, security, the concurrent operation of multiple applications, etc. through, for example, the offering of additional, or possibly replacement, capabilities and services.

Such a plug-in204may comprise any combination of aspects of a publicly-available facility (such as for example Apache Cordova) and aspects of a private (e.g., custom developed) facility.

Examples of plug-ins204include, but are by no means limited to:

1) Logon. A logon plug-in may provide inter alia a login screen where a device user can enter values needed to connect to for example a server, such values possibly preserved in a local data vault (e.g., repository). This data vault may be separate from the one provided with other plug-ins. It also provides a way to lock and unlock the application defined by the container metadata116, so the user can leave sensitive data open in the application.

2) Settings. A settings plug-in provides an ability to trigger an operation on a server to allow an application to store device and user settings on the client device for later use. The client device sends the server a device type, device model, whether push is enabled, and other push-related information. The settings may also use a device token received during device configuration. The server then can use this information to decide what kind of push notification to send (e.g., cloud messaging, push notification service, etc.).

3) Application Update. An application update plug-in provides server-based updates to the application content and manages the process of checking, downloading, and installing updates to the application running within the container110. The application update plug-in may contain a series of application update methods, including, for example, an application update method that starts the application update process and triggers any required log on process, a reload application method that replaces the application resources with any newly downloaded resources and refreshes the page, an update method that forces an update check, an on update ready method that provides a handler for when an update is available, and an on login required method that provides a handler for log on.

FIG. 3is a flow diagram illustrating a method300, in accordance with an example embodiment, of operating an application update plug-in. At operation302, the application update method starts and triggers any needed update process. At operation304, the updates are downloaded. At operation306, a reload application method may ask the user to reload the application. If not, then at operation308the on update ready method is triggered the next time the application is resumed or started. If so, then at operation310, the on update ready method is triggered now.

FIG. 4is a flow diagram illustrating a method400, in accordance with an example embodiment, of operating an application update plug-in. At operation402, the application update method starts and triggers any needed update process. At operation404, the updates are downloaded. At operation406, a reload application method may ask the user to reload the application. At operation408, the on update ready method is triggered. At operation410, the reload application method is called and asks the user to reload the application. Then the user reloads the application. At operation412the reload application method is called and the updated application loads.

Updates to an application may either be full or delta. Delta updates only download and install aspects of the application that have been changed since the last update. A full update may be used when, for example, the local revision number is 0, or where the local revision number is one full number away from the server revision number (e.g., local revision number 1.2 and server revision number 2.1).

4) Authorization Proxy. An authorization proxy plug-in automates the process of accepting as Secure Socket Layer (SSL) certificates, returned by a call to a web resource. If users want certificates, such to send an Asynchronous JavaScript and Extensible Markup Language (AJAX) request, for example, to an HTTPS server and the embedded browser116does not support the SSL, then users could utilize the authorization proxy plug-in for this purpose.

5) Logger. A logger plug-in allows the developer to log messages, by calling one or more methods in the logger plug-in.

6) Push Notification. A push notification plug-in enables various notification capabilities for applications.

FIG. 5is a diagram illustrating a system, in accordance with an example embodiment, of push notification. The system includes the client device502, running a container110, and which receives push notifications, a notification service provider504that sends the push notifications, and a mobile platform server506, which collects device identifications from the clients and push notifications through the notification service provider504. The push notification plug-in allows developers to enroll applications for notification with notification registration, as well as to receive and process incoming notifications for applications. Such a plug-in can also support background notification processing.

FIG. 6is a flow diagram illustrating a method600, in accordance with an example embodiment, of configuring push messaging on a mobile platform server. This method may be performed, for example, by a designer106A or106B. At operation602, values for a new application (such as for example ID, Name, Vendor, Version, Type, Description, etc.) are provided to the mobile platform. At operation604, endpoint (e.g., provider504) information may be configured. At operation606, push settings may be configured.

7) Storage. A storage plug-in provides secure on-device storage. A storage plug-in may offer API methods that are asynchronous, and may include listener and callback functions.

8) Specialized. A customized plug-in that addresses any combination of one or more business, technical, etc. requirements.

FIG. 7is a flow diagram illustrating a method700, in accordance with an example embodiment, of operating a user device. At operation702, a container110may be downloaded. The container110may be an application natively executable by a first operating system of the user device. The container110may include a container service112including one or more libraries of functions designed by a container110designer106A and106B to natively operate on the first operating system. The container110may also include a browser116. The container110may also include container metadata118defining functions of the application, the functions compatible with the container service112for the first operating system and also compatible with a container service112for a second operating system. The container110may also include a plug-in204including one or more additional libraries of functions designed by an entity other than the container110designer106A and106B to perform additional native operations on the first operating system. At operation704, the container metadata116may be executed using the browser114, causing function calls to the container service112and plug-in204and thus controlling native functions of the user device.

FIG. 8is a flow diagram illustrating a method800of designing an application to be executed on user devices having different operating systems. At operation802, a container110for a first operating system may be downloaded. The container110may include a container service112including one or more libraries of functions designed by a container110designer106A and106B to natively operate on the first operating system, and a browser114. At operation804, a first plug-in204is downloaded. The first plug-in204may include one or more additional libraries of functions designed by an entity other than the container110designer106A and106B to perform additional native operations on the first operating system.

At operation806, container metadata116specifying functions on the application and containing calls to the libraries in the container service112for the first operating system and the first plug-in204is defined. At operation808, a first version of the application is built from the container110for the first operating system, the first plug-in204, and the container metadata116.

At operation810, a container110for a second operating system is downloaded. The container110for the second operating system may include a container service112including one or more libraries of functions designed by the container110designer106A and106B to natively operating on the second operating system, and a browser114. At operation812, a second plug-in204is downloaded, the second plug-in204including one or more additional libraries of functions designed by an entity other than the container110designer106A and106B to perform additional native operations on the second operating system. At operation814, a second version of the application is built from the container110for the second operating system, the second plug-in204, and the container metadata116.

As described above, the universe of containers, browsers, plug-ins, etc. provides for a rich mobile application environment. For reasons of security, control, corporate policy, etc. a flexible, extensible, and dynamically configurable Feature Vector (FV) facility provides for the efficient management of access to possibly among other things the features (e.g., functions, methods, etc.) that may for example be exposed through inter alia a (plug-in, container, etc.) API.

In brief, a FV identifies for an app the particular features (e.g., functions, methods, etc.) that are to be disabled for, that is are not to be available to, the app.

For example, for security, corporate policy, profile, preference, etc. reasons it may be necessary to preclude a particular app from being able to access certain native capabilities of a device such as for example a camera, an accelerometer, etc. In such cases a FV may be created that identifies those exclusions.

An administrator (at for example an app store, within a corporate network environment, in an app development setting, etc.) may among other things define, manage, etc. a FV for an app.

FIG. 11andFIG. 12illustrate, conceptually and at a high level, aspects of such a process.

For purposes of illustration, and as just one possible example,FIG. 14depicts a portion of a plugin.xml file for the Apache Cordova plug-in andFIGS. 15aand 15billustrate aspects of a set of Representational State Transfer (REST)-based functions, methods, services, etc. that may be provided to an administrator in support of inter alia standard CRUD operations on/for FVs:

1) Create. The ability to create or define a new FV for an application (<ApplicationID> in the instant example inFIG. 15a).

2) Read. The ability to read or get a previously-defined FV for an application (<ApplicationID> in the instant example inFIG. 15a).

3) Update. The ability to update or change a previously-defined FV for an application (<ApplicationID> in the instant example inFIG. 15b).

4) Delete. The ability to delete or remove a previously-defined FV for an application (<ApplicationID> in the instant example inFIG. 15b).

An administrator may make use of any combination of one or more channels (including for example a GUI, APIs, command line interfaces, manual inputs, etc.) to view, manage, etc. a FV (through, as just one example, the REST-based functions, methods, etc. that were just described).

Any number of facilities (including inter alia version control, check-in/check-out mechanisms, audit trails, etc.) may be provided in support of an administrator carrying out her activities.

After a FV is created it may inter alia be stored with, reside with, etc. an app in/at for example an app store, a corporate network environment (e.g., an intranet), on the Internet, etc.

A FV may be conveyed to a device at any number of points or times during an application's lifecycle—e.g., during any combination of one or more of when downloaded, when installed, when updated, when invoked, when a user logs in, when resuming from a sleep/idle state, when a user changes physical location, when the FV is changed/updated, etc.—using any combination of push and/or pull mechanisms.

During FV conveyance any number of techniques, mechanisms, etc. (including inter alia recovery checkpoints, compression, checksums, chunking, etc.) may be employed to among other things improve performance, increase efficiency, etc. Additionally, during FV conveyance any number of techniques, mechanisms, etc. (including inter alia encryption, etc.) may be employed to among other things enhance security.

When a FV is received by a device it may among other things be processed, parsed, validated, etc. and inter alia aspects of same may be preserved in a local repository (e.g., a data vault). Access to such a repository (by, for example, apps) may be secured in any number of ways.

One or more function, methods, etc. may be made available to an app that inter alia query the local repository for relevant FV details and identify to the app among other things whether a specific feature (function, method, etc.), based on inter alia FV settings, is enabled or available.

For purposes of illustration, one such function, method, etc.—isFeatureEnabled—is presented inFIG. 13a.

InFIG. 13ba snippet of application source code illustrates one way in which an app may invoke a isFeatureEnabled function, method, etc. to determine whether a specific feature (e.g., function, method, etc.)—“navigator.accelerometer” in the instant case—is enabled or available.

A FV may be preserved (at a server, on a device, etc.) in any number of ways including for example any combination of conventional Relational Database Management Systems (RDBMSs), Object Database Management Systems (ODBMSs), in-memory Database Management Systems (DBMSs), data structures, flat files, memory constructs, etc.

One or more special attributes may be defined. For example, for improved efficiency a Settings.AllFeaturesEnabled attribute may, when for example set to True, indicate that all features (e.g., functions, methods, etc.) are enabled or available, obviating for example the need for an app to make multiple individual calls to a isFeatureEnabled function, method, etc.

For simplicity of exposition in the above discussion an app was described as having a (i.e., one) FV. However, it will be readily apparent to one of ordinary skill in the art that it is easily possible for an application to optionally have multiple FVs, with such FVs named in different ways and organized in any number ways (e.g., unordered, sequential, hierarchical, etc.).

FIG. 9is a block diagram illustrating a mobile device900, according to an example embodiment. The mobile device900may include a processor902. The processor902may be any of a variety of different types of commercially available processors902suitable for mobile devices900(for example, an XScale architecture microprocessor, a microprocessor without interlocked pipeline stages (MIPS) architecture processor, or another type of processor902). A memory904, such as a random access memory (RAM), a flash memory, or other type of memory, is typically accessible to the processor902. The memory904may be adapted to store an operating system (OS)906, as well as application programs908, such as a mobile location enabled application that may provide LBSs to a user. The processor902may be coupled, either directly or via appropriate intermediary hardware, to a display9010and to one or more input/output (I/O) devices912, such as a keypad, a touch panel sensor, a microphone, and the like. Similarly, in some embodiments, the processor902may be coupled to a transceiver914that interfaces with an antenna916. The transceiver914may be configured to both transmit and receive cellular network signals, wireless data signals, or other types of signals via the antenna916, depending on the nature of the mobile device900. Further, in some configurations, a GPS receiver918may also make use of the antenna916to receive GPS signals.

Similarly, the methods described herein may be at least partially processor-implemented. For example, at least some of the operations of a method may be performed by one or processors902or processor-implemented modules. The performance of certain of the operations may be distributed among the one or more processors902, not only residing within a single machine, but deployed across a number of machines. In some example embodiments, the processor902or processors902may be located in a single location (e.g., within a home environment, an office environment or as a server farm), while in other embodiments the processors902may be distributed across a number of locations.

In embodiments deploying a programmable computing system, it will be appreciated that that both hardware and software architectures require consideration. Specifically, it will be appreciated that the choice of whether to implement certain functionality in permanently configured hardware (e.g., an ASIC), in temporarily configured hardware (e.g., a combination of software and a programmable processor902), or a combination of permanently and temporarily configured hardware may be a design choice. Below are set out hardware (e.g., machine) and software architectures that may be deployed, in various example embodiments.

The example computer system1000includes a processor1002(e.g., a central processing unit (CPU), a graphics processing unit (GPU) or both), a main memory1004and a static memory1006, which communicate with each other via a bus1008. The computer system1000may further include a video display unit1010(e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)). The computer system1000also includes an alphanumeric input device1012(e.g., a keyboard or a touch-sensitive display screen), a user interface (UI) navigation device1014(e.g., a mouse), a disk drive unit1016, a signal generation device1018(e.g., a speaker) and a network interface device1020.

The disk drive unit1016includes a machine-readable medium1022on which is stored one or more sets of instructions and data structures (e.g., software)1024embodying or utilized by any one or more of the methodologies or functions described herein. The instructions1024may also reside, completely or at least partially, within the main memory1004and/or within the processor1002during execution thereof by the computer system1000, the main memory1004and the processor1002also constituting machine-readable media1022.

By way of example of a method in accordance with the above description, such a method for controlling access by an application to features on a client device may include receiving, from a server, a Feature Vector (FV) for the application. Such a method may further include processing aspects of the FV including at least preserving a portion of the FV in a local repository, and returning to the application an indicia of the availability of a feature by at least querying the local repository.