Using in-app gestures to implement deep links

By injecting code into software applications, the computing system enables it to programmatically navigate to specific content, solving the problem of inefficient developers in writing deep link code and realizing deep link navigation without user interaction.

CN120380477APending Publication Date: 2025-07-25GOOGLE LLC
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
CN202380085058.8
Authority / Receiving Office
CN · China
Patent Type
Applications(China)
Current Assignee / Owner
Priority Date
2022-12-15
Filing Date
2023-12-07
Publication Date
2025-07-25

AI Technical Summary

Technical Problem

Software developers need to write complex code to implement deep linking functions, resulting in inefficient development, and many developers avoid implementing this function.

Method used

Inject code into the software application through a computing system, adding functionality for handling deep links enables the software application to programmatically interact with the user interface and navigate to specific content.

Benefits of technology

It reduces the time and resources for developers to write deep link code, improves the development efficiency of software applications, and realizes deep link navigation without user interaction.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN120380477A_ABST
    Figure CN120380477A_ABST
Patent Text Reader

Abstract

A computing device may receive a deep link from a first software application executing at the computing device, and may determine a second application for handling the deep link. In response to determining a second software application for handling the deep link, the computing device may determine one or more interactions with the user interface of the second software application for navigating the user interface of the second software application to particular content of the second software application indicated by the deep link. The computing device may perform one or more interactions with a user interface of the second software application without user interaction to navigate the user interface of the second software application to particular content of the second software application indicated by the deep link.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] This application claims the benefit of U.S. Provisional Patent Application No. 63 / 387,681, filed on December 15, 2022, the entire content of which is incorporated herein by reference. BACKGROUND OF THE INVENTION

[0002] Developers of software applications can implement deep link functionality that links to specific content within the software application. Implementing deep link functionality can enable users to easily navigate to a specific content segment within the software application without having to search through the software application and without having to navigate back and forth between different screens of the software application. For example, a social media application can implement deep link functionality to enable another software application to deep link to a specific social media post within the social media application and / or to deep link to the new post functionality of the social media application. SUMMARY OF THE INVENTION

[0003] Generally, aspects of the present disclosure relate to techniques for enabling software applications to support deep linking to specific content within the software application. A software application publishing platform, such as an app store, that publishes software applications for download by a computing device can inject code for supporting deep linking into the software application. Such code can enable the software application to programmatically interact with the user interface of the software application to navigate the user interface and content of the software application. When the software application is installed on a computing device, the software application can handle a deep link to specific content within the software application by programmatically interacting with the user interface of the software application in order to navigate the software application to the specifically deep-linked content within the software application. By injecting code for supporting deep linking into the software application, the software application publishing platform can enable the software application to handle deep links without the need for the developer of the software application to write code for handling deep links for the software application.

[0004] In some aspects, the techniques described herein relate to a method that includes: receiving, by one or more processors, a deep link from a first software application executing at the one or more processors; determining, by the one or more processors, a second software application for handling the deep link; in response to determining the second software application for handling the deep link, determining, by the one or more processors, one or more interactions with the user interface of the second software application for navigating the user interface of the second software application to the specific content indicated by the deep link; and performing, by the one or more processors, the one or more interactions with the user interface of the second software application without user interaction to navigate the user interface of the second software application to the specific content indicated by the deep link.

[0005] In some aspects, the techniques described herein relate to a computing device, including: a memory that stores instructions; and one or more processors that execute the instructions to: receive a deep link from a first software application executing at the one or more processors; determine a second software application for handling the deep link; in response to determining the second software application for handling the deep link, determine one or more interactions with the user interface of the second software application for navigating the user interface of the second software application to specific content indicated by the deep link; and perform the one or more interactions with the user interface of the second software application without user interaction to navigate the user interface of the second software application to the specific content indicated by the deep link.

[0006] In some aspects, the techniques described herein relate to a non-transitory computer-readable storage medium storing instructions that, when executed, cause one or more processors of a computing device to: receive a deep link from a first software application executing at the one or more processors; determine a second software application for handling the deep link; in response to determining the second software application for handling the deep link, determine one or more interactions with the user interface of the second software application for navigating the user interface of the second software application to specific content indicated by the deep link; and perform the one or more interactions with the user interface of the second software application without user interaction to navigate the user interface of the second software application to the specific content indicated by the deep link.

[0007] In some aspects, the techniques described herein relate to a method, including: modifying, by one or more processors, a software application to specify deep links to specific content within the software application that the software application supports; and adding, by one or more processors, code to the software application to programmatically interact with the user interface of the software application to handle the deep links supported by the software application.

[0008] In some aspects, the techniques described herein relate to a computing system, including: a memory that stores instructions; and one or more processors that execute the instructions to: modify a software application to specify deep links to specific content within the software application that the software application supports; and add code to the software application to programmatically interact with the user interface of the software application to handle the deep links supported by the software application.

[0009] In some aspects, the techniques described herein relate to a non-transitory computer-readable storage medium storing instructions that, when executed, cause one or more processors of a computing system to: modify a software application to specify a deep link to specific content within the software application that the software application supports; and add code to the software application to programmatically interact with a user interface of the software application to handle the deep link that the software application supports.

[0010] Details of one or more examples of the present disclosure are set forth in the accompanying drawings and the description below. Other features, objects, and advantages of the present disclosure will be apparent from the description, the drawings, and the claims. BRIEF DESCRIPTION OF THE DRAWINGS

[0011] Figure 1 is a conceptual diagram illustrating an example environment in which an example software application uses in-app gestures to implement deep link functionality.

[0012] Figure 2 is a block diagram illustrating an example computing device in accordance with one or more aspects of the present disclosure.

[0013] Figure 3 is a block diagram illustrating an example computing system in accordance with one or more aspects of the present disclosure.

[0014] Figure 4 is a conceptual diagram illustrating a software application interacting with an example user interface of the software application to handle a deep link in accordance with aspects of the present disclosure.

[0015] Figure 5 is a flowchart illustrating an example operation of an example computing device in accordance with one or more aspects of the present disclosure.

[0016] Figure 6 is a flowchart illustrating an example operation of an example computing system in accordance with one or more aspects of the present disclosure. DETAILED DESCRIPTION

[0017] Figure 1 is a conceptual diagram illustrating an example environment in which an example software application uses in-app gestures to implement deep link functionality. As Figure 1 shown, environment 100 includes computing device 102, computing system 120, and network 130.

[0018] Computing system 120 may represent any suitable computing system capable of both sending information to and receiving information from a network such as network 130, such as one or more desktop computers, laptop computers, mainframes, servers, cloud computing systems, and the like. In some examples, Figure 1The components of the computing system 120 shown may reside and execute on the same or separate computing devices and systems operated by and / or under the control of one or more entities. In some examples, the computing system 120 may represent one or more cloud computing systems that provide access to their respective services via the cloud.

[0019] The computing system 120 includes a code injection module 122. The code injection module 122 may perform the operations described herein using software, hardware, firmware, or a combination of hardware, software, and firmware residing in the computing system 120 or one or more other remote computing devices and executing on the computing system or at the one or more other remote computing devices. In some examples, the code injection module 122 may be implemented as hardware, software, and / or a combination of hardware and software. The computing system 120 may utilize one or more processors to execute the code injection module 122. The computing system 120 may execute the code injection module 122 as a virtual machine executing on the underlying hardware, or execute the code injection module within that virtual machine. The code injection module 122 may be implemented in various ways. For example, the code injection module 122 may be implemented as a downloadable or pre-installed application or "app". In another example, the code injection module may be implemented as part of the operating system of the computing system 120. Other examples of the computing system 120 implementing the techniques of the present disclosure may include Figure 1 additional components not shown.

[0020] The network 130 represents any public or private communication network for transmitting data between computing systems, servers, and computing devices, such as between the computing system 120 and the computing device 102, e.g., cellular, Wi-Fi, and / or other types of networks. The network 130 may include one or more network hubs, network switches, network routers, or any other network equipment that are operatively coupled to each other to provide an exchange of information between the computing system 120 and the computing device 102. The computing device 102 and the computing system 120 may use any suitable communication technology to transmit and receive data across the network 130. Each of the computing system 120 and the computing device 102 is operatively coupled to the network 130 using a respective network link, such as Ethernet, Wi-Fi, or any other type of wired and / or wireless network connection.

[0021] The computing device 102 represents an individual mobile or non-mobile computing device. Examples of the computing device 102 include mobile phones, tablet computers, laptop computers, desktop computers, servers, mainframes, set-top boxes, televisions, wearable devices (e.g., computerized watches, computerized eye-wear devices, computerized head-mounted headphones, computerized gloves, etc.), residential automation devices or systems (e.g., smart thermostats or residential assistant devices), gaming systems, media players, e-book readers, mobile TV platforms, automotive navigation or infotainment systems, or any other type of mobile, non-mobile, wearable and non-wearable computing devices.

[0022] The computing device 102 includes a user interface device (UID) 104. The UID 104 of the computing device 102 can serve as an input device of the computing device 102 and an output device of the computing device 102. Various techniques can be used to implement the UID 104. For example, the UID 104 can serve as an input device using a presence-sensitive input screen, such as a resistive touch screen, a surface acoustic wave touch screen, a capacitive touch screen, a projected capacitive touch screen, a pressure-sensitive screen, an acoustic pulse recognition touch screen, or another presence-sensitive display technology. In some examples, the UID 104 can serve as an input device using one or more audio input devices such as one or more microphones. The UID 104 can serve as an output (e.g., display) device using any one or more display devices, such as a liquid crystal display (LCD), a dot matrix display, a light-emitting diode (LED) display, a micro LED, an organic light-emitting diode (OLED) display, electronic ink, or a similar monochromatic or color display capable of outputting visible information to the user of the computing device 102. In some examples, the UID 104 can serve as an audio output device and can include one or more speakers, one or more headphones, or any other audio output device capable of outputting audible information to the user of the computing device 102.

[0023] In some examples, the UID 104 of computing device 102 can include a presence-sensitive display that can receive tactile input from a user of computing device 102. The UID 104 can receive an indication of tactile input by detecting one or more gestures from a user of computing device 102 (e.g., the user touches or points to one or more locations of the UID 104 using a finger or a stylus). The UID 104 can present output to the user, for example, at the presence-sensitive display. The UID 104 can present the output as a graphical user interface (e.g., user interface 140) that can be associated with functionality provided by computing device 102. For example, the UID 104 can present various user interfaces of components of a computing platform, an operating system, an application (e.g., software application 112), or a service (e.g., an electronic messaging application, an Internet browser application, a mobile operating system, etc.) that are executed at or accessible by computing device 102. The user can interact with the respective user interface to cause computing device 102 to perform operations related to the functionality.

[0024] Computing device 102 includes a user interface module 106 (“UI module 106”) and a linking module 108. Modules 106 and 108 can perform the operations described herein using software, hardware, firmware, or a combination of hardware, software, and firmware residing in computing device 102 or one or more other remote computing devices and executed on or at the one or more other remote computing devices. In some examples, modules 106 and 108 can be implemented as hardware, software, and / or a combination of hardware and software. Computing device 102 can utilize one or more processors to execute modules 106 and 108. Computing device 102 can execute either of modules 106 and 108 as a virtual machine executing on the underlying hardware, or execute either of the modules within the virtual machine. Modules 106 and 108 can be implemented in various ways. For example, either of modules 106 and 108 can be implemented as a downloadable or pre-installed application or “app”. In another example, either of modules 106 and 108 can be implemented as part of the operating system of computing device 102. Other examples of computing device 102 implementing the techniques of the present disclosure can include Figure 1 additional components not shown.

[0025] The UI module 106 can interpret the input detected at the UID 104. The UI module 106 can relay information about the input detected at the UID 104 to one or more associated platforms, operating systems, applications, and / or services executing at the computing device 102 to cause the computing device 102 to perform functions. The UI module 106 can also receive information and instructions from one or more associated platforms, operating systems, applications, and / or services (e.g., software application 112) executing at the computing device 102 for generating the GUI. Additionally, the UI module 106 can act as a mediator between one or more associated platforms, operating systems, applications, and / or services executing at the computing device 102 and various output devices (e.g., speakers, LED indicators, vibrators, etc.) of the computing device 2 to utilize the computing device 102 to generate outputs (e.g., graphical outputs, audible outputs, tactile outputs, etc.).

[0026] In Figure 1 an example of, one of the software applications in the software application 112 can send data to the UI module 106 that causes the UID 104 to generate a user interface and its elements. In response, the UI module 106 can output instructions and information to the UID 104 based on the information received from the application that cause the UID 104 to display the user interface. When handling the input detected by the UID 104, the UI module 106 can receive information from the UID 104 in response to the input detected at the location of the elements of the user interface displayed on the screen of the UID 104. The UI module 106 propagates information about the input detected by the UID 104 to other components of the computing device 102 for interpreting the input and for causing the computing device 102 to perform one or more functions in response to the input.

[0027] The computing device 102 includes a software application 112 that includes functionality for performing any kind of operation on the computing device 102. For example, the software application 112 can include a web browser, an email application, a text messaging application, an instant messaging application, a weather application, a video conferencing application, a social networking application, an e-commerce application, a stock market application, an emergency alert application, a sports application, an office productivity application, a multimedia player, and so on. The software application 112 can perform the operations described herein using software, hardware, firmware, or a combination of hardware, software, and firmware that resides in the computing device 102 or one or more other remote computing devices and executes on or at the computing device or the one or more other remote computing devices. In some examples, the software application 112 can be implemented as hardware, software, and / or a combination of hardware and software. The computing device 102 can utilize one or more processors to execute the software application 112. The computing device 102 can execute any of the software applications 112 as a virtual machine executing on the underlying hardware, or execute any of the software applications within the virtual machine. The software application 112 can be implemented in various ways. For example, any of the software applications 112 can be implemented as a downloadable or pre-installed application or “app”. In another example, any of the software applications 112 can be implemented as part of the operating system of the computing device 102. Other examples of the computing device 102 implementing the techniques of the present disclosure can include Figure 1 additional components not shown.

[0028] Software developers can write software applications to include functionality for handling deep links to specific content of the software application. The specific content of the software application can be specific functionality of the software application, a specific activity or service of the software application, a specific screen of the user interface output by the software application, and so on. Deep links can be particularly useful for linking to a specific content segment within a software application executing at a mobile computing device because the deep link can allow a user to easily navigate to the specific content segment within the software application without having to search through the software application and without having to navigate back and forth between different screens of the software application.

[0029] Deep links can be implemented using intents, which are messages sent between different components of a software application. When a user of a computing device selects a deep link, the computing device can attempt to find a software application installed at the computing device that can handle the selected deep link. If the computing device can find a software application that can handle the selected deep link, the computing device can open the content segment of the software application indicated by the deep link.

[0030] A deep link can be in the form of a Uniform Resource Identifier (URI) or a Uniform Resource Locator (URL), which can link to specific content of a software application and / or pass data to the software application. For example, a deep link to a social media application can be used to open the application and display a specific social media post, or to open the application and allow the user to compose a new post. In some examples, the example deep link "myapp: / / product / 12345" can open a product activity in a software application associated with the URI scheme "myapp" and display the product associated with the product identifier 12345. In another example, the example deep link "myapp: / / new / post?title=My%20new%20post" can open a new post in a software application associated with the URI scheme "myapp", which allows the user to compose a new post with the title "My new post".

[0031] To write a software application that can handle deep links, a software developer may have to add an intent filter in the manifest of the software application to specify the deep links handled by the software application, add code in the software application to handle the deep links specified in the manifest file, and create a digital asset link file on a domain owned by the software developer (e.g., a website). Since software developers need to perform a multi-step process to write a software application that includes functionality for handling deep links, many software developers may avoid developing software applications that include functionality for handling deep links to specific content of a software application.

[0032] According to aspects of the present disclosure, the computing system 120 can modify a software application that does not include functionality for handling deep links to specific content of a software application such that the software application includes functionality for handling deep links to specific content of a software application after the modification. In some examples, the computing system 120 can be an application publishing platform where developers can submit software applications for listing in an app store, and the computing system 120 can be capable of modifying a software application submitted by a developer without the intervention of the developer or with minimal intervention of the developer to add functionality for handling deep links to specific content of a software application in the software application.

[0033] The code injection module 122 of the computing system 120 can modify a software application by performing code injection to add code, such as executable code, object code, etc., to the software application, and the code can be executed to perform one or more actions to handle deep links to specific content in the software application. The code injection module 122 can add code that enables the software application to handle deep links by programmatically interacting with the user interface of the software application to navigate to the specific content indicated by the deep link in the software application. For example, the added code can enable the software application to programmatically interact with user interface controls (e.g., buttons, menus, etc.), enter text into text fields (e.g., search fields), navigate through the screens of the software application, and / or otherwise interact with the user interface of the software application in a manner similar to how a user can interact with the user interface of the software application by providing user input at an input device without user input.

[0034] Such interactions with the user interface of the software application are referred to herein as gestures. For example, the added code can enable the software application to programmatically perform tap gestures to select buttons and text fields, programmatically perform swipe gestures and scroll gestures, programmatically perform tap gestures to select keys of a virtual keyboard to enter text into text fields, and / or programmatically perform any other gestures that can be performed by a user interacting with the computing device.

[0035] The code added to the software application by the code injection module 122 can also include code for retrieving or otherwise determining the interactions with the user interface of the software application to be performed to navigate to the specific content indicated by the deep link in the software application. That is, although the code added to the software application can be code that can be executed to programmatically perform any interaction pattern or sequence of interactions with the user interface of the software application, such code can be executed to receive an indication of or determine a sequence of interactions with the user interface of the software application in order to navigate the software application to the content specified by the deep link. Thus, the code added to the software application can programmatically interact with the user interface of the software application according to the sequence of interactions in order to navigate to or otherwise present the content specified by the deep link. In this way, the code added to the software application can be capable of receiving and executing an interaction sequence specific to the software application in order to handle deep links.

[0036] The code injection module 122 can also modify a software application by modifying and / or creating a manifest of the software application to declare the types of deep links that the software application can handle. That is, the computing system 120 can generate and / or modify the manifest of the software application to declare the deep links handled by the software application and associate the deep links handled by the software application with the code added to the software application by the code injection module 122.

[0037] In an example where the deep link is in the form of a URI or URL, the computing system 120 can add an intent filter to the manifest of the software application, the intent filter having a path and / or pattern of the URI and / or URL handled by the software application. For example, the code injection module 122 can specify one or more domain names in the manifest of the software application, such as "examplepetstore.com" or "altostrat.com", to indicate that the software application is capable of handling deep links that are web links to web sites at the one or more domain names.

[0038] For a software application modified by the computing system 120 to handle deep links, the computing system 120 can determine one or more interactions with the user interface of the software application for performing an action to navigate to the specific content specified by the deep link in the software application. For example, the computing system 120 can crawl the user interface of the software application to identify user interface elements in the software application. The computing system 120 can also determine how to navigate the user interface of the software application to access and / or activate specific functionality of the software application. In some examples, the computing system 120 can determine how to navigate the user interface of the software application to a search field in the user interface of the software application and how to enter text into the search field to search for items or content in the software application.

[0039] In this way, the computing system 120 can be capable of modifying a software application to be capable of handling deep links even if the software application written by the software developer does not natively handle deep links. A computing system capable of modifying a software application to handle deep links can improve the field of software development by reducing the time and resources that a software developer may have to spend writing a software application that handles deep links.

[0040] A computing device such as the computing device 102 can have one or more applications that have been modified by the computing system 120 to include code for handling deep links. For example, the computing device 102 can download a software application 112B that has been modified by the computing system 120 to include code for handling deep links from an app distribution system such as the computing system 120 via a network such as the network 130.

[0041] In Figure 1In the example, the software application 112A can be a web browser application that executes at the computing device 102 as a foreground application of the computing device 102. The software application 112A can output a graphical user interface by sending data to the UI module 106, and this data causes the UID 104 to generate the user interface 114A and its elements for the software application 112A. In response, the UI module 106 can output instructions and information to the UID 104 based on the information received from the software application 112A, and these instructions and information cause the UID 104 to display the user interface 114A.

[0042] The user interface 114A can be a user interface of the web browser application. In Figure 1 the example, this user interface displays a web page of a search engine web site, and this web page shows the results of performing a search for "computers for sale". The results of the search can include web links 116A and 116B to electronic web sites that are selling computers.

[0043] A web link is a hyperlink, such as in the form of a URL, that references a specific web page on a web site. A user can provide user input to select the hyperlink to navigate the web browser application to the specific web page referenced by the web link. In some examples, the software application 112A can navigate to the web page referenced by the web link in response to the user selecting the web link. A user of the computing device 102 can interact with the computing device 102, such as by providing user input at the UID 104, to select the web link presented by the software application 112A in the user interface 114A. For example, a user of the computing device 102 can provide user input at the UID 104 that corresponds to the selection of the web link 116A, and the computing device 102 can receive an indication of such user input that corresponds to the selection of the web link 116A.

[0044] However, because a web link can also serve as a deep link to specific content in another software application within the software application 112, the software application 112A can send an indication of the selected web link to the link module 108 in response to the computing device 102 receiving an indication of such user input that corresponds to the selection of the web link 116A, to determine whether the web link is a deep link that can be handled by another application within the software application 112.

[0045] The link module 108 can receive an indication of a web link from the software application 112A and, in response, can determine whether another application in the software applications 112 can handle a deep link. If the link module 108 determines that another application in the software applications 112 can handle a deep link, the link module 108 can pass the deep link to the application that can handle the deep link.

[0046] In some examples, each software application in the software applications 112 can specify the type of deep link to be executed in response. For example, each application can be associated with a manifest that lists the types of deep links in response to which the corresponding application is to act. The link module 108 can be able to determine whether another application in the software applications 112 based on the manifests of each software application in the software applications 112. Each software application in the software applications 112 can specify the type of deep link that can be handled by the corresponding application, such as by including an intent filter having a path and / or pattern of deep links to be handled by the software application.

[0047] For example, the manifest of a software application can include an intent filter that specifies one or more domain names, and the one or more domain names can indicate that the software application can handle a deep link that is a web link to a web site at the one or more domain names. Thus, in Figure 1 the example, the link module 108 can determine that the software application 112B can handle the web link 116A as a deep link based on the domain name in the web link 116A received from the software application 112A because the manifest of the software application 112B indicates a domain name that matches the domain name of the web link 116A.

[0048] In response to the link module 108 determining that the software application 112B can handle a deep link, the software application 112B can execute as the foreground application of the computing device 102 to handle the deep link. For example, the computing device 102 can start the software application 112B as the foreground application of the computing device 102, or can otherwise cause the software application 112B to become the foreground application of the software application 112B, and the link module 108 can pass the deep link to the software application 112B for handling.

[0049] The software application 112B can output a graphical user interface by sending data to the UI module 106 in response to being started and / or in response to becoming the foreground application of the computing device 102, and the data causes the UID 104 to generate the user interface 114B of the software application 112B and its elements. In response, the UI module 106 can output instructions and information to the UID 104 based on the information received from the software application 112B, and the instructions and information cause the UID 104 to display the user interface 114B.

[0050] Accordingly, software application 112B can receive a deep link from link module 108 and can execute code associated with the handling of the deep link to navigate to the content specified by the deep link in software application 112B. As described above, the manifest of a software application can specify an association between deep links handled by the software application and executable code, such as one or more functions, for handling the deep link. Since software application 112B includes code for handling deep links added by code injection module 122 of computing system 120, software application 112B can execute such code added by code injection module 122 to handle the deep link.

[0051] Software application 112B can execute the code added by code injection module 122 to determine one or more interactions with user interface 114B of software application 112B to perform to navigate to the specific content specified by the deep link in software application 112B. In some examples, software application 112B can include, such as in the app bundle of software application 112B, an indication of one or more interactions with user interface 114B to perform to navigate to the specific content specified by the deep link in software application 112B. Such an indication of one or more interactions can be referred to as a gesture script.

[0052] In some examples, software application 112B can send, via a network (e.g., network 130), a request to an external computing system (e.g., computing system 120) for one or more interactions with user interface 114B of software application 112B to perform to navigate to the specific content specified by the deep link in software application 112B and can receive, as a response via the network, an indication (e.g., a gesture script) of one or more interactions with user interface 114B. For example, software application 112B can send a request indicating the identity of software application 112B, an indication of the deep link (e.g., the URL of the deep link), or any other suitable information to the external computing system and can receive, as a response, an indication of one or more interactions with user interface 114B to perform.

[0053] In some examples, software application 112B can also receive from the external computing system information extracted from the deep link, which can be used by software application 112B to navigate to the specific content indicated by the deep link. For example, if the deep link includes an item number that can be used by software application 112B to search for an item in software application 112B, software application 112B can also receive the item number extracted from the deep link from the external computing system.

[0054] In some examples, the software application 112B may send a request to the operating system of the computing device 102 for one or more interactions with the user interface 114B of the software application 112B to perform to navigate to the specific content specified by the deep link, and may receive an indication (e.g., a gesture script) of one or more interactions with the user interface 114B from the operating system in response. Such receipt of an indication of one or more interactions with the user interface 114B may be referred to as gesture injection.

[0055] In response to determining one or more interactions with the user interface 114B of the software application 112B, the software application 112B may execute the code added by the code injection module 122 to perform one or more interactions with the user interface of the software application 112B. The computing device 102 may programmatically perform one or more interactions with the user interface 114B of the software application 112B. That is, the computing device 102 may automatically interact with the user interface of the software application 112B to navigate to the specific content of the software application 112B without any user interaction with the user interface 114B of the software application 112B.

[0056] Thus, the software application 112B may interact with the user interface 114B of the software application 112B to navigate the user interface 114B to the specific content specified by the deep link. For example, the software application 112B may be able to select and / or deselect buttons in the user interface 114B of the software application 112B, enter text into a text field of the user interface 114B of the software application 112B, scroll through a list in the user interface 114B of the software application 112B, perform gestures such as a swipe gesture at the user interface 114B of the software application 112B, provide voice input such as a voice command at the user interface 114B of the software application 112B, or perform any other interaction with the user interface 114B of the software application 112B.

[0057] In this way, the software application 112B may be able to navigate to the specific content indicated by the deep link. In Figure 1 the example, if the deep link is a link to an item such as a computer being sold by an e-commerce store, the software application 112B may be able to navigate to the product page of that item in the software application 112B.

[0058] Figure 2 is a block diagram showing an example computing device 202 in accordance with one or more aspects of the present disclosure. Figure 2 The computing device 202 of Figure 1 is an example of the computing device 102 of Figure 1is only one specific example of computing device 102, and many other examples of computing device 102 may be used in other instances. In Figure 2 the example of, computing device 202 may be a mobile computing device (e.g., a smart phone) or any other computing device. Figure 2 Computing device 202 may include a subset of the components included in example computing device 202, or may include Figure 2 additional components not shown in

[0059] As Figure 2 shown in the example of, computing device 202 includes a user interface device 204 (“UID 204”), one or more processors 240, one or more input devices 242, one or more communication units 244, one or more output devices 246, and one or more storage devices 248. One or more storage devices 248 of computing device 202 also include an operating system 254, a linking module 208, software applications 212, and a wireline drive model 256.

[0060] Communication channel 250 may interconnect each of components 240, 242, 244, 246, 248, and 204 for inter-component communication (physically, communicatively, and / or operationally). In some examples, communication channel 250 may include a system bus, a network connection, an inter-process communication data structure, or any other method for transferring data.

[0061] One or more input devices 242 of computing device 202 may be configured to receive input. Examples of input are tactile input, audio input, and video input. In one example, one or more input devices 242 of computing device 202 include a presence-sensitive display, a touch-sensitive screen, a mouse, a keyboard, a voice response system, a video camera, a microphone, or any other type of device for detecting input from a human or a machine.

[0062] One or more output devices 246 of computing device 202 may be configured to generate output. Examples of output are tactile output, audio output, and video output. In one example, one or more output devices 246 of computing device 202 include a presence-sensitive organic light-emitting diode (OLED) display, a sound card, a video graphics adapter card, speakers, a monitor, a presence-sensitive liquid crystal display (LCD), or any other type of device for generating output to a human or a machine.

[0063] One or more communication units 244 of the computing device 202 may be configured to communicate with external devices via one or more wired and / or wireless networks by transmitting and / or receiving network signals over the one or more networks. Examples of the one or more communication units 244 include network interface cards (e.g., such as Ethernet cards), optical transceivers, radio frequency transceivers, GPS receivers, or any other type of device that can send and / or receive information. Other examples of the one or more communication units 244 may include shortwave radios, cellular data radios, wireless network radios, and universal serial bus (USB) controllers.

[0064] In some examples, the UID 204 of the computing device 202 may include the functionality of one or more input devices 242 and / or one or more output devices 246. In Figure 2 the example, the UID 204 may be or may include a presence-sensitive input device. In some examples, a presence-sensitive input device may detect an object located at and / or near the screen. As an example range, a presence-sensitive input device may detect an object such as a finger or a stylus within 2 inches or less of the screen. A presence-sensitive input device may determine the location on the screen at which the object is detected (e.g., (x,y) coordinates). In another example range, a presence-sensitive input device may detect an object within 6 inches or less of the screen, and other ranges are possible. A presence-sensitive input device may use capacitance, inductance, and / or optical recognition techniques to determine the location on the screen selected by the user's finger. In some examples, the presence-sensitive input device also uses tactile, audio, or visual stimuli described with respect to one or more output devices 246 to provide output to the user, for example, at the display. In Figure 2 the example, the UID 204 may present a user interface.

[0065] Although shown as an internal component of the computing device 202, the UID 204 also represents an external component that shares a data path for sending and / or receiving input and output with the computing device 202. For example, in one example, the UID 204 represents a built-in component (e.g., a screen on a mobile phone) that is located inside the external enclosure of the computing device 202 and is physically connected to the external enclosure of the computing device. In another example, the UID 204 represents an external component (e.g., a monitor, a projector, etc.) that is located outside the enclosure of the computing device 202 and is physically separated from the enclosure of the computing device and shares a wired and / or wireless data path with the tablet computer.

[0066] One or more storage devices 248 within computing device 202 may store information for processing during operation of computing device 202. In some examples, the one or more storage devices 248 are temporary memories, which means that the primary purpose of the one or more storage devices 248 is not long-term storage. The one or more storage devices 248 on computing device 202 may be configured as volatile memory for short-term storage of information and thus do not retain stored content in the event of a power outage. Examples of volatile memory include random access memory (RAM), dynamic random access memory (DRAM), static random access memory (SRAM), and other forms of volatile memory known in the art.

[0067] In some examples, the one or more storage devices 248 also include one or more computer-readable storage media. The one or more storage devices 248 may be configured to store a larger amount of information than volatile memory. The one or more storage devices 248 may also be configured as non-volatile memory space for long-term storage of information and retain the information after power-on / power-off cycles. Examples of non-volatile memory include magnetic hard disks, optical disks, floppy disks, flash memory, or forms of electrically programmable read-only memory (EPROM) or electrically erasable programmable (EEPROM) memory. The one or more storage devices 248 may store program instructions and / or information (e.g., data) associated with operating system 254, link module 208, software application 212, and wireline drive model 256.

[0068] One or more processors 240 may implement functionality and / or execute instructions within computing device 202. For example, the one or more processors 240 on computing device 202 may receive and execute instructions stored by the one or more storage devices 248 that perform the functionality of operating system 254, link module 208, software application 212, and wireline drive model 256.

[0069] The operating system 254, link module 208, software application 212, and wireline drive model 256 executed at the one or more processors 240 are described below. It should be understood that the one or more processors 240 are configured to execute the operating system 254, link module 208, software application 212, and wireline drive model 256 to perform the functionality of the operating system 254, link module 208, software application 212, and wireline drive model 256 described below. That is, the one or more processors 240 are configured to execute the instructions of the operating system 254, link module 208, software application 212, and wireline drive model 256 to perform the functionality of the operating system 254, link module 208, software application 212, and wireline drive model 256 described below.

[0070] The software application 212 may include software applications 212A and 212B, which are examples of software applications 112A and 112B respectively, and one or more processors 240 are configured to execute software applications 212A and 212B. For example, one or more processors 240 are configured to execute software application 212A to output a deep link to specific content in software application 212B. For example, software application 212A may be a web browser application, a messaging application, a social media application, or any other application that can generate a deep link to another software application in software application 212. Figure 1 The software application 212A may generate a deep link in response to a user input that selects a web link (i.e., URL) displayed in the user interface of the software application 212A. In an example where the software application 212A is a web browser, the software application 212A may present a web page that includes one or more web links to other web pages. If the user provides a user input such as a tap gesture to select a web link included in the web page, the software application 212A may send an indication of the selected web link, such as an indication of the URL of the selected web link, as a deep link generated by the software application 212A to the link module 208.

[0071] The operating system 254 may include a link module 208, which is an example of the link module 108. One or more processors 240 may be configured to receive an indication of a deep link from the software application 212A, such as an indication of a web link selected at the software application 212A, and determine whether another software application in the software application 212 can handle the deep link. If the link module 208 determines that another application in the software application 212 can handle the deep link, the link module 208 may pass the deep link to the application that can handle the deep link.

[0072] The operating system 254 may include a link module 208, which is an example of the link module 108. One or more processors 240 may be configured to receive an indication of a deep link from the software application 212A, such as an indication of a web link selected at the software application 212A, and determine whether another software application in the software application 212 can handle the deep link. If the link module 208 determines that another application in the software application 212 can handle the deep link, the link module 208 may pass the deep link to the application that can handle the deep link. Figure 1 The operating system 254 may include a link module 208, which is an example of the link module 108. One or more processors 240 may be configured to receive an indication of a deep link from the software application 212A, such as an indication of a web link selected at the software application 212A, and determine whether another software application in the software application 212 can handle the deep link. If the link module 208 determines that another application in the software application 212 can handle the deep link, the link module 208 may pass the deep link to the application that can handle the deep link.

[0073] In some examples, each software application in software applications 212 can specify the type of deep link to be executed in response by the corresponding application. Each software application in software applications 212 can be associated with a manifest that lists the types of deep links to which the corresponding application responds. For example, software application 212B can include or be associated with manifest 226, which lists the types of deep links that software application 212B can handle. Thus, one or more processors 240 can be configured to execute link module 208 to determine, based on the manifest of each software application in software applications 212, whether another application in software applications 212. Each software application in software applications 212 can specify the type of deep link that can be handled by the corresponding application, such as by including an intent filter in its associated manifest that has a path and / or pattern of a deep link to be handled by the software application. For example, the manifest of a software application can include an intent filter that specifies one or more domain names, and the one or more domain names can indicate that the software application is capable of handling a deep link that is a web link (e.g., a hypertext transfer protocol link) to a web site at the one or more domain names.

[0074] Software application 212B can be a software application that has been modified by an application publishing platform (e.g., computing system 120) to automatically handle deep links. The application publishing platform can modify software application 212B to handle deep links by: creating or modifying manifest 226 of the software application to include one or more intent filters that indicate deep links to be handled by software application 212B, and injecting script execution engine 224 into software application 212B to handle the deep links specified by manifest 226.

[0075] Script execution engine 224 is code that enables software application 212B to handle deep links by programmatically interacting with the user interface of software application 212B to navigate to specific content indicated by the deep link within software application 212B. Script execution engine 224 can enable software application 212B to programmatically interact with user interface controls (e.g., buttons, menus, etc.), enter text into text fields (e.g., search fields), navigate through the screens of the software application, and / or otherwise interact with the user interface of software application 212B in a manner similar to a user providing user input at an input device to interact with the user interface of software application 212B. Such interaction with the user interface of the software application is referred to herein as a gesture.

[0076] The script execution engine 224 may also include code for retrieving or otherwise determining an interaction sequence with the user interface of the software application 212B, and the script execution engine 224 may execute the interaction sequence to navigate to the specific content indicated by the deep link in the software application 212B. That is, because the script execution engine 224 can programmatically execute any interaction pattern or interaction sequence with the user interface of the software application 212B, the script execution engine 224 can receive and / or determine an indication of a specific interaction sequence with the user interface of the software application 212B, and the script execution engine 224 can execute the specific interaction sequence to navigate the software application 212B to the content specified by the deep link. Thus, the script execution engine 224 can programmatically interact with the user interface of the software application 212B according to the one or more received and / or determined interactions to navigate to or otherwise present the content specified by the deep link.

[0077] The script execution engine 224 may not be designed for a particular software application to perform a particular set of interactions with the user interface of the software application to navigate to or present the content specified by a deep link handled by the software application. Instead, the script execution engine 224 may be capable of performing any programmed interaction sequence with the user interface of the software application, similar to the way a user can provide user input to interact with the user interface of the software application. To enable the script execution engine 224 to perform an interaction sequence specific to the software application 212B to navigate to or present the content specified by a deep link handled by the software application 212B, the script execution engine 224 includes code for communicating with a computing system, such as the computing system 120, to request and receive from the computing system a gesture script 225 specific to the software application 212B. The gesture script 225 may indicate one or more interaction sequences with the user interface of the software application 212B to perform one or more actions and / or navigate to the specific content indicated by a deep link handled by the software application 212B.

[0078] A gesture script, such as the gesture script 225, may be specific to a particular software application, such as specific to the software application 212B, and may specify a sequence of specific actions (e.g., gestures) to be performed by the script execution engine 224 on a specific view of the user interface of the software application 212B. In some examples, the gesture script 225 may use a corresponding view identifier to identify the view. Each specific action may include selecting a specific user interface element (e.g., a specific button or a specific text field), scrolling in a specific direction (e.g., up, down, left, or right) and / or a specific distance (e.g., in terms of pixels), a swipe gesture that may start and stop at a specified location on the screen, specific characters for entry into a text field via an on-screen virtual keyboard, and / or any other gesture that can be performed by a user of the software application.

[0079] The script execution engine 224 may include code that exposes an interface that provides details about the current screen of the user interface of a software application, such as a view hierarchy, an accessibility tree, or a screenshot of the user interface. The script execution engine 224 may also include code that exposes an interface that provides details about views on the current screen of the user interface of a software application, such as resource identifiers, view identifiers, text in the views, etc. Exposing such interfaces may enable the script execution engine 224 to identify views specified by gesture scripts.

[0080] The script execution engine 224 may also include an action actuator that exposes an interface that can perform certain interactions with the user interface of a software application - such as selection, scrolling, or text entry - given view information or screen coordinates, and can return a status indicating whether certain actions were successfully performed. Such action actuators may thus enable the script execution engine 224 to perform actions specified by the gesture script on the corresponding views specified by the gesture script 225.

[0081] The manifest 226 of the software application 212B may declare the types of deep links that the software application 212B can handle. Specifically, the manifest 226 may declare deep links associated with the script execution engine 224 such that the script execution engine 224 can execute to handle a deep link by navigating to specific content indicated by the deep link in the software application 212B.

[0082] In an example where the deep link is in the form of a Uniform Resource Identifier (URI) or a Uniform Resource Locator (URL), the manifest 226 may declare one or more intent filters having the path and / or pattern of the URI and / or URL to be handled by the script execution engine 224 of the software application 212B. For example, each intent filter may specify one or more domain names, such as "www.example.com" or "altostrat.com", to indicate that the software application 212B is capable of handling a deep link that is a web link to a web site at one of these one or more domain names. In another example, the intent filter may also specify one or more paths and / or path patterns, such as " / product". By specifying one or more paths and / or path patterns, the manifest 226 may indicate that the software application 212B is capable of handling a deep link that is a web link to a specific path and / or path pattern at the specified domain name.

[0083] The following are example intent filters in the manifest 226 for declaring deep links to be handled by the software application 212B:

[0084] In this intent filter example, the intent filter can specify that the software application 212B can handle both http and https links to the domain "www.example.com". In this example, the intent filter also specifies the path " / products.*" to specify that the software application 212B can handle links to paths in the domain "www.example.com" that include the path " / products" as deep links, but the software application 212B may not handle links to paths in the domain "www.example.com" that do not include the path " / products" as deep links.

[0085] One or more processors 240 can be configured to receive an indication of a deep link from the software application 212A, and can be configured to execute the link module 208 to determine whether the software application 212B can handle the deep link based on the manifest 226. The link module 208 can determine whether the software application 212B can handle the deep link by determining whether the deep link matches the path pattern and / or patterns of the URIs and / or URLs indicated by the manifest 226.

[0086] For example, if the deep link is a URL that starts with "http: / / www.example.com / products", the link module 208 can determine that the deep link matches the intent filter of the manifest 226, which indicates the software application 212B as handling the deep link, which is an http link to the domain name "www.example.com", and the intent filter specifies a path that starts with " / products". Thus, the link module 208 can pass the deep link to the software application 212B.

[0087] One or more processors 240 can be configured to, in response to the link module 208 determining that the application 212B can handle the deep link, execute the software application 212B as the foreground application of the computing device 202 to handle the deep link. For example, the operating system 254 can launch the software application 212B, or can switch the software application 212B to the foreground application, such that the user interface of the software application 212B is displayed by one or more output devices 246.

[0088] One or more processors 240 may be configured to execute the link module 208 to send the deep link to the software application 212B in response to the link module 208 determining that the application 212B is capable of handling the deep link. For example, the link module 208 may use any suitable messaging mechanism provided by the operating system 254 to pass an indication of the deep link to the software application 212B, such as by passing the URI or URL of the deep link to the software application 212B. One or more processors 240 may be configured to execute the software application 212B to receive the deep link from the link module 208 and execute code such as the script execution engine 224 in the software application 212B associated with the handling of the deep link to navigate to the content specified by the deep link in the software application 212B. The script execution engine 224 may determine one or more interactions with the user interface of the software application 212B to perform to navigate to the specific content specified by the deep link in the software application 212B. In some examples, the script execution engine 224 may send a request for a gesture script 225 associated with the software application 212B to an external system (e.g., computing system 120) via a network. The gesture script 225 associated with the software application 212B may indicate a series of interactions that the script execution engine 224 may perform at the user interface of the software application 212B to perform to navigate to the specific content specified by the deep link in the software application 212B. Such receipt of an indication of one or more interactions with the user interface may be referred to as gesture injection.

[0089] To send a request for the gesture script 225 associated with the software application 212B, the script execution engine 224 may send a POST request that specifies the package name of the software application 212B, the version code indicating the version of the software application 212B installed at the computing device 202, and / or an indication of a feature associated with the gesture script, such as deep link automation. In response, the software application 212B may receive the gesture script 225 that indicates a series of interactions that the script execution engine 224 may perform at the user interface of the software application 212B to perform to navigate to the specific content specified by the deep link in the software application 212B.

[0090] In some examples, the gesture script 225 associated with the software application 212B for automatically handling deep links can be located on the website specified by the deep link. For example, a website associated with a software application that includes a script execution engine 224 can store the corresponding gesture script for the associated software application at a common location or path on the website, such as stored in the path " / gesturescripts". Thus, the script execution engine 224 can be able to communicate with the website associated with the software application 212B to retrieve the gesture script 225 for the software application 212B at the common location of the website associated with the software application 212B.

[0091] In some examples, as an alternative or supplement to sending a request for the gesture script 225 associated with the software application 212B to an external system, the script execution engine 224 can send a request for the gesture script associated with the software application 212B to the operating system 254. For example, when downloading the software application 212B from an application publishing platform, the operating system 254 can also download one or more gesture scripts associated with the software application 212B. The script execution engine 224 can receive the requested gesture script from the operating system 254 in response to sending a request for the gesture script associated with the software application 212B.

[0092] One or more processors 240 can be configured to execute code added to the software application 212B by an external computing system in response to determining one or more interactions with the user interface of the software application 212B to perform one or more interactions with the user interface of the software application 212B. For example, one or more processors 240 can be configured to execute the script execution engine 224 to perform a sequence of interactions with the user interface of the software application 212B according to the received gesture script 225 to programmatically interact with the user interface of the software application 212B to navigate to specific content specified by the deep link of the software application 212B.

[0093] By programmatically interacting with the user interface of the software application 212B, the script execution engine 224 can execute a gesture sequence to interact with the user interface of the software application 212B without any user interaction with the user interface of the software application 212B. For example, the script execution engine 224 can be able to select and / or deselect buttons in the user interface of the software application 212B, enter text into a text field in the user interface of the software application 212B, scroll through a list in the user interface of the software application 212B, perform gestures such as a swipe gesture at the user interface of the software application 212B, provide voice input such as a voice command at the user interface of the software application 212B, or perform any other interaction with the user interface of the software application 212B.

[0094] The following is an example of pseudocode for a script execution engine 224 to obtain a gesture script such as a gesture script 225 and execute the gestures specified by the gesture script:

[0095] In the above example pseudocode, the script execution engine 224 can obtain a gesture script from a computing system such as the computing system 120, and the gesture script specifies a sequence of gestures to be executed at the user interface of the software application 212B.

[0096] In some examples, the gesture script 225 may also include logic for extracting one or more search terms that the script execution engine 224 can enter into a search field from a deep link. That is, the gesture script 225 may include logic for extracting information from any deep link supported by the software application 212B, and the information can be used as one or more search terms, and the software application 212B can programmatically enter the one or more search terms into the search field of the software application 212 to navigate to the specific content indicated by the deep link in the software application 212.

[0097] In some examples, the logic in the gesture script 225 can extract the parameter values of one or more parameters in the deep link handled by the software application 212B as one or more search terms to be entered into the search field. The logic in the gesture script 225 can heuristically determine one or more parameters that can indicate or be associated with a product or item identifier, and can extract the parameter values of the one or more parameters. For example, the logic in the gesture script 225 can search the deep link for parameters that may include the word "item" or "product" in the parameter name, and can extract the parameter values of the identified one or more parameters as search terms to be entered into the search field.

[0098] It can be seen that the script execution engine 224 can handle the deep link by executing the sequence of gestures indicated by the gesture script 225 to navigate from the root view (e.g., the home screen) of the software application 212B to the search field of the software application 212B. Therefore, the script execution engine 224 can execute gestures to reach the search field, use the logic in the gesture script to parse the deep link to extract one or more search terms from the deep link, enter the one or more search terms into the search field, and select the "enter" button for the search functionality of the software application 212B to search for the entered search terms in the software application 212B, thereby causing the software application 212B to navigate to the screen associated with the deep link in the software application 212B.

[0099] In some examples, instead of programmatically executing a gesture sequence at the user interface of software application 212B according to gesture script 225, script execution engine 224 can communicate with a wireline drive model 256, which can provide an interaction sequence for execution with the user interface of software application 212B to the script execution engine 224.

[0100] The wireline drive model 256 can be a shared library or a shared service trained by machine learning to determine an interaction sequence with the user interface of a software application for any given software application to find a search field of the software application and enter a search term into the search field. That is, the wireline drive model 256 can be trained specifically for a particular software application. Alternatively, the wireline drive model 256 can be capable of determining an interaction sequence with the user interface of any software application to find a search field of the software application and enter a search term into the search field.

[0101] The wireline drive model 256 can include one or more neural networks trained via imitation learning, where the wireline drive model 256 can learn by being demonstrated a task. The wireline drive model 256 can be trained to simulate navigating through the screens of a software application to find a search field of the software application. For example, gestures for interacting with the user interfaces of a wide variety of software applications to reach the search field of each software application in the software application can be demonstrated to the wireline drive model 256, such that the wireline drive model 256 can learn, based on the demonstration, gestures for performing to reach the search field of a software application that is not part of the demonstration.

[0102] For each of the multiple applications demonstrated, the training data for the wireline drive model 256 can include: a sequence of gestures to be executed to interact with the user interface of the application to reach the search field of the application and enter text into the search field, a sequence of screenshots of the user interface of the application corresponding to the execution of each gesture in the gestures, the view hierarchy of the application, etc. Thus, at each step, the training data can demonstrate the gestures executed for a particular screen of the application, the screen to which the application is navigated due to the gesture, etc., such that the wireline drive model 256 can learn how to navigate different user interfaces of different applications to reach the search field and enter text into the search field.

[0103] One or more processors 240 may be configured to execute a script execution engine 224 that may communicate with a by-wire drive model 256 to receive an indication of a gesture sequence from the by-wire drive model 256 for execution at a user interface of a software application 212B, starting from a home screen of the software application 212B and reaching a search field and entering one or more search terms. The script execution engine 224 may, in response to the software application 212B receiving a deep link to be handled, send an indication of the view hierarchy of the software application 212B and a screenshot of the home screen of the software application 212B to the by-wire drive model 256.

[0104] The by-wire drive model 256 may receive an indication of the view hierarchy of the software application 212B and a screenshot of the home screen of the software application 212B, and may output an indication of a gesture to be executed at the home screen of the software application 212B. The indication of the gesture may, for example, indicate a particular type of gesture (e.g., a tap gesture, a swipe gesture, etc.), an indication of a user interface control at which the gesture is to be executed, one or more pixel positions at which the gesture is to be executed, etc. In some examples, the by-wire drive model 256 may output an indication of the gesture in the form of a macro action that may specify an element (e.g., a particular user interface control), an action (e.g., the type of gesture to be executed at the user interface and / or at the specified element), and one or more arguments for the action (e.g., search terms to be entered into a text field).

[0105] The script execution engine 224 may receive the indication of the gesture and may, in response, execute the indicated gesture. The script execution engine 224 may obtain a screenshot of the resulting user interface (e.g., resulting screen) of the software application 212B and may send the screenshot and an indication of the position of the current screen to the by-wire drive model 256, and the by-wire drive model 256 may, in response, output an indication of another gesture to be executed at the user interface of the software application 212B. The script execution engine 224 may receive the indication of the gesture and may, in response, execute the indicated gesture. The script execution engine 224 and the by-wire drive model 256 may repeat such a process until the script execution engine 224 navigates the software application 212B to reach the search field and enter text into the search field.

[0106] Figure 3 is a block diagram illustrating an example computing system in accordance with one or more aspects of the present disclosure. Figure 3 The computing system 320 hereinafter serves as Figure 1 an example of the computing system 120. Figure 3Illustrates only one specific example of computing system 320, and many other examples of computing system 320 can be used in other instances and can include a subset of the components included in example computing system 320, or can include Figure 3 additional components not shown in. For example, computing system 320 can include a server cluster, and each server that makes up the server cluster of computing system 320 can include all or some of the components described herein in Figure 3 to perform the techniques disclosed herein.

[0107] As Figure 3 shown in the example of, computing system 320 includes one or more processors 340, one or more communication units 342, and one or more storage devices 348. One or more storage devices 348 include software application 312 as an example of software application 112B of Figure 1 and Figure 2 software application 212B of, code injection module 322 as an example of code injection module 122 of Figure 1 gesture module 332, gesture retrieval module 334, model trainer 338, wire drive model 356 as an example of wire drive model 256 of Figure 1 and gesture data repository 336.

[0108] One or more processors 340 can implement the functionality associated with computing system 320 and / or execute instructions associated with the computing system. Examples of one or more processors 340 include an application processor, a display controller, an auxiliary processor, one or more sensor hubs, and any other hardware configured to act as a processor, processing unit, or processing device. Code injection module 322, gesture module 332, gesture retrieval module 334, and model trainer 338 can be operable by one or more processors 340 to perform various actions, operations, or functions of computing system 320. For example, one or more processors 340 of computing system 320 can retrieve and execute instructions stored by one or more storage devices 348, and the instructions cause one or more processors 340 to perform the operations of code injection module 322, gesture module 332, gesture retrieval module 334, and model trainer 338. When executed by one or more processors 340, the instructions can cause computing system 320 to store information in one or more storage devices 348.

[0109] One or more communication units 342 of computing system 320 may communicate with external devices via one or more wired and / or wireless networks by transmitting and / or receiving network signals over the one or more networks. Examples of one or more communication units 342 include network interface cards (e.g., such as an Ethernet card), optical transceivers, radio frequency transceivers, global positioning satellite (GPS) receivers, or any other type of device that can send and / or receive information. Other examples of one or more communication units 342 may include shortwave radios, cellular data radios, wireless network radios, and universal serial bus (USB) controllers.

[0110] Communication channel 350 may interconnect each of components 340, 342, and 348 for inter-component communication (physically, communicatively, and / or operationally). In some examples, communication channel 350 may include a system bus, network connection, interprocess communication data structure, or any other means for transferring data.

[0111] One or more storage devices 348 within computing system 320 may store information for processing during operation of computing system 320 (e.g., computing system 320 may store data accessed by code injection module 322 and gesture module 332 during execution at computing system 320). In some examples, one or more storage devices 348 are temporary memories, which means the primary purpose of one or more storage devices 348 is not long-term storage. In this example, one or more storage devices 348 may be configured as volatile memories for short-term storage of information and thus do not retain stored content in the event of a power outage. Examples of volatile memories include random access memory (RAM), dynamic random access memory (DRAM), static random access memory (SRAM), and other forms of volatile memory known in the art.

[0112] In some examples, one or more storage devices 348 may also include one or more computer-readable storage media. In some examples, one or more storage devices 348 include one or more non-transitory computer-readable storage media. One or more storage devices 348 may be configured to store a larger amount of information than is typically stored by volatile memory. One or more storage devices 348 may also be configured as non-volatile memory space for long-term storage of information and retain information after power-on / power-off cycles. Examples of non-volatile memory include magnetic hard disks, optical disks, floppy disks, flash memory, or in the form of electrically programmable memory (EPROM) or electrically erasable programmable (EEPROM) memory. One or more storage devices 348 may store program instructions and / or information (e.g., data) associated with the code injection module 322, gesture module 332, gesture retrieval module 334, model trainer 338, and gesture data repository 336. One or more storage devices 348 may include a memory configured to store data or other information associated with the code injection module 322, gesture module 332, gesture retrieval module 334, model trainer 338, and gesture data repository 336.

[0113] As part of the application publishing process, a developer of a software application, such as software application 312, may upload their software application onto the computing system 320 to publish the software application to an application publishing platform, such as an app store. As part of the application publishing process, the developer may choose to allow the computing system 320 to automatically modify the software application before publishing the software application to add support for handling deep links.

[0114] If the developer of software application 312 chooses to allow the computing system 320 to automatically modify software application 312 to add support for handling deep links, one or more processors 340 may be configured to execute the code injection module 322 to modify software application 312 by performing code injection to add code, such as executable code, object code, etc., to software application 312, which can be executed to perform one or more actions for handling deep links to specific content within software application 312. For example, the code injection module 322 may decompose the package of software application 312 into one or more executable files, perform code injection to add code to the one or more executable files, reassemble the executable files that have had code injected back into a package, and sign the package of software application 312 using a cryptographic key associated with the developer of software application 312. Thus, the signed package of software application 312 may be ready to be published to the application publishing platform for download by computing devices.

[0115] One or more processors 340 may be configured to execute a code injection module 322 to inject a script execution engine 324 into a software application 312. The script execution engine 324 is code that enables the software application 312 to handle deep links to navigate to specific content indicated by the deep link within the software application 312 by programmatically interacting with the user interface of the software application 312. The script execution engine 324 may enable the software application 312 to programmatically interact with user interface controls (e.g., buttons, menus, etc.), enter text into text fields (e.g., search fields), navigate through the screens of the software application, and / or otherwise interact with the user interface of the software application 312 in a manner similar to a user providing user input at an input device to interact with the user interface of the software application 312. Such interactions with the user interface of the software application are referred to herein as gestures.

[0116] The script execution engine 324 may further include code for retrieving or otherwise determining an interaction sequence with the user interface of the software application 312, which the script execution engine 324 may execute to navigate to specific content indicated by the deep link within the software application 312. That is, because the script execution engine 324 may programmatically execute any interaction pattern or sequence of interactions with the user interface of the software application 312, the script execution engine 324 may receive and / or determine an indication of a specific interaction sequence with the user interface of the software application 312, and the script execution engine 324 may execute the specific interaction sequence in order to navigate the software application 312 to the content specified by the deep link. Accordingly, the script execution engine 324 may programmatically interact with the user interface of the software application 312 based on the one or more received and / or determined interactions in order to navigate to or otherwise manifest the content specified by the deep link.

[0117] In some examples, the script execution engine 324 includes code for communicating with a computing system, such as the computing system 320, to request and receive a gesture script from the computing system, the gesture script indicating one or more interaction sequences with the user interface of the software application 312 in order to perform one or more actions and / or navigate to specific content indicated by the deep link.

[0118] Gesture scripts can be specific to a particular software application, such as software application 312, and can specify a sequence of specific actions (e.g., gestures) to be performed by a script execution engine 324 on a particular view of the user interface of the software application 312. In some examples, a gesture script can identify a view using a corresponding view identifier. Each specific action can include selecting a specific user interface element, scrolling in a specific direction (e.g., up, down, left, or right) and / or a specific distance (e.g., in terms of pixels), a swipe gesture that can start and stop at a specified location on the screen, and / or any other gesture that can be performed by a user of the software application.

[0119] The script execution engine 324 can include code that exposes an interface that provides details about the current screen of the user interface of the software application, such as a view hierarchy, an accessibility tree, or a screenshot of the user interface. The script execution engine 324 can also include code that exposes an interface that provides details about the views on the current screen of the user interface of the software application, such as resource identifiers, view identifiers, text in the views, etc. Exposing such interfaces can enable the script execution engine 324 to identify the views specified by the gesture script.

[0120] The script execution engine 324 can also include an action actuator that exposes an interface that can perform certain interactions with the user interface of the software application - such as selecting, scrolling, or entering text - given view information or screen coordinates, and can return a status of whether certain actions were successfully performed. Such an action actuator can thus enable the script execution engine 324 to perform the actions specified by the gesture script on the corresponding views specified by the gesture script.

[0121] The following is example pseudocode for the script execution engine 324 to obtain a gesture script and execute the gestures specified by the gesture script:

[0122] One or more processors 340 can be configured to execute a code injection module 322 to also modify the software application 312 by modifying and / or creating a manifest 326 of the software application 312 to declare the types of deep links that the software application 312 can handle. In some examples, as part of the publishing process of the software application 312, a developer of the software application 312 can upload the manifest 326 along with the software application 312, and the code injection module 322 can modify the manifest 326 to declare the types of deep links that the software application 312 can handle.

[0123] One or more processors 340 may be configured to execute a code injection module 322 to generate and / or modify a manifest 326 of a software application 312 to declare deep links handled by the software application 312 and associate the declared deep links with a script execution engine 324. By declaring the deep links associated with the script execution engine 324, the script execution engine 324 can thus be executed to handle the deep links by navigating to the specific content indicated by the deep links.

[0124] In an example where the deep link is in the form of a Uniform Resource Identifier (URI) or a Uniform Resource Locator (URL), one or more processors 340 may be configured to execute a code injection module 322 to add to the manifest 326 of the software application 312 one or more intent filters having a path and / or pattern of a URI and / or URL handled by the software application 312. For example, the code injection module 322 may specify in the manifest of the software application 312 one or more domain names, such as "www.example.com" or "altostrat.com", to indicate that the software application 312 is capable of handling deep links that are web links to web sites at the one or more domain names. In another example, the code injection module 322 may specify in the manifest of the software application one or more paths and / or path patterns, such as " / product". By specifying one or more paths and / or path patterns, the manifest 326 can indicate that the software application 312 is capable of handling deep links that are web links to a specific path and / or path pattern at the specified domain name.

[0125] The following are example intent filters that the code injection module 322 may add to the manifest 326 to declare deep links handled by the software application 312:

[0126] In this example of an intent filter, the intent filter may specify that the software application 312 can handle both http links and https links to the domain "www.example.com". In this example, the intent filter also specifies the path " / products.*" to specify that the software application 312 can handle as deep links links to paths in the domain "www.example.com" that include the path " / products", and that the software application 312 may not handle as deep links links to paths in the domain "www.example.com" that do not include the path " / products".

[0127] The code injection module 322 can utilize various different techniques to determine how to form intent filters in the manifest 326 to declare deep links handled by the software application 312. In some examples, as part of registering with the app distribution platform, the developer of the software application 312 can provide or register domain names owned by and / or associated with the developer to the computing system 320 for using the app distribution platform to distribute the software application 312. Accordingly, the code injection module 322 can add one or more intent filters to the manifest 326 that specify one or more of the domain names owned by and / or associated with the developer as URLs to be handled by the software application 312.

[0128] In some examples, the code injection module 322 can crawl websites at one or more domain names to determine paths and / or path patterns of one or more domain names that the software application 312 can be capable of handling as deep links. The code injection module 322 can crawl websites to infer path patterns that can be handled as deep links to specific content within the software application 312. In an example where the software application 312 is a shopping app, the code injection module 322 can infer path patterns of links to items for sale. For example, given the domain name "www.example.com", the code injection module 322 can infer that links to products for sale all follow a pattern with the path "www.example.com / products / sale". Accordingly, the code injection module 322 can add an intent filter to the manifest 326 that specifies the domain name "www.example.com" and the path pattern " / products / sale*" to specify that the software application 312 can interpret web links starting with "www.example.com / products / sale" as deep links to specific content within the software application 312.

[0129] In some examples, the code injection module 322 can use advertisement data associated with websites at one or more domain names to determine paths and / or path patterns of one or more domain names that the software application 312 can be capable of handling as deep links. For example, if the software application 312 is a shopping application and if an advertiser associated with the software application 312 advertises one or more products at a search engine associated with the computing system 320, the code injection module 322 can analyze web links to the advertised products to infer path patterns of web links to products for sale. For example, given the domain name "altostrat.com", the code injection module 322 can infer that links to products for sale all follow a pattern with a path of "altostrat.com / items / ". Thus, the code injection module 322 can add an intent filter in the manifest 326 that specifies the domain name "altostrat.com" and the path pattern " / items*" to specify that the software application 312 can interpret web links starting with "www.altostrat.com / items" as deep links to specific content within the software application 312.

[0130] In some examples, the code injection module 322 can receive information from a developer of the software application 312, and the code injection module 322 can use this information to generate intent filters added to the manifest of the software application 312. For example, the developer can provide a domain name, a path, a path pattern, etc., and the code injection module 322 can add an intent filter to the manifest 326 to declare handling deep links specifying the given domain name, path, and / or path pattern.

[0131] In some examples, one or more processors 340 can be configured to execute a gesture module 332 to determine, for a software application such as the software application 312 that has been modified by the computing system 320 to handle deep links, a sequence of one or more interactions with the user interface of the software application for performing an action to navigate to the specific content of the software application that is deep-linked. The gesture module 332 can save the determined sequence of one or more interactions to a gesture script 325, which is Figure 2 an example of the gesture script 225. When the software application is executed later, the software application can perform the one or more interactions determined by the gesture module 332 and indicated in the gesture script 325 to handle the deep link and navigate to the specific content indicated by the deep link.

[0132] In some examples, one or more processors 340 may be configured to execute a gesture module 332 to receive from a developer of a software application 312 an indication of one or more interactions with a user interface of the software application 312 to handle a deep link and navigate to specific content indicated by the deep link. That is, the developer of the software application 312 may be able to specify an interaction with the user interface to be performed to navigate to specific content indicated by a deep link. For example, the computing system 320 may provide a user interface console that enables the developer to interact with the user interface of the software application 312 to navigate to specific content indicated by one or more deep links. The gesture module 332 may record a series of interactions with the software application 312 for navigating to specific content indicated by one or more deep links and may generate a gesture script 325 indicative of the series of interactions with the software application 312.

[0133] In some examples, one or more processors 340 may be configured to execute a gesture module 332 to crawl a user interface of a software application 312 to identify user interface elements of the user interface and actions that can be performed by interacting with the user interface elements. The user interface of the software application 312 may include a view hierarchy or be associated with the view hierarchy, which is a tree structure that defines relationships between views in the user interface and is used to determine the layout and rendering of the user interface of the software application 312. Such views in the view hierarchy may include user interface elements (e.g., buttons, text fields, etc.) and layout containers.

[0134] The gesture module 332 may crawl the view hierarchy of the user interface of the software application 312 to capture identifiers of different activities and elements (e.g., views) encountered in the screen of the user interface. Such identifiers and elements may include information such as view identifiers, resource identifiers, layouts, attributes of views in the view hierarchy, text labels of views, etc.

[0135] The gesture module 332 can use the information captured when crawling the view hierarchy to label the elements encountered when crawling the view hierarchy, such as view identifiers, resource identifiers, text labels of input fields, and the like. For example, the gesture module 332 may encounter an input field with a text label including the word "search", and thus may label the input field as the search field of the software application. In another example, the gesture module 332 may encounter the screen at the root of the view hierarchy of the user interface and may label the screen as the main screen of the software application 312. In another example, the gesture module 332 may encounter a set of input fields with text labels such as "origin", "destination", "arrival date", "departure date", etc., and may label the input fields as travel fields based on the text labels.

[0136] The gesture module 332 can also capture gestures to be performed to traverse the screens of the user interface to navigate through the user interface to reach various elements of the user interface, such as selecting one or more elements, scrolling through one or more screens, and the like. For example, if the first screen of the user interface is linked to the second screen via a button at the bottom of the first screen, the gesture module 332 can capture a scroll gesture for scrolling the first screen down to the button at the bottom of the first screen and a selection gesture for selecting the button that links to the second screen of the user interface. In this way, the gesture module 332 can be capable of capturing or otherwise determining the gestures to be performed on the user interface of the software application 312 for navigating between the screens of the user interface and between different mapped elements of the user interface.

[0137] One or more processors 340 can be configured to execute the gesture module 332 to determine an interaction sequence with the user interface of the software application 312 based on crawling the user interface of the software application 312, so as to perform one or more actions and / or navigate to specific content indicated by a deep link. For example, one or more processors 340 can be configured to execute the gesture module 332 to crawl the user interface of the software application 312 to derive the shortest path (i.e., the minimum number of interactions) from the main screen of the user interface of the software application 312 for entering one or more search terms into the search field of the user interface of the software application 312.

[0138] Depending on the software application, the search field of the software application can be located in different places (e.g., in different views and / or screens). In some examples, the search field can be placed in the main screen, in the navigation drawer, or in a dedicated search page. If the main screen and the search field of the software application have been marked, the gesture module 332 can use the information captured when crawling the view hierarchy to determine the shortest path that starts from the view marked as the main screen and reaches the input field marked as the search field in the software application.

[0139] Accordingly, one or more processors 340 can be configured to execute the gesture module 332 to generate a gesture script 325 that indicates one or more sequences of interactions with the user interface of the software application 312 to perform one or more actions and / or navigate to specific content indicated by a deep link. For example, the gesture script 325 can indicate the sequence of gestures to be performed at the user interface of the software application 312 to navigate from the main screen to the search field. Since the gesture module 332 has crawled the software application 312 to identify the locations of the main screen and the search field of the software application 312 within the view hierarchy, the gesture module 332 can be capable of generating the sequence of gestures to be performed at the user interface of the software application 312 to navigate from the main screen to the search field.

[0140] The gesture script can be specific to a particular software application and can specify a sequence of specific actions (e.g., gestures) to be performed on a specific view, where the view can be identified using a corresponding view identifier. For example, each specific action can include selecting a specific user interface element, scrolling in a specific direction (e.g., up, down, left, or right) and / or a specific distance (e.g., in terms of pixels), a swipe gesture that can start and stop at a specified location on the screen, and / or any other gesture that can be performed by a user of the software application.

[0141] In an example where the gesture module 332 generates a gesture script 325 to navigate to a text input field such as a search field, one or more processors 340 can be configured to execute the gesture module 332 to generate logic for extracting data from a deep link handled by the software application 312 and inputting the extracted data into the text input field to navigate to specific content indicated by one or more deep links. For example, if the gesture script 225 simulates the process of searching for a product or item in the search field of the software application 312, the gesture module 332 can be capable of generating logic for parsing the deep link to extract one or more search terms to be input into the search bar to navigate to the product or item in the software application 312. Accordingly, the gesture module 332 can include such logic in the gesture script 325.

[0142] In an example where the gesture script 325 specifies a gesture sequence for navigating to a search field to search for one or more items or products linked by a deep link, the gesture module 332 can generate logic in the gesture script 325 that extracts parameter values of one or more parameters in the deep link handled by the software application 312 as input to the search field to navigate to one or more search terms for the product or item specified by the deep link in the software application 312. In some examples, the gesture module 332 can include in the gesture script 325 logic that heuristically determines one or more parameters that may indicate a product or item identifier or are associated with a product or item identifier and extracts the parameter values of the one or more parameters. For example, the logic in the gesture script 325 can search for parameters that may include the word "item" or "product" in the parameter name and can extract the parameter values of the identified one or more parameters.

[0143] The logic in the gesture script 325 can also include one or more gestures for inputting the extracted parameter values into the search field and searching for the input text. For example, given a deep link containing "productid=123ABC", the logic in the gesture script 325 can be capable of extracting the parameter value "123ABC" from the parameter "productid" and can include a gesture for inputting the extracted parameter value "123ABC" into the search field.

[0144] In some examples, the gesture module 332 can determine, for each of a plurality of deep links handled by the software application 312, the screen of the software application 312 that is most similar to the content of the web page linked by the deep link. To determine the similarity between the screen of the software application 312 and the content of the web page, the gesture module 332 can crawl the user interface of the software application 312 to different screens of the software application 312 and can generate hashes of screenshots of the screens of the software application 312 and screenshots of the content of the web page to compare the generated hashes to determine the similarity between the screen of the software application 312 and the content of the web page.

[0145] The gesture module 332 can determine, for each of a plurality of deep links and for the corresponding screen of the software application 312 that is determined to be most similar to the content of the web page linked by the deep link, one or more search terms to be input into the search field of the software application 312 that are extracted from the URL of the deep link, and the one or more search terms will cause the search functionality of the software application 312 to navigate to the corresponding screen of the software application 312. For example, the gesture module 332 can attempt to extract different portions of the URL of the deep link as one or more search terms to be input into the search field and input such different portions to determine such a portion of the URL: when the portion is input as one or more search terms in the search field, it will cause the search functionality of the software application 312 to navigate to the corresponding screen of the software application 312.

[0146] The gesture module 332 can heuristically determine a pattern of the portion of the URL of each of the plurality of deep links that causes the search functionality of the software application 312 to navigate to the corresponding screen of the software application 312 when input as one or more search terms in the search field, and can generate a logic for extracting the determined portion of the URL as one or more search terms. Thus, the gesture module 332 can add the logic for extracting the determined portion of the URL as one or more search terms to the gesture script 225.

[0147] For example, the gesture module 332 can determine that the URL of each of the plurality of deep links follows the format "http: / / www.example.com / en-US / products / <item identifier> / view". Thus, the gesture module 332 can generate a logic for extracting the text between "products / " and " / view" in the URL as an item identifier that can be input into the search field, and the item identifier will cause the search functionality of the software application 312 to navigate to the screen of the software application 312 associated with the item linked by the deep link.

[0148] In some examples, one or more processors 340 are configured to train a wireline drive model 356 that can be used by a software application such as software application 312 to determine an interaction sequence with the user interface of the software application for handling a deep link. The wireline drive model 356 can be a shared library or a shared service, and the one or more processors 340 can execute a model trainer 338 to train the wireline drive model 356 using machine learning to determine, for any given software application, an interaction sequence with the user interface of the software application for finding a search field of the software application and entering a search term into the search field. That is, the model trainer 338 can train the wireline drive model 356 without specifically training it for a particular software application. Instead, the model trainer 338 can train the wireline drive model 356 to be able to determine, for any software application, an interaction sequence with the user interface of the software application for finding a search field of the software application and entering a search term into the search field.

[0149] The model trainer 338 can train the wireline drive model 356 via imitation learning, where the wireline drive model 356 can learn by being demonstrated tasks. The model trainer 338 can train the wireline drive model 356 to simulate navigating through the screens of a software application to find a search field of the software application. For example, the model trainer 338 can demonstrate to the wireline drive model 356 gestures for interacting with the user interfaces of a wide variety of software applications to reach the search field of each software application in the software applications, such that the wireline drive model 356 can learn, based on the demonstrations, gestures for performing to reach the search field of a software application that is not part of the demonstrations.

[0150] For each of the multiple applications being demonstrated, the training data for training the gesture-driven model 356 can include: a sequence of gestures to be executed to interact with the user interface of the application to reach the search field of the application and enter text into the search field, a sequence of screenshots of the user interface of the application corresponding to the execution of each gesture in the gesture sequence, the view hierarchy of the application, and so on. Thus, at each step, the training data can be for the gestures executed for a particular screen demonstration of the application, the screen to which the application navigates due to the gesture, and so on, enabling the gesture-driven model 356 to learn how to navigate different user interfaces of different applications to reach the search field and enter text into the search field. When the gesture-driven model 356 is being trained, the gesture-driven model 356 can be able to identify and learn the user interface elements in each screenshot included in the screenshots, thus constructing a model that understands the user interface of the software application to be able to output a sequence of gestures to be executed to interact with the user interface of the application. Once the model trainer 338 has completed training the gesture-driven model 356, one or more processors 340 can make the model trainer 338 available for download at the application publishing platform, such as by a computing device that downloads a software application that has been modified by the computing system 320 to support deep linking.

[0151] One or more processors 340 can be configured to execute a script execution engine 324, which can communicate with the gesture-driven model 356 to receive an indication of a sequence of gestures to be executed at the user interface of the software application 312, starting from the home screen of the software application 312 and reaching the search field and entering one or more search terms. The script execution engine 324 can, in response to the software application 312 receiving a deep link to be processed, send an indication of the view hierarchy of the software application 312 and a screenshot of the home screen of the software application 312 to the gesture-driven model 356.

[0152] In some examples, the gesture module 332 can use the gesture-driven model 356 to generate a gesture script 325 for the software application 312. For example, the gesture module 332 can send information related to the user interface of the software application 312 to the gesture-driven model 356, such as the view hierarchy, screenshots of different screens of the software application 312, an indication of the position of the screenshots of different screens in the view hierarchy, and so on. In response, the gesture-driven model 356 can be able to output a sequence of gestures that the script execution engine 324 can execute to interact with the user interface of the software application 312 to reach the search field of the software application 312 and enter text into the search field.

[0153] Once the gesture module 332 has generated a gesture script 325, one or more processors 340 are configured to execute the gesture module 332 to store the gesture script 325 in the gesture data repository 336. The gesture data repository 336 can be any suitable data repository, such as one or more databases, object stores, one or more file systems, etc. The gesture module 332 can associate each gesture script generated by the gesture module 332 in the gesture data repository 336 with a specific software application for which the gesture script was generated (e.g., software application 312) and / or a specific version of the software application. In some examples, the gesture module 332 can associate each gesture script with a software application by associating each gesture script with the package name of the software application and / or a version code indicating the version of the software application associated with the gesture script.

[0154] In some examples, the gesture data repository 336 can store various gesture scripts that can be used for different features in addition to automation for deep linking. Thus, the gesture module 332 can also associate gesture scripts generated for deep link automation with the deep link automation feature.

[0155] One or more processors 340 can execute the gesture retrieval module 334 to receive a request for a gesture script from a software application at the computing device and, in response, retrieve the requested gesture script from the gesture data repository 336 and send the retrieved gesture script to the software application. In some examples, the request can indicate the software application associated with the requested gesture script, such as the package name of the software application. In examples where the gesture script is associated with a specific version of the software application, the request can also indicate the version code of the software application. In examples where gesture scripts for different features are stored in the gesture data repository 336, the request can also indicate the feature associated with the requested gesture script, such as deep link automation.

[0156] The following is an example POST request for a gesture script that the gesture retrieval module 334 can receive from a software application:

[0157] In the above example, package_name can indicate the package name of the software application making the request, and version_code can indicate the version code of the software application making the request. feature_enum can be an enumerator specifying the feature associated with the requested gesture script, such as DEEPLINK_AUTOMATION.

[0158] The gesture retrieval module 334 can retrieve the requested gesture script from the gesture data repository 336. For example, the gesture retrieval module 334 can retrieve the gesture script associated with the package name, version code, and / or feature indicated by the request. Thus, the gesture retrieval module 334 can send the retrieved gesture script to the requesting software application at the requesting computing device via one or more communication units 342.

[0159] Figure 4 is a conceptual diagram showing a software application and an example user interface of the software application interacting to handle a deep link according to aspects of the present disclosure. For illustrative purposes only, example operations are described below in the context of the application 212B executed at the computing device 202 of Figure 2 .

[0160] The link module 208 of the computing device 202 can receive an indication of a web link such as "http: / / example.com / store / items / all-in-one-computer-item736 / view" from the software application 212A, and can determine in response whether the web link is a deep link that can be handled by another software application. For example, the link module 208 can determine that the web link "http: / / example.com / store / items / all-in-one-computer-item736 / view" is a deep link to specific content in the software application 212B based on the intent filter in the manifest 226 of the software application 212B, which indicates that the software application 212B handles deep links to the domain name "example.com" and to the path " / store*". Thus, the link module 208 can send an indication of the deep link to the software application 212B. The operating system 254 can also set the software application 212B as the foreground application of the computing device 202, such as by opening the software application 212B or by switching to the software application 212B as the foreground application of the computing device 202.

[0161] As Figure 4 shown, when the software application 212B is the foreground application of the computing device 202, the user interface device 204 of the computing device 202, such as a display device, can display the user interface of the software application 212B, such as the user interface 414A, which is the main screen of the software application 212B. In Figure 4 the example, the software application 212B can be a shopping application of the retailer "ComputerEmporium", which sells computers and related accessories that can also be associated with the web site "example.com".

[0162] The software application 212B can receive an indication of a deep link from the link module 208 and can determine one or more interactions with the user interface of the software application 212B for navigating to the specific content specified by the deep link in the software application 212B. In some examples, the software application 212B can retrieve a gesture script 225 associated with the software application 212B, and the gesture script can specify a sequence of interactions with the user interface of the software application 212B for navigating to the specific content in the software application 212B. For example, the software application 212B can communicate with an external computing system such as Figure 1 the computing system 120 to retrieve the gesture script 225 associated with the software application 212B.

[0163] In response to retrieving the gesture script 225, the software application 212B can interact with the user interface of the software application 212B programmatically according to the gesture script 225 to navigate to the specific content in the software application 212B. In Figure 4 an example, the gesture script can specify a series of interactions with the user interface of the software application 212B for navigating to a search field in the software application 212B to enter an item number specified by the deep link to navigate to a screen of the software application 212B, and the screen is a product page of an item associated with the item number.

[0164] For example, the gesture sequence specified by the gesture script 225 includes a gesture for selecting a search button 462 in the user interface 414A, and the user interface is the main screen of the software application 212B. The software application 212B can perform the specified gesture programmatically to select the search button 462, such as by performing a tap gesture programmatically at the search button 462. In response to the selection of the search button 462, the software application 212B can transition from the output user interface 414A to an output user interface 414B - the user interface 414B can be a search screen 464 of the software application 212B including a search field 466, to be displayed at the user interface device 204.

[0165] The next gesture in the gesture sequence specified by the gesture script 225 can include gestures for selecting the search field 466, entering a search term into the search field 466, and selecting a search button 465 to cause the software application 212B to search for the search term entered into the search field 466. The software application 212B can perform the specified gesture programmatically to select the search field 466, such as by performing a tap gesture programmatically at the search field 466. Selecting the search field 466 can also cause the user interface device 204 to display a virtual keyboard 467.

[0166] The gesture script 225 may include logic for extracting one or more search terms from a deep link and inputting the extracted one or more search terms into the search field 466. For example, the gesture script 225 may include logic for extracting the text between "items / " and " / view" in the deep link as a search term. Thus, in an example where the deep link is "http: / / example.com / store / items / all-in-one-computer-item736 / view", the software application 212B may apply the logic to the deep link to extract the text "all-in-one-computer-item736" as a search term, and may programmatically perform one or more interactions with the virtual keyboard 467 to use the virtual keyboard 467 to type the search term "all-in-one-computer" into the search field 466. Thus, the software application 212B may also programmatically perform the gesture specified by the gesture script 225 to select the search button 465, such as by programmatically performing a tap gesture at the search button 465, to cause the software application 212B to search for the search term "all-in-one-computer".

[0167] Thus, the software application 212B may search within the software application 212B for a screen that includes the search term "all-in-one-computer" or is associated with the search term "all-in-one-computer", and may, in response, find a product page 468 that includes the search term "all-in-one-computer" or is associated with the search term "all-in-one-computer". Thus, the software application 212B may transition from the output user interface 414B to the output user interface 414C, which may be the product page 468 of the all-in-one computer within the software application 212B. In this way, the software application 212B may be able to navigate the user interface of the software application 212B to handle a deep link to specific content within the software application 212B.

[0168] Figure 5 is a flowchart illustrating an example operation of an example computing device in accordance with one or more aspects of the present disclosure. For illustrative purposes only, the example operations are described below in the context of the Figure 2 computing device 202.

[0169] As Figure 5As shown, one or more processors 240 of computing device 202 may receive a deep link (502) from a first software application 212A. The one or more processors 240 may determine a second software application 212B for handling the deep link (504). In response to determining the second software application 212B for handling the deep link, the one or more processors 240 may determine one or more interactions with the user interface of the second software application 212B for navigating the user interface of the second software application 212B to the specific content indicated by the deep link (506). The one or more processors 240 may perform one or more interactions with the user interface of the second software application 212B without user intervention to navigate the user interface of the second software application 212B to the specific content indicated by the deep link (508).

[0170] In some examples, to determine one or more interactions with the user interface of the second software application 212B for navigating the user interface of the second software application 212B to the specific content of the second software application 212B, the one or more processors 240 may execute the second software application 212B to receive an indication of one or more interactions with the user interface from the computing system. In some examples, the one or more interactions with the user interface of the second software application 212B include one or more gestures to be performed at the user interface of the second software application 212B.

[0171] In some examples, to determine one or more interactions with the user interface of the second software application 212B for navigating the user interface of the second software application 212B to the specific content of the second software application 212B, the one or more processors 240 may execute the second software application to retrieve an indication of a sequence of interactions with the user interface from computing system 120.

[0172] In some examples, to retrieve an indication of a sequence of interactions with the user interface, the one or more processors 240 may execute code added to the second software application 212B by an external computing system to retrieve an indication of a sequence of interactions with the user interface from computing system 120. In some examples, to perform one or more interactions with the user interface, the one or more processors 240 may execute code added to the second software application 212B by an external computing system to perform a sequence of interactions with the user interface of the second software application 212B to navigate the user interface of the second software application 212B to the specific content indicated by the deep link.

[0173] In some examples, a deep link specifies a Uniform Resource Locator (URL) that is a link to a web page on a website. In some examples, the deep link is a link to an item listed by the website, and to perform one or more interactions with the user interface of a second software application 212B, one or more processors 240 may perform one or more interactions with the user interface of the second software application to navigate the second software application 212B to a screen of the second software application 212B associated with the item listed by the website.

[0174] In some examples, to perform one or more interactions with the user interface of a second software application 212B to navigate the second software application 212B to a screen of the second software application 212B associated with the item listed by the website, one or more processors 240 may perform one or more interactions with the user interface of the second software application 212B to navigate to a search field in the user interface of the second software application 212B and enter text into the search field to search for an item in the second software application 212B.

[0175] In some examples, to perform one or more interactions with the user interface of a second software application 212B to enter text into a search field in the user interface of the second software application 212B to search for an item in the second software application 212B, one or more processors 240 may extract one or more search terms from the deep link and may perform one or more interactions with the user interface of the second software application 212B to enter the one or more search terms into the search field in the user interface of the second software application 212B to search for an item in the second software application 212B.

[0176] In some examples, to determine the second software application 212B for handling the deep link, one or more processors 240 may determine the second software application 212B for handling the deep link at least in part based on a manifest 226 associated with the second software application 212B, where the manifest 226 includes one or more intent filters indicating that the second software application 212B is capable of supporting deep links.

[0177] Figure 6 is a flowchart illustrating example operations of an example computing system in accordance with one or more aspects of the present disclosure. For illustrative purposes only, the example operations are described below in the context of Figure 3 the computing system 320.

[0178] As Figure 6As shown, one or more processors 340 of computing system 320 may modify software application 312 to specify deep links (602) to specific content in software application 312 that are supported by software application 312. One or more processors 340 may add code to software application 312 to programmatically interact with the user interface of software application 312 to handle deep links supported by software application 312 (604).

[0179] In some examples, to add code to software application 312 to programmatically interact with the user interface of software application 312 to handle deep links supported by software application 312, one or more processors 340 may add code for retrieving an indication of an interaction sequence with the user interface for handling deep links supported by software application 312 from an external computing system, and may add code for programmatically interacting with the user interface according to the interaction sequence with the user interface of software application 312 to navigate software application 312 to the specific content indicated by the deep link in software application 312.

[0180] In some examples, the interaction sequence with the user interface includes a sequence of gestures to be performed at the user interface of software application 312. In some examples, the interaction sequence with the user interface includes an interaction sequence with the user interface for navigating software application 312 to a search field in the user interface of software application 312 and entering one or more search terms into the search field. In some examples, one or more processors 340 may crawl the user interface of software application 312 to determine an interaction sequence with the user interface that is the shortest path from the home screen of software application 312 to the search field in the user interface of software application 312.

[0181] In some examples, to add code to software application 312 to programmatically interact with the user interface of software application 312 to handle deep links supported by software application 312, one or more processors 340 may add logic for extracting one or more search terms from the deep link.

[0182] In some examples, each deep link in the deep link specifies a uniform resource locator (URL) that is a link to a web page on a website.

[0183] In some examples, to modify software application 312 to specify that software application 312 supports deep links to specific content in software application 312, one or more processors 340 may modify the manifest 326 of software application 312 to specify that software application 312 supports deep links associated with one or more specified domain names.

[0184] Aspects of the present disclosure include the following examples.

[0185] Example 1. A method includes: receiving, by one or more processors, a deep link from a first software application executing at the one or more processors; determining, by the one or more processors, a second software application for handling the deep link; in response to determining the second software application for handling the deep link, determining, by the one or more processors, one or more interactions with a user interface of the second software application for navigating the user interface of the second software application to specific content indicated by the deep link; and performing, by the one or more processors, the one or more interactions with the user interface of the second software application without user interaction to navigate the user interface of the second software application to the specific content indicated by the deep link.

[0186] Example 2. The method according to Example 1, wherein the one or more interactions with the user interface of the second software application include one or more gestures to be performed at the user interface of the second software application.

[0187] Example 3. The method according to any one of Examples 1 and 2, wherein determining the one or more interactions with the user interface of the second software application for navigating the user interface of the second software application to the specific content further includes: retrieving, by the second software application executing at the one or more processors, an indication of an interaction sequence with the user interface from a computing system.

[0188] Example 4. The method according to Example 3, wherein retrieving the indication of the interaction sequence with the user interface further includes: executing, by the one or more processors, code added to the second software application by an external computing system to retrieve the indication of the interaction sequence with the user interface from the computing system.

[0189] Example 5. The method according to Example 4, wherein performing the one or more interactions with the user interface further includes: executing, by the one or more processors, the code added to the second software application by the external computing system to perform the interaction sequence with the user interface of the second software application to navigate the user interface of the second software application to the specific content indicated by the deep link.

[0190] Example 6. The method according to any one of Examples 1 to 5, wherein the deep link specifies a Uniform Resource Locator (URL) that is a link to a web page on a website.

[0191] Example 7. The method according to Example 6, wherein the deep link is a link to an item listed by the website, and wherein performing the one or more interactions with the user interface of the second software application further comprises: performing, by the one or more processors, the one or more interactions with the user interface of the second software application to navigate the second software application to a screen of the second software application associated with the item listed by the website.

[0192] Example 8. The method according to Example 7, wherein performing the one or more interactions with the user interface of the second software application to navigate the second software application to the screen of the second software application associated with the item listed by the website further comprises: performing, by the one or more processors, the one or more interactions with the user interface of the second software application to navigate to a search field in the user interface of the second software application and input text into the search field to search for the item in the second software application.

[0193] Example 9. The method according to Example 8, wherein performing the one or more interactions with the user interface of the second software application to input the text into the search field in the user interface of the second software application to search for the item in the second software application further comprises: extracting, by the one or more processors, one or more search terms from the deep link; and performing, by the one or more processors, the one or more interactions with the user interface of the second software application to input the one or more search terms into the search field in the user interface of the second software application to search for the item in the second software application.

[0194] Example 10. The method according to any one of Examples 1 to 9, wherein determining the second software application for handling the deep link further comprises: determining, by the one or more processors, at least in part based on a manifest associated with the second software application, the second software application for handling the deep link, wherein the manifest includes one or more intent filters indicating that the second software application is capable of supporting the deep link.

[0195] Example 11. A computing device includes: a memory that stores instructions; and one or more processors that execute the instructions to: receive a deep link from a first software application executing at the one or more processors; determine a second software application for handling the deep link; in response to determining the second software application for handling the deep link, determine one or more interactions with the user interface of the second software application for navigating the user interface of the second software application to specific content indicated by the deep link; and perform the one or more interactions with the user interface of the second software application without user interaction to navigate the user interface of the second software application to the specific content indicated by the deep link.

[0196] Example 12. The computing device according to Example 11, wherein the one or more interactions with the user interface of the second software application include one or more gestures to be performed at the user interface of the second software application.

[0197] Example 13. The computing device according to any one of Examples 11 and 12, wherein the one or more processors that execute the instructions to determine the one or more interactions with the user interface of the second software application for navigating the user interface of the second software application to the specific content further execute the instructions to: retrieve, by the second software application, an indication of an interaction sequence with the user interface from a computing system.

[0198] Example 14. The computing device according to Example 13, wherein the one or more processors that execute the instructions to retrieve the indication of the interaction sequence with the user interface further execute the instructions to: execute code added to the second software application by an external computing system to retrieve the indication of the interaction sequence with the user interface from the computing system.

[0199] Example 15. The computing device according to Example 14, wherein the one or more processors that execute the instructions to perform the one or more interactions with the user interface further execute the instructions to: execute the code added to the second software application by the external computing system to perform the interaction sequence with the user interface of the second software application to navigate the user interface of the second software application to the specific content indicated by the deep link.

[0200] Example 16. The computing device according to any one of Examples 11 to 15, wherein the deep link specifies a Uniform Resource Locator (URL) that is a link to a web page on a website.

[0201] Example 17. The computing device according to Example 16, wherein the deep link is a link to an item listed by the website, and wherein the one or more processors that execute the instructions to perform the one or more interactions with the user interface of the second software application also execute the instructions to: perform the one or more interactions with the user interface of the second software application to navigate the second software application to a screen of the second software application associated with the item listed by the website.

[0202] Example 18. The computing device according to Example 17, wherein the one or more processors that execute the instructions to perform the one or more interactions with the user interface of the second software application to navigate the second software application to the screen of the second software application associated with the item listed by the website also execute the instructions to: perform the one or more interactions with the user interface of the second software application to navigate to a search field in the user interface of the second software application and enter text into the search field to search for the item in the second software application.

[0203] Example 19. The computing device according to Example 18, wherein the one or more processors that execute the instructions to perform the one or more interactions with the user interface of the second software application to enter the text into the search field in the user interface of the second software application to search for the item in the second software application also execute the instructions to: extract one or more search terms from the deep link; and perform the one or more interactions with the user interface of the second software application to enter the one or more search terms into the search field in the user interface of the second software application to search for the item in the second software application.

[0204] Example 20. A non-transitory computer-readable storage medium storing instructions that, when executed, cause one or more processors of a computing device to: receive a deep link from a first software application executing at the one or more processors; determine a second software application for handling the deep link; in response to determining the second software application for handling the deep link, determine one or more interactions with the user interface of the second software application for navigating the user interface of the second software application to specific content indicated by the deep link; and perform the one or more interactions with the user interface of the second software application without user interaction to navigate the user interface of the second software application to the specific content indicated by the deep link.

[0205] Example 21. A method includes: modifying, by one or more processors, a software application to specify a deep link to specific content in the software application; and adding, by one or more processors, code to the software application to programmatically interact with a user interface of the software application to handle the deep link supported by the software application.

[0206] Example 22. The method of Example 21, wherein adding the code to the software application to programmatically interact with the user interface of the software application to handle the deep link supported by the software application further includes: adding, by the one or more processors, an indication for retrieving, from an external computing system, an interaction sequence with the user interface for handling the deep link supported by the software application; and adding, by the one or more processors, code for programmatically interacting with the user interface according to the interaction sequence with the user interface of the software application to navigate the software application to the specific content indicated by the deep link.

[0207] Example 23. The method of Example 22, wherein the interaction sequence with the user interface includes a sequence of gestures to be performed at the user interface of the software application.

[0208] Example 24. The method of any one of Examples 22 and 23, wherein the interaction sequence with the user interface includes an interaction sequence with the user interface for navigating the software application to a search field in the user interface of the software application and entering one or more search terms into the search field.

[0209] Example 25. The method of Example 24, further includes: crawling, by the one or more processors, the user interface of the software application to determine the interaction sequence with the user interface, the interaction sequence being the shortest path from a home screen of the software application to the search field in the user interface of the software application.

[0210] Example 26. The method of any one of Examples 24 and 25, wherein adding the code to the software application to programmatically interact with the user interface of the software application to handle the deep link supported by the software application further includes: adding, by the one or more processors, logic for extracting the one or more search terms from the deep link.

[0211] Example 27. The method of any one of Examples 21 to 26, wherein each deep link in the deep link specifies a uniform resource locator (URL), the URL being a link to a web page on a website.

[0212] Example 28. The method according to any one of Examples 21 to 27, wherein modifying the software application to specify that the software application supports the deep link to the specific content in the software application further comprises: modifying, by the one or more processors, the manifest of the software application to specify that the software application supports the deep link associated with one or more specified domain names.

[0213] Example 29. A computing system, comprising: a memory that stores instructions; and one or more processors that execute the instructions to: modify a software application to specify a deep link to specific content in the software application supported by the software application; and add code to the software application to programmatically interact with the user interface of the software application to handle the deep link supported by the software application.

[0214] Example 30. The computing system according to Example 29, wherein the one or more processors that execute the instructions to add the code to the software application to programmatically interact with the user interface of the software application to handle the deep link supported by the software application further execute the instructions to: add code for retrieving an indication of an interaction sequence with the user interface for handling the deep link supported by the software application from an external computing system; and add code for programmatically interacting with the user interface according to the interaction sequence with the user interface of the software application to navigate the software application to the specific content indicated by the deep link in the software application.

[0215] Example 31. The computing system according to Example 30, wherein the interaction sequence with the user interface comprises a sequence of gestures to be performed at the user interface of the software application.

[0216] Example 32. The computing system according to any one of Examples 30 and 31, wherein the interaction sequence with the user interface comprises an interaction sequence with the user interface for navigating the software application to a search field in the user interface of the software application and entering one or more search terms into the search field.

[0217] Example 33. The computing system according to Example 32, wherein the one or more processors further execute the instructions to: crawl the user interface of the software application to determine the interaction sequence with the user interface, which is the shortest path from the home screen of the software application to the search field in the user interface of the software application.

[0218] Example 34. The computing system according to any one of Examples 32 and 33, wherein the one or more processors that execute the instruction to add the code to the software application to programmatically interact with the user interface of the software application to handle the deep link supported by the software application also execute the instruction to: add logic for extracting the one or more search terms from the deep link.

[0219] Example 35. The computing system according to any one of Examples 29 to 34, wherein each deep link in the deep link specifies a Uniform Resource Locator (URL) that is a link to a web page on a website.

[0220] Example 36. The computing system according to any one of Examples 29 to 35, wherein the one or more processors that execute the instruction to modify the software application to specify the deep link supported by the software application to specific content in the software application also execute the instruction to: modify the manifest of the software application to specify that the software application supports the deep link associated with one or more specified domain names.

[0221] Example 37. A non-transitory computer-readable storage medium storing instructions that, when executed, cause one or more processors of a computing system to: modify a software application to specify a deep link to specific content in the software application supported by the software application; and add code to the software application to programmatically interact with the user interface of the software application to handle the deep link supported by the software application.

[0222] Example 38. The non-transitory computer-readable storage medium according to Example 37, wherein the instruction that, when executed, causes the one or more processors to add the code to the software application to programmatically interact with the user interface of the software application to handle the deep link supported by the software application also causes the one or more processors to: add code for retrieving from an external computing system an indication of an interaction sequence for handling the interaction with the user interface of the software application for the deep link supported by the software application; and add code for programmatically interacting with the user interface according to the interaction sequence with the user interface of the software application to navigate the software application to the specific content indicated by the deep link of the software application.

[0223] Example 39. The non-transitory computer-readable storage medium according to Example 38, wherein the interaction sequence with the user interface includes a sequence of gestures to be performed at the user interface of the software application.

[0224] Example 40. The non-transitory computer-readable storage medium according to any one of Examples 38 and 39, wherein the interaction sequence with the user interface includes an interaction sequence for navigating the software application to a search field in the user interface of the software application and entering one or more search terms into the search field.

[0225] In one or more examples, the described functionality may be implemented in hardware, software, firmware, or any combination thereof. If implemented in software, the functionality may be stored on or transmitted via a computer-readable medium as one or more instructions or code and executed by a hardware-based processing unit. A computer-readable medium may include a computer-readable storage medium that corresponds to: a tangible medium such as a data storage medium; or a communication medium that includes, for example, any medium that facilitates transfer of a computer program from one place to another according to a communication protocol. In this way, a computer-readable medium generally corresponds to (1) a non-transitory tangible computer-readable storage medium or (2) a communication medium such as a signal or carrier wave. A data storage medium may be any available medium that can be accessed by one or more computers or one or more processors to retrieve instructions, code, and / or data structures for implementing the techniques described in this disclosure. A computer program product may include a computer-readable medium.

[0226] By way of example, and not limitation, such computer-readable storage media may include RAM, ROM, EEPROM, CD-ROM, or other optical disk storage, magnetic disk storage, or other magnetic storage devices, flash memory, or any other medium that can be used to store the desired program code in the form of instructions or data structures and that can be accessed by a computer. Additionally, any connection is properly termed a computer-readable medium. For example, if instructions are transmitted from a website, server, or other remote source using coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL), or wireless technologies such as infrared, radio, and microwave, then the coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies such as infrared, radio, and microwave are included in the definition of the medium. However, it should be understood that computer-readable storage media and data storage media do not include connections, carrier waves, signals, or other transitory media, but rather refer to non-transitory tangible storage media. As used herein, disk and disc include compact disc (CD), laser disc, optical disc, digital versatile disc (DVD), floppy disk, and Blu-ray disc, where disks typically reproduce data magnetically, while discs reproduce data optically with lasers. Combinations of the above should also be included within the scope of computer-readable media.

[0227] The instructions can be executed by one or more processors such as: one or more digital signal processors (DSPs), general-purpose microprocessors, application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), or other equivalent integrated or discrete logic circuitry. Thus, as used herein, the term "processor" can refer to any one of the foregoing structures or any other structure suitable for implementing the techniques described herein. Additionally, in some aspects, the functionality described herein can be provided within special purpose hardware and / or software modules. Additionally, the techniques can be fully implemented in one or more circuits or logic elements.

[0228] The techniques of the present disclosure can be implemented in a wide variety of devices or apparatuses, including wireless telephones, integrated circuits (ICs) or IC sets (e.g., chip sets). Various components, modules, or units are described in this disclosure to emphasize functional aspects of devices configured to perform the disclosed techniques, but the various components, modules, or units are not necessarily required to be implemented by distinct hardware units. Rather, as described above, the various units can be combined in a hardware unit or provided by a collection of interoperable hardware units including one or more processors as described above in conjunction with suitable software and / or firmware.

[0229] Various examples of the present disclosure have been described. Any combination of the described systems, operations, or functions is contemplated. These and other examples are within the scope of the appended claims.

Claims

1. A method, comprising: Receiving, by one or more processors, a deep link from a first software application executing at the one or more processors; Determining, by the one or more processors, a second software application for handling the deep link; In response to determining the second software application for handling the deep link, determining, by the one or more processors, one or more interactions with the user interface of the second software application for navigating the user interface of the second software application to specific content indicated by the deep link; And Executing, by the one or more processors, the one or more interactions with the user interface of the second software application without user interaction to navigate the user interface of the second software application to the specific content indicated by the deep link.

2. The method according to claim 1, wherein the one or more interactions with the user interface of the second software application include one or more gestures to be performed at the user interface of the second software application.

3. The method according to any one of claims 1 and 2, wherein determining the one or more interactions with the user interface of the second software application for navigating the user interface of the second software application to the specific content further comprises: Retrieving, by the second software application executing at the one or more processors, an indication of an interaction sequence with the user interface from a computing system.

4. The method according to claim 3, wherein retrieving the indication of the interaction sequence with the user interface further comprises: Executing, by the one or more processors, code added to the second software application by an external computing system to retrieve the indication of the interaction sequence with the user interface from the computing system.

5. The method according to claim 4, wherein executing the one or more interactions with the user interface further comprises: Executing, by the one or more processors, the code added to the second software application by the external computing system to execute the interaction sequence with the user interface of the second software application to navigate the user interface of the second software application to the specific content indicated by the deep link.

6. The method according to any one of claims 1 to 5, wherein the deep link specifies a Uniform Resource Locator (URL), and the URL is a link to a web page on a website.

7. The method according to claim 6, wherein the deep link is a link to an item listed by the website, and wherein executing the one or more interactions with the user interface of the second software application further comprises: Executing, by the one or more processors, the one or more interactions with the user interface of the second software application to navigate the second software application to a screen associated with the item listed by the website.

8. The method according to claim 7, wherein performing the one or more interactions with the user interface of the second software application to navigate the second software application to the screen of the second software application associated with the item listed by the website further comprises: Performing, by the one or more processors, the one or more interactions with the user interface of the second software application to navigate to a search field in the user interface of the second software application and input text into the search field to search for the item in the second software application.

9. The method according to claim 8, wherein performing the one or more interactions with the user interface of the second software application to input the text into the search field in the user interface of the second software application to search for the item in the second software application further comprises: Extracting, by the one or more processors, one or more search terms from the deep link; And Performing, by the one or more processors, the one or more interactions with the user interface of the second software application to input the one or more search terms into the search field in the user interface of the second software application to search for the item in the second software application.

10. The method according to any one of claims 1 to 9, wherein determining the second software application for handling the deep link further comprises: Determining, by the one or more processors, the second software application for handling the deep link at least in part based on a manifest associated with the second software application, wherein the manifest includes one or more intent filters indicating that the second software application is capable of supporting the deep link.

11. A computing device, comprising: A memory that stores instructions; And One or more processors that execute the instructions to: Receive a deep link from a first software application executing at the one or more processors; Determine a second software application for handling the deep link; In response to determining the second software application for handling the deep link, determine one or more interactions with the user interface of the second software application to navigate the user interface of the second software application to the specific content indicated by the deep link; And Without user interaction, perform the one or more interactions with the user interface of the second software application to navigate the user interface of the second software application to the specific content indicated by the deep link.

12. The computing device according to claim 11, wherein the one or more interactions with the user interface of the second software application include one or more gestures to be performed at the user interface of the second software application.

13. The computing device according to any one of claims 11 and 12, wherein the one or more processors that execute the instructions to determine the one or more interactions of the user interface of the second software application for navigating the user interface of the second software application to the specific content of the second software application further execute the instructions to: Retrieve, by the second software application, an indication of the interaction sequence with the user interface from the computing system.

14. The computing device according to claim 13, wherein the one or more processors that execute the instructions to retrieve the indication of the interaction sequence with the user interface further execute the instructions to: Execute code added to the second software application by an external computing system to retrieve the indication of the interaction sequence with the user interface from the computing system.

15. The computing device according to claim 14, wherein the one or more processors that execute the instructions to perform the one or more interactions with the user interface further execute the instructions to: Execute the code added to the second software application by the external computing system to perform the interaction sequence with the user interface of the second software application to navigate the user interface of the second software application to the specific content indicated by the deep link.

16. The computing device according to any one of claims 11 to 15, wherein the deep link specifies a Uniform Resource Locator (URL), and the URL is a link to a web page on a website.

17. The computing device according to claim 16, wherein the deep link is a link to an item listed by the website, and wherein the one or more processors that execute the instructions to perform the one or more interactions with the user interface of the second software application further execute the instructions to: Perform the one or more interactions with the user interface of the second software application to navigate the second software application to a screen of the second software application associated with the item listed by the website.

18. The computing device according to claim 17, wherein the one or more processors that execute the instructions to perform the one or more interactions with the user interface of the second software application to navigate the second software application to the screen of the second software application associated with the item listed by the website further execute the instructions to: Perform the one or more interactions with the user interface of the second software application to navigate to a search field in the user interface of the second software application and enter text into the search field to search for the item in the second software application.

19. The computing device according to claim 18, wherein the one or more processors that execute the instructions to perform the one or more interactions with the user interface of the second software application to enter the text into the search field of the user interface of the second software application to search for the item in the second software application further execute the instructions to: Extract one or more search terms from the deep link; and Perform the one or more interactions with the user interface of the second software application to enter the one or more search terms into the search field of the user interface of the second software application to search for the item in the second software application.

20. A non-transitory computer-readable storage medium storing instructions that, when executed, cause one or more processors of a computing device to: Receive a deep link from a first software application executing at the one or more processors; Determine a second software application for handling the deep link; In response to determining the second software application for handling the deep link, determine one or more interactions with the user interface of the second software application for navigating the user interface of the second software application to the specific content indicated by the deep link; and And Without user interaction, perform the one or more interactions with the user interface of the second software application to navigate the user interface of the second software application to the specific content indicated by the deep link.