The present invention relates generally to development and/or management of graphical user interfaces for software applications of computing devices, and more particularly to a system and method for user interface management at application runtime.
Client/server application developers traditionally use tools to build software using an integrated development environment (IDE). Most IDEs require a human programmer/developer to follow a specific and conventional development path. This path involves first writing the application code, then compiling the code, and then sending the compiled code to a client computing device (or device simulator/emulator) so that the resulting software application can be executed/started, and the application's runtime user interface can be viewed by the developer and debugged, modified, etc. Accordingly, the device software will run not on the intended device (e.g., an iPhone), but on the computing device at which the developer is writing the code. For example, and IDS can be used to build a Java application that will run on the developer's computer without the need for a simulator/emulator.
Some IDEs provide tools for designing the user interface in a visual way, but such tools still require the compiling of the code and sending the newly-compiled code to a client computing device (or device simulator/emulator) so that the application can be started, and the user interface can be viewed by the developer and debugged, modified, etc. An example of this approach is Apple's xCode development environment in which the user interface is compiled into the application bundle and the application can be viewed using an iOS simulator or on the intended computing device (e.g., iPhone).
An alternative development approach is to provide a set of tools that emulate a device (e.g., an iPhone in a browser) and use a set of visual tools that a software developer can group together to build a user interface. This process requires the compiling and bundling of the application's user interface into the application to view the application using a simulator or the intended computing device (e.g., iPhone).
Yet another development approach is typically used in the development for Android, Windows Phone 7, and Adobe Flex. This development approach involves use of user interface metadata (i.e., an XML document) to describe the user interface. The metadata is created by the developer at development time and is either compiled into code, into an intermediary format to be interpreted, or is interpreted by the client computing device at application runtime.
Each of these approaches is undesirably time-consuming because of the waiting time until the new user interface changes are built into the application and launched on a device or simulator/emulator. The application is also limited to displaying only the user interface definitions compiled into the application. Any changes made to the user interface after compiling will not be reflected at runtime, unless the code is compiled again.
Accordingly, it will be appreciated that conventional software development tools and techniques of the prior art for building user interfaces do not enable the developer to make changes to an application while the application is running, or to make changes while viewing the user interface in its final form. Rather, prior art techniques generally involve creation of code, compilation of code, and then viewing the resulting user interface in its final form. If changes need to be made, the code has to be rewritten, compiled, and then run/viewed. This approach is limiting because it doesn't give the developer a view of how the software application (“app”) will actually appear on the device while making changes. A developer generally needs to compile and run the development project for the new user interface changes to appear on a device or simulator/emulator. Thus, a developer must wait until the process is completed and the app is restarted before seeing and testing the user interface changes reflected in any re-written code. The restarting of the app requires the developer to navigate through the app to the area containing the change each time a user interface change is made. Therefore, the conventional development process is undesirably time-consuming and inefficient, and adds time to the cycle of making user interface changes and viewing these changes on a device or simulator.
Additionally, it should be noted that user interfaces for a software application are built using the technologies available for the specific platform on which the software application is intended to run.
For example, user interfaces for native iOS applications are built using iOS specific classes.
Each user interface class has properties associated with it. Exemplary properties for an iOS UILabel (e.g., 210) are shown in
By way of example, and consistent with the prior art, a developer may create an iOS UILabel using the exemplary Objective-C code shown in
Accordingly, an application built for one platform, e.g., iOS, will have to be modified and/or rebuilt for another platform, such as Android. Thus, if an application is intended to be run on multiple different heterogeneous devices, e.g., running on different platforms and/or with varying screen resolutions, etc., a developer using today's tools builds for one device and installs the app on several devices to test. Therefore, the undesirable wait times associated with developing a single application for a single application/device are multiplied and exacerbated because of the time it takes to make changes and/or install/develop the app on additional devices intended to run the app.
Some software development products and/or techniques exist for implementing a “build once, run anywhere” development model. In such a model, software applications may be built using logical elements that are abstracted and separate from specific code for a specific OS platform. A single build is then “interpreted” to create platform-specific code for each OS platform. Although these products allow a developer to design an application and user interface at a higher conceptual level, they still require compiling and/or interpreting steps. Accordingly, they share some of the disadvantages discussed above. However, one of the more significant limitations of such products and/or techniques is that they support only a limited of features/functionality, etc. that conceptually is the lowest common denominator—i.e., only that certain functionality that is capable of being implemented on multiple different OS platforms. Accordingly, such products prevent development of native OS applications that are rich in platform-specific features/functionality, and thus are generally undesirable.
What is needed is a system and method for user interface management that allows a developer to view the user interface, make changes, and view the revised user interface without enduring the typical re-coding, re-compiling, re-running process. In other words, what is needed is a system and method for runtime user interface management.
The present invention provides a system and method allowing modification of a software application's user interface screen after compilation and/or distribution. Changes to the interface are permitted during runtime of the application, by associating a unique identification code with each user interface control of the screen. The identification code is used outside of the application to reference the controls, and to update associated information for displaying the controls. The updates may be provided as properties associated with specific identification codes contained in the application, e.g., as a playlist document created and/or received after compiling and distribution of the software application to client devices. The application includes a software development kit (SDK) for managing the receipt and application of playlist updates, prior to display of the user interface by the application. The system enables direct display and manipulation of user interface control properties in creating playlists, and manages playlist distribution, e.g., to enable multivariate testing.
One aspect of the present invention provides a computer program product in the form of a software development kit for integration with source code to build a software application for displaying a user interface screen comprising at least one user interface control, the source code identifying original properties for displaying each user interface control. In one embodiment, the software development kit comprises code for: assigning a unique identification code to each user interface control identified a view hierarchy corresponding to the user interface screen; creating a document identifying each assigned unique identification code and associated original properties for each user interface control of the view hierarchy; transmitting the document to a server; requesting from the server any playlist corresponding to the software application; and before display of the user interface screen, applying any updated properties from any received playlist to the view hierarchy to cause display of the user interface screen in accordance with the updates provided in any received playlist. A server for distributing the SDK is provided also.
In accordance with another aspect of the present invention a client computing device for providing runtime user interface management is provided. The client computing device comprises a microprocessor, a memory and microprocessor-executable instructions stored in the memory and executable by the microprocessor to: display a user interface screen comprising at least one user interface control, the user interface screen being displayable in accordance with original properties contained in a software application; create and store in the memory a view hierarchy for displaying each user interface control of the user interface screen, the view hierarchy identifying each user interface control and its associated original properties; assign in automated fashion a unique identification code to each user interface control identified in the view hierarchy; create a document identifying each assigned unique identification code and its associated original properties for each user interface control; transmit the document via a communications network; request and receive from a server any playlist corresponding to the software application; and during runtime of the software application and before display of the user interface screen, apply to the view hierarchy any updates from any received playlist. As a result, during runtime of the software application, cause display the user interface controls and user interface screen in accordance with the view hierarchy as updated during runtime by any changes contained in any received playlist.
In accordance with another aspect of the present invention, a user interface management device for providing runtime user interface management is provided. The user interface management device comprises a display device, a microprocessor, a memory, and microprocessor-executable instructions stored in the memory and executable by the microprocessor to: receive a document identifying at least one unique identification code and its associated original properties for each user interface control of a view hierarchy created during runtime of a software application for displaying a user interface screen comprising at least one user interface control; display via the display device a list of each unique identification code and its associated original properties; receive input providing changes to the list; create a playlist document reflecting changes to the list; and transmit the document via a communications network.
An understanding of the following description will be facilitated by reference to the attached drawings, in which:
The present invention relates to a system and method for providing runtime user interface management, i.e., user interface management at the time of, concurrently with, and/or during execution of the software application of which the user interface is a part, i.e., during “runtime.” As user herein, the term “software application” is used in a very broad and non-limiting fashion to include any build of any software application, and thus the term expressly includes conventional executable binary files as well as application package files (APKs) of the type used in Android OS platforms, as well as HTML5, scripts and/or other scripting languages or techniques. The system and method for runtime user interface management allows a software developer to view a runtime version of the user interface in development, make changes, store the changes in a persistent data store for subsequent distribution, and view the revised runtime version of the user interface without having to endure the re-coding, re-compiling, and re-running processes typical of conventional user interface development processes. Accordingly, changes to a user interface screen at a client computing device are made in real time, essentially immediately/instantaneously, after inputting changes (at a user interface management device)—without a need to recompile or otherwise rebuild and/or redistribute the software application.
Referring now to
The Client Device 508 retrieves user interface updates from a Server Computer 506. By way of example, Server Computer 506 is a special-purpose computing device that can include any conventional general purpose computing device hardware configured with any conventional operating system 512 and other server software, and a special-purpose RUIMS 522 consistent with the present invention. As described herein, RUIMS 522 defines rules for when the user interface changes can be displayed, defines rules for personalization, and has the ability to add and capture analytics as the design of the user interface changes. By way of example, rules can be defined as a combination of metadata describing properties or attributes used to describe the parameters relating to a set of steps or algorithms, along with code that actually implements the steps or algorithms. An exemplary rule might be to only show a user interface change or version of an A/B test if a mobile phone running the software application is presently geo-located within a bounding perimeter. In this example, the metadata would contains the latitude and longitude coordinates of the containing bounding perimeter and specific code is created to compare the device's location with the bounding perimeter defined in the metadata. The pairing of metadata and code enables the system to be flexible with respect to adding rules to the system. Another exemplary rule provides for personalization and/or customization of the user interface (e.g., to show targeted advertising or promotions, to show enhanced to decreased functionality, to show different interface versions, etc.), e.g., as a function of a user's profile, account status, or any relevant business logic.
Further, RUIMS 522 receives messages responsive to changing of a user interface, and sends messages to cause updating of applications running on client devices, such that those changes will be incorporated into the user interface displayed on the Client Device 508. Each message includes information relating to a specific user interface control and related parameters. For example, the message's information may identify a specific user interface control, its properties, values and/or data type. SDK code of the associated software application provides instructions for calling such information to make the changes to the user interface control that are reflected by the content of the message.
For an application to be developed using RUIMS, the developer of the application creates an account for use of the RUIMS system. This can be accomplished using conventional account creation techniques, e.g., by creating a user account using the RUIMS application 514 on a UI Management Device 502. By way of example, a UI Management Device 502 is a special-purpose computing device that can include any conventional general purpose computing device hardware configured with any conventional operating system 512 and web browser and other software, and a special-purpose RUIMS 514 consistent with the present invention that is configured to store changes to an interface (e.g., data store 540) at Server Computer 506, and to communicate messages to the Server Computer 506 to inform the server of the changes (e.g., using a conventional messaging server 530). The messaging server 530 may be used to enable all network communication described herein among the Server Computer, UI Management Device and Client Device. The UI Management Device 502 communicates with the Server Computer 506 via Network 510 to register the user and to create an account. In one embodiment, the Network 510 is a public packet-switched network, such as the Internet, and this communication is done using conventional HTTP/HTTPS, but any current or future network communications technology using both encrypted and non-encrypted communications could be used.
After a software developer has established a developer account with Server Computer 506, the developer can create an Application Definition Document (ADD) for a new application in development, e.g., using the browser of UI Management Device 502 to initiate the creation of the ADD which is sent to Server Computer 506 for storage in data store 540. In accordance with the present invention, the Application Definition Document (ADD) 600 is used to describe all of the resources required to support the application in development. An exemplary ADD is shown in FIG. 6. Examples of resources 602 include images 604, screen definitions 606, audio 608, video 610, static data 612, and internationalization strings 614, as will be appreciated by those of ordinary skill in the art. Resources are used by the application in displaying the user interface. Consistent with an exemplary embodiment of the present invention, the RUIMS system 500 (e.g. RUIMS 522 at Server Computer 506) assigns a unique ADDID to each ADD upon the ADD's creation. The ADDID uniquely identifies the ADD and is used to reference the ADD in the RUIMS system.
Referring now to
An application in development or an application in production, e.g., Application 526, may be loaded and stored on a Client Device 508 for development/testing/production purposes. Exemplary client computing devices include mobile telephones such as Nokia® Asha mobile phones running the Nokia® Series 40 OS software, smartphones such as the Apple® iPhone running iOS software, Samsung® Galaxy Nexus phones running Android® OS, HTC® Titan II phones running Windows® Phone 7 OS software, tablet PCs such as the Apple® iPad® and Blackberry® Playbook 2, laptop computers such as PCs running Windows OS software, and PCs running Unix-based operating systems such as Macintosh® OS X.
During execution of the Application 526, the Application 526 uses the ADDID and version number (if applicable) to retrieve the correct user interface resources to display the Application's user interface. If the version number is omitted when requesting a resource the system defaults to a version defined by the system, such as the last-created version in a chain of versions.
In accordance with the present invention, the developer configures the ADD 600 to include references to User Interface Definition Documents (UIDDs) (see
The RUIMS 500 can operate in a development mode as shown in
Building of a user interface is an essential part of each GUI-based application. Instead of using the platform-specific approach such as NIB files on iOS or building the user interface programmatically, the developer may call into the RUIMS Development Library (RUIMS DL) 528 or RUIMS Runtime Library (RUIMS RL) 916 to pass in the user interface name or ADDID. The RUIMS DL 528 and/or RUIMS RL 916 builds the user interface by returning the user interface objects back to the calling application. If the UIDDID or user interface name does not match an existing UIDD the RUIMS system 500 can be configured to create a new empty UIDD ready for customization using the RUIMS system 500.
For a developer to work on the Client Device 508 with RUIMS in development mode, the developer downloads and installs on the Client Device 508 the RUIMS DL 528, which runs inside of the developer's Application 526 on the Client Device 508, as best shown in
A developer can create, update, and delete user interface screens for the Application 526 using a UI Management Device 502. More specifically, the user operates the Client Device 508 to navigate within Application 526 to a user interface screen to be modified. When navigating to such an interface screen, RUIMS 528 sends a message (via messaging server 530) from the Client Device 508 to Server Computer 506 that is routed to the UI Management Device 502. RUIMS 514 of UI Management Device 502 receives the message and calls the corresponding UIDD associated with the displayed screen from the Server Computer 506. Upon receiving the called UIDD, RUIMS 514 displays a breakdown of the screen displayed on the Client Device 508 in a property editing screen, as seen in
In this screen, the developer operating the UI Management Device 502 can also delete controls (e.g., a text field, a button, or other object) from a screen by deleting them from the list of controls in the window in
Accordingly, it should be appreciated that the system can be used not only to modify an existing screen but to create a new screen, e.g., by editing a blank UIDD to create a new UIDD corresponding to a new screen.
The System 500 enables a developer to make UI changes to an Application 526 running on a Client Device 508, using the UI Management Device 502. For example, when a developer makes a property change to a UI control of the Application 526 using the UI Management Device 502 interface by changing the controls, properties and/or values shown in
It should be appreciated that the System 500 enables a developer to make UI changes to each instance of the Application 526 running on multiple Client Devices 508 in parallel using the UI Management Device 502. The ability to view a user interface on a device or in a simulator and make changes to the user interface on multiple devices in parallel enables developers to reduce development time by validating what the user interface will look like on each distinct device of a plurality of heterogeneous devices. An example of this is the same application running on an iPhone® 4 and iPhone® 5 or iPad®, which have different screen sizes.
The ability to change the user interface and supporting resources of an application while the application is running is enabled by a messaging system (e.g., messaging server 530 at Server Computer 506) between the UI Management Device 502 and the Client Device 508. When an Application 526 on a Client Device 508 is running, the Application 526 will send messages to Server Computer 506 (specifically, messaging server 530) using RUIMS DL 528, communicating details about the currently visible user interface screen, including the current screen as well as the definition of the screen. RUIMS DL 528 is configured to send messages to RUIMS 522 and to the corresponding UI Management Device 502 all sharing the same session. Any changes to the Application's UI are reflected in the RUIMS 514 user interface displayed at UI Management Device 502. Messages from RUIMS DL 528 include but are not limited to the changing from one screen to another, that a user modified or touched a UI control, or even that the user moved the UI control to a new location. The UI Management Device 502 is configured to receive this message and notify the developer of the current UIDD on the Client Device 508. The developer can make application changes using RUIMS 514 such as changing the text on a label, adding a new button, or setting the click of a button to call a method defined in code currently running on the device. These changes are sent as messages through the Server Computer 506 to the Client Device 508. The Server Computer 506 (or 902) is responsible for managing the list of Client Devices 508 and UI Management Devices 502 currently running. The Server Computer 506 (or 902) is responsible for routing messages to the correct Client Device 508 or UI Management Device 502 based on a developer's access to a given app. More specifically, a developer has access to a given app by logging into RUIMS 522 using a RUIMS 514 browser interface for example. A messaging session is created between the RUIMS DL 528 and RUIMS 514 though the configured use of an application id and application version. The combination of application id and application version enables RUIMS 522 to pair (route) the messaging between RUIMS DL 528 and RUIMS 514.
The exemplary embodiment of
The messaging can use any standard or proprietary messaging protocol used on a local or wide area network. Messages can be sent either encrypted or unencrypted, with or without a checksum or hash code to protect against tampering. By way of analogy, the RUIMS messaging mechanisms may operate in a manner similar to the conventional Java Message Service (JMS) implementation used in other contexts.
The RUIMS DL 528 receives the message from the UI Management Device 502 instructing the RUIMS DL 528 code to perform an action. An exemplary action is updating the text for a UILabel, e.g., to “USERNAME.” In response, the RUIMS DL 528 code looks up the current screen, finds the label with tag equal to “username”, and updates the label with the text “USERNAME.” If a copy of the UIDD is stored locally on the Client Device 508, the UIDD is updated in RUIMS 522 with the change. In an exemplary embodiment, the RUIMS DL 528 then creates a response message including the success or failure status of the original message and sends the message back to UI Management Device 502 that requested the change. The UI Management Device 502 accepts the response message and will update the UIDD document stored at Server Computer 506 associated with the change, saving the change by calling the local Server Computer 504 or Server Computer 506. This ensures all changes made by the developer are captured and stored on both the Client Device 508 and UI Management Device 502. Optionally, the UI Management Device 502 displays the status of the response message to the developer. Alternatively, the UI Management Device 502 updates the UIDD stored on the Server Computer 506 before sending a message or in parallel to sending a message to the Client Device 508, but this process does not take into account if the Client Device 508 will successfully interpret the message.
One advantage of embodiments including a local RUIMS Server Computer 504 is a reduction in the latency of managing the messaging and system updates between the Client Device 508 and the UI Management Device 502. This reduction in latency is particularly important to the development process. If the Client Device 508 can't find or communicate with a local Server Computer 504 the Client Device 508 can optionally communicate with the Server Computer 506.
During development of an application the RUIMS DL 528 will retrieve user interface resources from the local Server Computer 504 if available or from the Server Computer 506 if that server is being used for the development process. As noted above, local Server Computer 504 may be preferred for this purpose to reduce latency. If the RUIMS DL 528 is connected to a UI Management Device 502, a development session is created and all resources retrieved are based on the most recent active version of the ADD and any changes made during the session. If the RUIMS DL 528 is not connected to a UI Management Device 502, all resources retrieved are based on the most recent active version of the ADD resident at the Client Device 508.
A feature of RUIMS is the ability for the system to utilize a different version of the ADD depending on the runtime state of the application. This relationship can be thought of as a session between a Client Device 508 and a UI Management Device 502. This feature enables developers to work independently on user interface changes without impacting the work of other developers making changes to the same app. If a developer is running an app but the app doesn't have a UI Management Device 502 connected, the app will display the most recently saved version of the ADD and associated resources. If the app does have a UI Management Device 502 connected, the app will display any updates made by the UI Management Device 502. These updates may not have been saved as part of the most recent version and would only be visible to the Client Devices 508 connected to the UI Management Device 502.
In the preceding description, all exemplary user interface changes have been described as originating from the UI Management Device 502 and being communicated through the Server Computer 504/506 to the Client Device 508. However, in alternative embodiments, user interface change requests may be initiated from the Client Device 508. For example, the developer would turn this feature on in the RUIMS DL 528 so the developer can interact with the user interface controls. An example would be the moving of a UI control on the screen by dragging it to position the UI control in a different location. The moving of the UI control would generate a message and the message would be routed through the local Server Computer 504 or the Server Computer 506 to the UI Management Device 502. The UI Management Device 502 validates the requested change, updates the UIDD in the UI Management Device 502, and sends a request to the local Server Computer 504 or Server Computer 506 to store the change to the UIDD. The local Server Computer 504 or Server Computer 506 responds back to the originating Client Device 508 with a response message confirming that the change has been made.
It should be noted that a developer may choose to use RUIMS on an application that already has screens built by a mechanism other than RUIMS. For example, the user interface may have been built programmatically as in
In this exemplary embodiment, the RUIMS system 500 also has a production mode, as shown in
During production mode, the RUIMS RL 916 is responsible for retrieving new resources and UIDDs from the Server Computer 902. An exemplary method illustrating operation the RUIMS RL 916 to retrieve resources and UIDDs at runtime is shown in
If it is determined in step 1202 that the resource or UIDD is cacheable, then it is determined whether the resource of UIDD is stored in a cache and still valid, i.e., not expired, as shown at 1204. It is determined in step 1204 that the resource or UIDD is stored and still valid, then the called resource or UIDD is returned, as shown at 1212, and the method ends.
If it is determined in step 1202 that the resource or UIDD is not cacheable, then the RUIMS RL 916 retrieves the resource or UIDD from the Server Computer 902, as shown at step 1206.
Alternatively, if it is determined in step 1204 that the resource or UIDD is not stored in the cache, or is stored in the cache but not valid (i.e., expired), then the RUIMS RL 916 retrieves the resource or UIDD from the Server Computer 506, as shown at step 1206.
In either case discussed above, after a resource or UIDD is retrieved from a Server Computer 902 in step 1206, RUIMS RL 916 then checks to determine whether the retrieved resource or UIDD is cacheable, as shown at 1208.
If the retrieved resource or UIDD is determined to be cacheable at 1208, then the resource or UIDD is stored in cache 1210. After the resource or UIDD is stored in the cache, as shown at 1210, and returned in response to the call, as shown at step 1212, the method ends.
Alternatively, if the resource or UIDD is determined not to be cacheable at 1208, then the resource is returned in response to the call, as shown at 1212, and the method ends.
In certain embodiments, RUIMS RL 916 is configured to look for updated resources and UIDDs in a background process and download these updates for storage in local cache, using conventional caching techniques beyond the scope of the present invention. Consistent with the present invention, if conventional caching techniques are used to ensure that all resources 602 are downloaded as a complete package before any of the UI changes can be displayed in the application. This tends to avoid issues related to implementation of updates—e.g., to avoid adding a new image to a screen before the new image has been downloaded to the device before the image is displayed; otherwise the new image control would appear on the screen without the associated image.
In certain embodiments, RUIMS RL 916 is configured with the ability to permit developers to configure rules associated with the updating of resources and UIDDs associated with an ADD in the Client Device 508. The rules may be applied for distributing and/or applying metadata. By way of example, applicable rules may provide that the metadata is applied only when an associated application starts, or when it awakes from a sleep mode, or according to a local time of day, etc. Such rules may be encapsulated within the metadata to which it applies. For example, if a developer does not want newly-updated images to appear in the application until after the user has navigated back to a home screen, or has restarted the application, such rules are stored and configured in the ADD. One reason for wanting this type of logic is so the images or screen fields don't change for a particular application user while the user is in the middle of a wizard or multi-screen process. The Client Device 508 may be configured to display an alert box notifying the user of application interface changes about to be applied giving the option to the user of accepting or delaying the user interface changes by way of configuration parameters included in code during the integration of the RUIMS SDK 528, 916 with the application 526, 914.
For example, referring again to the example of
Once a new playlist is downloaded, it may be checked for changes to the playlist since the last download. If there are new playlist entries with additional content, the new content (i.e. UI changes, images, etc.) is downloaded and the changes are cached locally. Optionally, a new playlist may be disregarded for efficiency purposes. For example, a new playlist assigning Version B in a multivariate test may be disregarded for efficiency purposes if a prior playlist assigned Version A. The new playlist entry changes may be downloaded without impacting the current screens at this point if all new changes are stored locally on the phone in a directory structure that is only available to RUIMS 528 only after the new playlist becomes the active playlist. So RUIMS 528 tracks the currently active playlist and the new playlist that is being downloaded and processed. In one exemplary embodiment, at predetermined occurrences, such as backgrounding and foregrounding the application, or at predetermined intervals, e.g., every 10 minutes, if a new playlist has been downloaded the current playlist will reference the new playlist. This enables the application to have new changes without requiring restarting of the application. Every time a user navigates to a new screen or back to a screen that was previously displayed, RUIMS 528 checks the playlist for changes to be applied to the screen. RUIMS 528 looks at start time and end time to determine if the playlist changes can be applied to the screen. The checking of start time and end time is an example of a rule that is built into the RUIMS 528 codebase.
An example of a more complex rule is when a set of UI changes occur across more than one screen. This requires RUIMS 522 to correlate that changes were made to more than one screen during, for example the creation of a multivariate test. The playlist entry would contain the screen definitions organized by screen. For RUIMS 528 to manage a rule such as only add UI changes for a screen if that screen is the first screen in a set of screens, ensuring the user doesn't experience one of two screens changing for a multivariate test. RUIMS 528 keeps a stack of the screens visited. So, for example, if the user navigates to Screen 1, to Screen 2, to Screen 3, and back to Screen 2 the stack would contain Screen 1, Screen 2. If a multivariate test were created for Screen 2 and Screen 3 and the user had a new playlist download in the background while the user was on Screen 3 which became live, then in the described implementation when the user navigates back to Screen 2 the user would not see the changes from the newly downloaded multivariate test. Rather, the user would need to navigate back to Screen 1 before the multivariate test would be applied to the user's device.
In certain embodiments, the RUIMS 500 supports the ability to customize a user interface using keys. Keys may include name/value pairs, or just names without associated values. For example, keys can be used to choose resources identified in the ADD and UI controls in a UIDD. In such embodiments, the Application 526 is configured to pass the keys into RUIMS DL 528 and RUIMS RL 916 when accessing a resource or UIDD.
It should be further noted that an ADD can be configured to contain keys on resources used for customization purposes. For example, the exemplary ADD shown in
A UIDD can contain keys associated with the definition of the user interface. The keys can be used to choose areas of the UIDD.
It should be further noted that the ADD, the UIDD, and the resources can be provided with attributes defining caching requirements as well as date and time ranges for when the item is active. For example, a contact customer service button may only be available between the hours of 8:00 am and 5:00 pm EST. If the time were outside of this range the button would not appear. Another example would be replacing all header images with a different set of images between 12:01 am and 11:59 pm local time on Sundays. As part of this description the data and time functionality will be described as a key/value pair but could be implemented independently of the key/value concept. For example, in
When the application has been completed and is ready for production deployment, the ADD, UIDD, and supporting resources can be packaged together (e.g., in a zip file) for bundling with the application. Bundling the initial starting point reduces the amount of data to be downloaded the first time the application is loaded and executed, thereby speeding up the initial load and run time of the application. This is an optional process and is not required. Depending upon the platform (iOS, Android, Windows Phone 7) the bundling process and inclusion into the application may require different steps and processes.
As a performance optimization the ADD and/or UIDDs can be compiled into native code (e.g., Objective-C for iOS) or platform-specific serialization for the Client Device 508.
The RUIMS DL 528 is responsible for managing all resources and UIDDs locally for the Application 526. This is accomplished by holding a local cache of all resources and UIDDs configured as cacheable. Any request for a resource or UIDD first checks the cache and if not available from the cache retrieves the content from RUIMS 522. A resource or UIDD can be requested using keys to further customize the user experience. The RUIMS DL 528 determines whether the customization of the user interface is done in the RUIMS DL or on the local Server Computer 504 or Server Computer 506.
It will be appreciated that, the RUIMS system 500 has the ability to control what developers have and don't have access to through the use of permissions associated with each developer's RUIMS user account. An example of a permission system that can be used in accordance with the present invention is the use of Access Control Lists (ACLs). Access can be granted to or limited by developer accounts and/or groups containing developer accounts. ACLs may be used to protect the reading and writing of ADDs, UIDDs, and resources.
One well-known and powerful feature in the World Wide Web context is A/B or multivariate testing with respect to web pages. This process enables the developer to make one or more changes to an HTML page to test which change or changes cause users to do something more often, which is typically quantified as a “conversion rate.” For Web-based applications the developer typically uses A/B or multivariate testing software to make a client-side change in JavaScript or a server-side change for the testing service to choose which page version to display to a particular user. The server collects metrics and reports back to the developer which variation conversion rate.
In accordance with the present invention, a developer can use the RUIMS system to create an A/B or multivariate test in the ADD, as shown in
The RUIMS system 500 has the ability to inject the capturing of analytics into any user interface screen because the RUIMS DL 528 has control over the building of the user interface. Analytics can be automatically added to certain UI controls such as the clicking of buttons or selection of menu items. During operations such as A/B testing these analytics can be used to determine which of two scenarios achieved the desired goal, as discussed in further detail below.
For further illustrative purposes, exemplary operation of the RUIMS system 500 described above is discussed below with reference to
The exemplary method of
Next, the exemplary method involves development of changes to the user interface by way of a playlist identifying changes to the original controls and/or properties. In accordance with the present invention, the playlist identifies an identification code corresponding to, e.g., identical to, one of the identification codes contained in the application. In association with the identification code in the playlist, the playlist may include updated properties—i.e., new or changes properties that are different from the original properties associated with the same control identified by the identification code. Accordingly, the playlist can be used to redefine a user interface control of the software application by identifying the user interface control by its identification code and providing associated updated properties to be used in addition to and/or instead of the original properties. By way of example, the playlist may have the form of an XML document, a JSON document, an Apple plist, etc. An exemplary playlist is provided in
Next, the playlist is transmitted to the computing device, as shown at step 1808. This may be performed in any suitable fashion. By way of example, such transmission may occur via a communications network, and may be initiated by the client computing device 508, e.g., under control of the RUIMS DL 528, e.g., as part of general housekeeping matters to update an application, or responsive to executing of an application, or just prior to display of a user interface screen during running of an application, as described above in greater detail.
The exemplary method next involves the computing device, e.g. 508, displaying the user interface screen during execution of the application to include the user interface control(s) in accordance with the updated properties provided in the playlist, as shown at 1910, and the method ends, at shown at 1912. As described above, such functionality may be provided by the software application 526 in cooperation the RUIMS DL 528.
Accordingly, information from the subsequently-distributed playlist effectively supersedes (e.g., by replacing or removing) and/or supplements any corresponding code hard coded or otherwise provided as part of the software application (including in any UIDD) previously distributed to the computing device. This allows the software application to be modified after distribution, e.g., after downloading from an App store or the like, and more specifically, during application runtime. Further still, to the extent that the software application is configured to request the playlist automatedly, without user involvement, the software application may thus be revised/updated to include user interface changes in a manner transparent to the user, without the need for the user to download a new version of the application. Accordingly, changes to the user interface/software application can be effectively “pushed” to the user, and the user is not required to initiate any “updating” process in a “pull” mode of operation. This provides for centralized control, e.g., to a marketing executive, over the user interfaces displayed by software applications on a plurality of individual user's computing devices that otherwise would generally be outside of the marketing executive's control.
It should be noted that in certain embodiments, a software application may be built to be compliant with the teachings of the present invention, e.g., to include a unique identification code in the software application as part of initial programming. However, the teachings of the present invention also provide for the processing of “legacy” software applications that were not originally programmed in accordance with the teachings of the present invention. With respect to such existing “legacy” software applications, the original source code may be recompiled or otherwise integrated with an SDK in accordance with the present invention, and then may be redistributed, e.g., through an app store, to client computing devices. The SDK (e.g., RUIMS 522) is configured to process an in-memory view hierarchy of a user interface screen, to effectively reverse engineer the view hierarchy by converting the view hierarchy details into a document (e.g., as a JSON or XML document) and communicating the document to RUIMS 522 at Server Computer 506, which may then communicate the information to UI Management Device 502. This document is essentially a UIDD. Such an in-memory view hierarchy is routinely created during runtime of conventional software applications. During such processing, the SDK assigns a unique identification code to each of the user interface controls of the view hierarchy. For example, this may be performed at client computing device 508 by RUIMS DL 528 in a programmatic fashion, automatedly before each corresponding user interface screen is displayed by the client computing device 508, and before changes from a playlist are applied.
It should be further noted that in certain embodiments, a new user interface screen for the software application may be built by using the teachings of the present invention. In one such exemplary embodiment, the software application does not include code for displaying user interface controls of the new user interface screen. In this case, the application may include a reference to a new “blank” UIDD for the new user interface screen. The new “blank” UIDD may be stored at the Server Computer 506. Accordingly, rather than reverse engineering of an existing user interface screen as described above, selection of and/or navigation to the reference to the “blank” user interface screen at the client computing device will result in messaging from RUIMS 528 to RUIMS 522 at Server Computer 506 that will result in a blank UIDD being sent from the Server Computer 506 to the user interface management device 502, which will in turn permit “editing” of the list of controls of the UIDD to add new controls and associated properties, and thus to build the new user interface screen.
Accordingly, as illustrated by this embodiment, the RUIMS system is capable of provide centralized control of user interfaces displayed by disparately-owned and operated computing devices in connection with not only newly-created software applications, but also pre-existing, legacy software applications.
Next, the method involves displaying a list of the user interface controls of the user interface screen and each control's associated properties, as shown at 2004. Preferably, this step is done at a user interface management device 502, as shown in
In this exemplary embodiment, the method next involves determining whether input has been received to change the list of controls (e.g., to add or delete controls) or associated properties of one of the existing controls, as shown at 2006. This input is provided by the user, and preferably received at the user interface management device 502. The RUIMS 514 of device 502 determines whether such input has been provided.
If it is determined at 2006 that such input has been provided, the RUIMS 514 develops a playlist reflecting the input, as shown at 2008. For example, the playlist may identify (i) each identification code of each new/deleted/changed user interface control, and (ii) the corresponding updated properties for each identification code. The playlist is preferably a document created by RUIMS 514, an example of which is shown in
This exemplary method next involves storing the playlist at a server, e.g., Server Computer 506, as shown at 2010. This may be performed by RUIMS 514 transmitting a message communicating such changes to RUIMS 522 of Server Computer 506, e.g., via messaging server 530. The playlist may be stored in the server's data store 540, as shown in
It should be noted that at this point the software application may be running asynchronously on various different computing devices. As shown at 2012, before one of the instances of the application displays the user interface screen, the associated computing device communicates with the server, e.g., Server Computer 506, and attempts to retrieve an applicable playlist. In other words, the application checks to see if a playlist is available. This may be performed by RUIMS DL 528 at the client device 508. Notably, the process flow may proceed to this step from step 2006 if no input was received.
If it is determined at 2014 that an applicable playlist is stored at the server, then the playlist is transmitted from the server, e.g., 506 to the client device, e.g., 508, as shown at 2016. This may be performed by under the control of one or more of RUIMS 528 and 522.
After receipt of the playlist at the client device 508, the changes from the playlist are applied in accordance with rules, as shown at 2018. This may be performed by RUIMS 528 at that client device 508. By way of example and as described above, the rules may provide that the playlist, or only certain portions of the playlist should be applied as a function of certain business logic, a geographical location, a device type, etc., and/or that they may be applied only at a certain point in time, e.g., only after restarting of the application, only after a certain point in a flow of the application, etc.
After application of the playlist, the computing device displays the user interface screen to include the user interface controls as displayed in accordance with the updated properties from the playlist, as shown at 2020, and the method ends as shown at 2022.
If, however, it is determined at 2014 that an applicable playlist is not stored at the server, then the computing device displays the user interface screen to include the user interface controls as displayed in accordance with the original properties, as shown at 2024, and the method ends as shown at 2022.
Notably, other instances of the software application running on other computing devices may asynchronously contact the server to check for playlists and apply them as appropriate, and this may continue until the playlist is deleted or updated. Accordingly, updates to the interface may be distributed to many users of the software application according to a “push” model, from the perspective of the marketer/distributor of the software application, though it is noted that technologically the software application including the RUIMS DL is constructed consistent with the teachings of the present invention to poll, or pull, changes/updates from the server, but without the need for an affirmative act by the user of the client computing devices.
Referring now to
Next, the system involves receipt of input to change the list of controls and/or properties of one or more of the UI controls, as shown at 2104. Accordingly, this step is somewhat similar to step 5006 described above with reference to
Accordingly, a playlist identifying the changes is created, e.g., as described above with reference to 2008 of
In this embodiment, the user interface management device 502 also receives user input defining a distribution rule for different versions of the interface screen, as shown at 2008. By way of example, the rule may provide for distribution of the playlist only 50% of the time, so that a first half of the software applications will not receive a playlist and will display the user interface screen in accordance with the original properties, and that the other of the software supplications will receive the playlist and thus will display the user interface screen in accordance with the updated properties contained in the playlist. It should be appreciate that the rules may include not only proportions and/or ratios, but may also include other logic. For example, such other logic may relate to distribution of the playlist as a function of geographic location data, user information, device type, etc. It should further be noted that a larger number of versions may be supported concurrently.
In this embodiment, the playlist is next stored at the server, as shown at 2110. This may occur as described above with reference to 2010 of
Next, the server receives from a computing device a request attempting to retrieve an applicable playlist. Accordingly, this step is similar to step 2012 of
If it is determined at 2114 that the playlist should be distributed, then the server transmits the playlist to the computing device, the computing device applies the playlist in accordance with any applicable rules, and then displays the user interface screen to include the user interface controls in accordance with the updated properties contained in the playlist, as shown at 2116-2120, which steps are similar to those described with reference to 2016-2020 of
If it is determined at 2114 that the playlist should be not distributed, then the server does not transmit the playlist to the computing device, and the computing device displays the user interface screen to include the user interface controls in accordance with the original properties contained in the software application, as shown at 2124, which is similar to 2024 of
In either case, in this exemplary embodiment, the server is configured to track use of the user interface and report user interface analytics, as shown at 2122. These analytics may include any suitable information, such as, for example, click through rates for user interface buttons displayed on the page. Additional information is provided below.
In this method, it is then determined whether to change the interface, as shown at 2126. This may be determined by the user or programmatically, e.g., by comparing relative performance as indicated by the analytics. If it is determined to change the user interface, the method flow returns to step 2104 and the method repeats. If it is determined not to change the user interface then it is next determined whether a next request attempting to retrieve the playlist has been received at the server. If so, the server again determines whether to distribute the playlist in response to the request at 2114, and the method repeats. If not, the method ends, as shown at 2130.
Accordingly, this method may be used to implement multivariate testing to test the performance of multiple versions of a user interface. Notably, after a test a higher-performing version may be adopted as the “universal” version by changing the distribution rules for the various versions, e.g., to set the distribution rule to 100% for the playlist to result in abandonment of the original version and universal adoption of the updated version. For example, this may be performed by selecting the Apply Alternatives to Production button 2278 and selecting a version (Current/Alternative A/Alternative B) to be delivered to users 100% of the time, as shown in the user interface windows 2270, 2280 of
Use of the RUIMS system 500 in the context of A/B (multivariate) testing is discussed in greater detail below with reference to
In the illustrative example of
Accordingly, it will be appreciated that to use the RUIMS system 500 to implement an A/B test for a specific mobile device software application, that same software application must first be configured to be compatible with the RUIMS system, so that, for example, it will display such an access code in response to the gesture input. A developer can configure an application for such testing purposes by integrating an RUIMS software development kit (SDK) with source code to build the application during initial coding/application development. Development of SDKs, publishing of SDKs, and integration of SDKs into software applications (e.g., by compiling an associated library (e.g., RUIMS DL 528) into the application) is well-known in the art, and may be performed in a conventional manner, and thus are not discussed in detail herein.
After supplying the access code displayed by the mobile device to the test entry field 1816 of the device connection interface window 2210, and submitting it to the system, the Server Computer 506 authenticates that the develop has a valid account, that the code is valid, etc. for security purposes. Such steps can be performed consistent with well-known authentication techniques, and thus are not discussed in detail herein.
Next, the wizard displays a screen selection interface window 2220, as shown in
Use of the developer's mobile device 800 to display the user interface window to be tested 810 causes the developer's mobile device to display the actual, final version of the user interface window 810 as presently coded, as shown in
The ability to makes changes to the UI running inside an app requires the ability to reference each UI control by a unique identifier, referred to herein as an identification code. This unique identification code can be used outside of the software application to reference all user interface controls. One example of such an identification code is the use of a nameTag set during the creation of the UI control containing string name.
For screens that were built without RUIMS a different approach is required. The SDK (528) reverse engineers the UI view hierarchy and assigns a deterministic viewId to each control on the screen. An exemplary algorithm includes the traversing of each UI control and assigning a string representation based on a concatenation of UI control type (i.e. label), the depth of the UI control in the hierarchy, and the z-order of the UI control at the current depth. The viewId is then passed back to the server with the control's property details so later changes can be matched back to the originating UI control.
In this exemplary test-building interface window 2230, each control of the user interface window 810 displayed on the mobile device 800 is separately accessible, viewable and/or modifiable, as shown in
Further, consistent with the description above in relation to the RUIMS system, input entered into the input fields 2236 will immediately cause corresponding changes to the interface window 810 displayed via the mobile computing device 800, due to the messaging and version-control system of the RUIMS system described above.
Changes to the interface window 810 may be entered and re-entered to define an alternative user interface display window for testing purposes. In this example, it is contemplated that there is a current/original interface window (“Current”) and a newly-designed alternative user interface window (“Alternative A”) that reflects the changes entered via window 2230. Notably, additional alternative interface windows (e.g., “Alternative B”) may be designed and saved for testing purposes, e.g., using “New Alternative” button 2238 and similar input windows/fields.
Referring now
The exemplary test targeting interface window 2240 of
This exemplary test targeting interface window 2240 further presents a second option 2244 to cause display of the alternative user interfaces to be tested according to a fixed ratio. If this option is selected then the RUIMS 522/Server Computer 506 will cause display of one of the tested user interface windows (Current, Alternative A, or Alternative B) at various mobile computing devices running the tested application in accordance with the ratios or percentages assigned to each alternative via text entry fields 1844a, 1844b, 1844c. For example, this may involve the RUIMS 522/Server Computer 506 tracking the serving of each of the alternative user interface windows to mobile devices, and selecting a next alternative user interface to be served (e.g., by specifying and/or providing a playlist or portion thereof corresponding to the appropriate version) as a function of the alternative user interface windows previously served in response to execution of the application and/or request of the user interface window.
This exemplary test targeting interface window 2240 further presents a second option 2246 to cause display of the alternative user interfaces to be tested according to specified user data. If this option is selected then the RUIMS 522/Server Computer 506 will cause display of one of the tested user interface windows (Current, Alternative A, or Alternative B) at various mobile computing devices running the tested application in accordance with the user data provided elsewhere.
As shown in
One implementation for choosing a target for an A/B test is to leverage the ability to navigate through an application and for RUIMS 528 to communicate to RUIMS 514 details about what is happening in the application from the perspective of what was clicked on, and details about what UI controls are in the UI. The user initiates the selection of a target in the Web interface of RUIMS 514. As the user building the A/B test navigates the application's 526 UI, RUIMS 528 sends messages through RUIMS 522 to RUIMS 514 communicating what UI control the action was performed on and the action performed. Details about the UI control might contain the screen, nameTag or viewTag identifying the control, the text on the button, and the action performed such as a tap. This information is stored in RUIMS 522 and displayed in the Web interface of RUIMS 514. This enables a user building an A/B test to choose the target for the test by navigating through the site without needing to write any code or sift through previous analytic calls to identify the target combination of screen, UI control and action.
The test may then be implemented as planned, e.g., during a specific time frame. Preliminary test results may be viewable during the performance of the test, and the user interface may permit refinement of the test, as shown in test detail interface window 1860, as shown in
After completion of the test, test result data may be displayed via test data interface window 2270, as shown in
Optionally, the test data interface window 2270 may include user-selectable buttons to initiate display of graphical or other summaries 2274 of the test result data, as shown in
Further, the wizard provides a user-selectable button for applying the results of the test to the production version of the application. In this example, test data interface window 2270 includes a button 2278 for causing application of a tested alternative as the production version, for use by all users. Accordingly, selection of the button 2278 in window 2270 causes display of an apply alternatives user interface window 2280 presenting the current and tested alternatives as user-selectable options, as best shown in
By applying the best-performing alternative to production, the RUIMS system effectively applies a 100% distribution or weighting to the highest-performing alternative, “Alternative A.” Accordingly, any users, mobile devices, or applications subsequently starting the associated application and/or requesting the user interface window for display will subsequently receive Alternative A to the exclusion of the other alternatives. In accordance with the present invention and the discussion above, this effect is provided by making a list of metadata changes, and publishing that list as a message. Such making of the list is performed and published by RUIMS 522 of Server Computer 506, such that all devices running the application receives that metadata, and thus will subsequently see those changes. As a result, Alternative A can be rolled out and provided to all users without having to recode or modify the application, or the republish the application to an application store or other centralized download site. Rather, the metadata is published to the individual users and is interpreted at runtime to provide the modified/updated version of the user interface corresponding to Alternative A, etc. This delivery model is advantageous to publishers of mobile device applications, in that it allows for changes to be reliably “pushed” to mobile device users, and does not rely on a pull-based model that would require each mobile device user to take action to re-download or update an application before seeing the updated interface, which would generally delay implementation and/or use of the updated interface across a group of mobile device users.
By way of illustration, use and operation of the RUIMS system may be described summarily as follows. Initially, a software application for displaying a user interface screen is created by compiling a RUIMS software development kit (SDK) along with source code to build the application. Subsequently, during execution of the application at a client computing device (i.e., at runtime), the SDK may be called. For example, after the software application executed to build a user interface screen for display via the client computing device, but before the user interface screen is displayed to the user, the SDK code runs and processes the view hierarchy of the screen. During such processing, the SDK assigns a viewID to each user interface control. If the developer had originally assigned a nameTag to the user interface control during initial creation of the course code, the user interface control may be assigned a viewID only. If the nameTag is empty the viewID may also be assigned to the nameTag. Thus, the nameTag will either by assigned by the developer or generated and be assigned from the viewID.
The Remote Server 506 (specifically RUIMS 522) communicates with the SDK through the use of the server's messaging server. The User Interface Management Device 502 (specifically RUIMS 514) sends a message to the Client Computing Device 508 (specifically the SDK/RUIMS 528) telling the SDK/RUIMS 528 to reverse engineer the user interface screen being currently displayed by the client computing device. The SDK/RUIMS 528 then makes a call to the Remote Server 506 (specifically RUIMS 522) to retrieve metadata for the types UI Controls in the software application. The metadata contains the property list and details about the properties to collect during the reverse engineering process. This permits adding, removing, or changing the details about what needs to be reverse engineered without the need to rebuild and re-integrate a new version of the SDK/RUIMS 528 into the software application. The SDK/RUIMS 528 then reverse engineers the screen using the metadata about the UI controls.
The SDK/RUIMS 528 then pushes the data collected to the Remote Server 506 (specifically RUIMS 522) for storage in Data Store 540. This data becomes the UIDD for the screen. For A/B testing the UIDD becomes the system of record for creating changes to the existing screen. Using the User Interface Management Device 502 (specifically RUIMS 514) a user can change properties (i.e. the text of a label) and this is stored in a change list for the variation of an A/B test. These changes are part of the playlist.
The system 3000 may communicate with other computers or networks of computers, for example via a communications channel, network card or modem 3022. The system 3000 may be associated with such other computers in a local area network (LAN) or a wide area network (WAN), and may operate as a server in a client/server arrangement with another computer, etc. Such configurations, as well as the appropriate communications hardware and software, are known in the art.
The computer's software is specially configured in accordance with the present invention. Accordingly, as shown in
Additionally, computer readable media storing computer readable code for carrying out the method steps identified above is provided. The computer readable media stores code for carrying out subprocesses for carrying out the methods described above.
A computer program product recorded on a computer readable medium for carrying out the method steps identified above is provided. The computer program product comprises computer readable means for carrying out the methods described above.
Having thus described a few particular embodiments of the invention, various alterations, modifications, and improvements will readily occur to those skilled in the art. Such alterations, modifications and improvements as are made obvious by this disclosure are intended to be part of this description though not expressly stated herein, and are intended to be within the spirit and scope of the invention. Accordingly, the foregoing description is by way of example only, and not limiting. The invention is limited only as defined in the following claims and equivalents thereto.
This application claims the benefit of priority under 35 U.S.C. §119(e) of U.S. Provisional Patent Applications Nos. 61/601,174, filed Feb. 21, 2012, 61/702,531, filed Sep. 18, 2012, and 61/705,096 filed Sep. 24, 2012, the entire disclosures of each of which are hereby incorporated herein by reference.
Number | Date | Country | |
---|---|---|---|
61702531 | Sep 2012 | US | |
61705096 | Sep 2012 | US |
Number | Date | Country | |
---|---|---|---|
Parent | 61601174 | Feb 2012 | US |
Child | 13773102 | US |