IP Library Granted Patent US 12,340,232
Granted Patent B2
US 12,340,232 · App. 17/091,458 · Granted Jun 24, 2025

Systems and methods for integrating mobile application plug-ins

Inventors: Jean Elie Bovet (Los Angeles, CA); Stephen Goldberg (Frisco, TX); Alexander Sikora (Cincinnati, OH); Joao Henrique Pimentel Wanderley Neves (San Mateo, CA); Nitish Khadiya (Sunnyvale, CA); Saket Agarwal (San Mateo, CA)
Assignee: Salesforce, Inc.
G06F9/44526G06F8/61G06F8/65G06F9/541G06F8/62G06F2209/541
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 12,340,232
App. No.
17/091,458
Granted
Jun 24, 2025
Kind
B2
Abstract

The present disclosure is directed to integrating mobile application plug-ins. For example, a method may include: at run-time of a host application, initializing, by the host application, a plurality of plug-ins; in response to initializing the plurality of plug-ins, establishing a set of supported services provided between a plurality of components comprising a native component of the host application and the plurality of plug-ins; detecting a request for a service from a first component of the plurality of components; and in response to determining that the requested service is one of the supported services, routing the requested service to a second component of the plurality of components, the second component being different than the first component.

Claims (49)

1. A computer-implemented method, comprising:

at run-time of a host application, initializing, by the host application, a plurality of plug-ins, wherein:

the host application comprises a native component and communicates services of the host application to the plurality of plug-ins with a plug-in service provider interface (SPI);

the host application injects at run-time a plug-in application programming interface (API) that is specific to a type of the host application into one or more of the plurality of plug-ins; and

the one or more of the plurality of plug-ins communicates services of the one or more of the plurality of plug-ins to the host application with the plug-in API;

in response to initializing the plurality of plug-ins, establishing, during run-time of the host application, a bi-directional contract between the host application and the plurality of plug-ins with the plug-in SPI and the plug-in API, wherein the bi-directional contract defines a set of supported services requested and cross-accessed by a plurality of components comprising the native component of the host application and the plurality of plug-ins;

detecting a request for a service from a first component of the native component and the plurality of plug-ins; and

in response to determining that the requested service is one of the supported services, routing the requested service to a second component of the native component and the plurality of plug-ins, the second component being different than the first component.

2. The method of claim 1 , further comprising:

transmitting a query to each of the plurality of components to determine which of the plurality of components can provide the requested service; and

selecting the second component based on responses from the plurality of components in response to the query.

3. The method of claim 1 , wherein the one or more of the plurality of plug-ins comprise an SPI implementation and the host application communicates services of the host application to the SPI implementation of the one or more of the plurality of plug-ins.

4. The method of claim 1 , further comprising integrating a new plug-in into the plurality of plug-ins in response to the new plug-in being installed.

5. The method of claim 1 , further comprising receiving an update to a first plug-in of the plurality of plug-ins and modifying a pointer of the first plug-in.

6. The method of claim 1 , wherein the first component of the plurality of components is the native component, and wherein routing the requested service to the second component of the plurality of components comprises routing the requested service to the plurality of plug-ins.

7. The method of claim 1 , wherein the first component of the plurality of components is one of the plurality of plug-ins, and wherein routing the requested service to the second component of the plurality of components comprises routing the requested service to the native component.

8. A device, comprising:

a memory; and

a processor coupled to the memory and configured to:

at run-time of a host application, initialize, using the host application, a plurality of plug-ins, wherein:

the host application comprises a native component and communicates services of the host application to the plurality of plug-ins with a plug-in service provider interface (SPI);

the host application injects at run-time a plug-in application programming interface (API) that is specific to a type of the host application into one or more of the plurality of plug-ins; and

the one or more of the plurality of plug-ins communicates services of the one or more of the plurality of plug-ins to the host application with the plug-in API;

in response to initializing the plurality of plug-ins, establish, during run-time of the host application, a bi-directional contract between the host application and the plurality of plug-ins with the plug-in SPI and the plug-in API, wherein the bi-directional contract defines a set of supported services requested and cross-accessed by a plurality of components comprising the native component of the host application and the plurality of plug-ins;

detect a request for a service from a first component of the native component and the plurality of plug-ins; and

in response to determining that the requested service is one of the supported services, route the requested service to a second component of the native component and the plurality of plug-ins, the second component being different than the first component.

9. The device of claim 8 , wherein the processor is further configured to:

transmit a query to each of the plurality of components to determine which of the plurality of components can provide the requested service; and

select the second component based on responses from the plurality of components in response to the query.

10. The device of claim 8 , wherein the one or more of the plurality of plug-ins comprise an SPI implementation and the host application communicates services of the host application to the SPI implementation of the one or more of the plurality of plug-ins.

11. The device of claim 8 , wherein the processor is further configured to integrate a new plug-in into the plurality of plug-ins in response to the new plug-in being installed.

12. The device of claim 8 , wherein the processor is further configured to receive an update to a first plug-in of the plurality of plug-ins and modify a pointer of the first plug-in.

13. The device of claim 8 , wherein the first component of the plurality of components is the native component, and wherein, to route the requested service to the second component of the plurality of components comprises, the processor is further configured to route the requested service to the plurality of plug-ins.

14. The device of claim 8 , wherein the first component of the plurality of components is one of the plurality of plug-ins, and wherein, to route the requested service to the second component of the plurality of components, the processor is further configured to route the requested service to the native component.

15. A non-transitory computer-readable device having instructions stored thereon that, when executed by at least one computing device, cause the at least one computing device to perform operations comprising:

at run-time of a host application, initializing, by the host application, a plurality of plug-ins, wherein:

the host application comprises a native component and communicates services of the host application to the plurality of plug-ins with a plug-in service provider interface (SPI);

the host application injects at run-time a plug-in application programming interface (API) that is specific to a type of the host application into one or more of the plurality of plug-ins; and

the one or more of the plurality of plug-ins communicates services of the one or more of the plurality of plug-ins to the host application with the plug-in API;

in response to initializing the plurality of plug-ins, establishing, during run-time of the host application, a bi-directional contract between the host application and the plurality of plug-ins with the plug-in SPI and the plug-in API, wherein the bi-directional contract defines a set of supported services requested and cross-accessed by a plurality of components comprising the native component of the host application and the plurality of plug-ins;

detecting a request for a service from a first component of the native component and the plurality of plug-ins; and

in response to determining that the requested service is one of the supported services, routing the requested service to a second component of the native component and the plurality of plug-ins, the second component being different than the first component.

16. The non-transitory computer-readable device of claim 15 , wherein the operations further comprise:

transmitting a query to each of the plurality of components to determine which of the plurality of components can provide the requested service; and

selecting the second component based on responses from the plurality of components in response to the query.

17. The non-transitory computer-readable device of claim 15 , wherein the one or more of the plurality of plug-ins comprise an SPI implementation and the host application communicates services of the host application to the SPI implementation of the one or more of the plurality of plug-ins.

18. The non-transitory computer-readable device of claim 15 , wherein the operations further comprise receiving an update to a first plug-in of the plurality of plug-ins and modifying a pointer of the first plug-in.

19. The non-transitory computer-readable device of claim 15 , wherein the first component of the plurality of components is the native component, and wherein routing the requested service to the second component of the plurality of components comprises routing the requested service to the plurality of plug-ins.

20. The non-transitory computer-readable device of claim 15 , wherein the first component of the plurality of components is one of the plurality of plug-ins, and wherein routing the requested service to the second component of the plurality of components comprises routing the requested service to the native component.

Assignments (2)
CHANGE OF NAME Recorded Nov 20, 2024
From: SALESFORCE.COM, INC.
To: SALESFORCE, INC.
Reel/Frame 069406/0699 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 6, 2020
From: BOVET, JEAN ELIE; GOLDBERG, STEPHEN; SIKORA, ALEXANDER; NEVES, JOÃO HENRIQUE PIMENTEL WANDERLEY; KHADIYA, NITISH; AGARWAL, SAKET
To: SALESFORCE.COM, INC.
Reel/Frame 054302/0065 →
Continuity (1)
Related Publication 20220147375A1 · May 12, 2022
References Cited (13)
US 6832223B1 · Scheifler · 2004 [cited by examiner]
US 8046778B1 · Getlin · 2011 [cited by examiner]
US 20080155405A1 · Lock · 2008 [cited by examiner]
US 20080301711A1 · Stark · 2008 [cited by examiner]
US 20090024992A1 · Kulaga · 2009 [cited by examiner]
US 20170365009A1 · Chen · 2017 [cited by examiner]
US 20180075231A1 · Subramanian · 2018 [cited by examiner]
The Java™ Tutorials; Creating Extensible Applications; archived Jul. 11, 2019; https://web.archive.org/web/20190711232851/https://docs.oracle.com/javase/tutorial/ext/basics/spi.html; 7 pages (Year: 2019). [cited by examiner]
Spring Framework Documentation—Core Technologies; https://docs.spring.io/spring-framework/docs/5.2.0.RELEASE/spring-framework-reference/core.html; Sep. 30, 2019; 282 pages (Year: 2019). [cited by examiner]
Martin Fowler; Inversion of Control Containers and the Dependency Injection pattern; https://martinfowler.com/articles/injection.html; Jan. 23, 2004; 30 pages (Year: 2004). [cited by examiner]
Decouple Your Code With Dependency Injection; https://belief-driven-design.com/decouple-your-code-with-dependency-injection-77b8d39cc93/; Feb. 25, 2020 (Year: 2020). [cited by examiner]
John et al.; Plux.NET—A Dynamic Plug-in Platform for Desktop and Web Applications in .NET; 2012; 18 pages (Year: 2012). [cited by examiner]
Reinhard Wolfinger; Dynamic Application Composition with Plux.NET; Jan. 2010; 157 pages (Year: 2010). [cited by examiner]