Method and system for monitoring and storage medium

CN115698946BActive Publication Date: 2026-09-29SNAP INC
View PDF 2 Cites 0 Cited by

Patent Information

Application Number
CN202180041351.5
Authority / Receiving Office
CN · China
Patent Type
Patents(China)
Current Assignee / Owner
Priority Date
2021-03-25
Filing Date
2021-06-02
Publication Date
2026-09-29
Estimated Expiration
2041-06-02

Smart Images

  • Figure CN115698946B_ABST
    Figure CN115698946B_ABST
Patent Text Reader

Abstract

Example developer tool systems provided by the messaging system include a software development kit (SDK) engagement monitor that allows for capturing application open events in third-party resources (e.g., third-party applications) that use the developer tool system. The SDK engagement monitor is configured to operate in a manner that protects the privacy of third-party developers and avoids passing personal identifiable information (PII) about third-party resource usage to the messaging system backend environment.
Need to check novelty before this filing date? Find Prior Art

Description

[0001] Related applications

[0002] This application claims priority to U.S. Provisional Application Serial No. 63 / 037,512, filed June 10, 2020, and U.S. Patent Application Serial No. 17 / 212,584, filed March 25, 2021, each of which is incorporated herein by reference in its entirety. Technical Field

[0003] This disclosure generally relates to the construction and use of software development kits (SDKs). Background Technology

[0004] The proliferation of computer-implemented programs that enable users to access content online and interact with other users continues to grow. Various computer-implemented applications exist that allow users to share content with other users through messaging clients. Some of these computer-implemented applications (called apps) can be designed to run on mobile devices such as phones, tablets, or wearable devices, while having backend services provided on server computer systems to perform operations that may require more resources than reasonably needed to perform on the client device (e.g., storing large amounts of data or performing computationally expensive processing). For example, messaging systems can provide various tools for modifying or enhancing content, utilizing the camera capabilities of mobile devices and content enhancement tools, and sharing the captured content via network communication. Selected features of computer-implemented applications can be made available to third-party application developers through one or more SDKs. Attached Figure Description

[0005] In drawings that are not necessarily drawn to scale, similar reference numerals may describe similar parts in different views. To facilitate identification of any particular element or action being discussed, one or more of the highest-order digits in the reference numerals indicate the drawing number in which the element was first introduced. Some embodiments are shown in the drawings by way of example rather than limitation, in which:

[0006] Figure 1 It is a graphical representation of a networked environment in which an SDK can be deployed to participate in the monitor, based on some examples.

[0007] Figure 2 It is a graphical representation of a messaging system with both client-side and server-side functionality, based on some examples.

[0008] Figure 3 It is a graphical representation based on examples such as data structures maintained in a database.

[0009] Figure 4It is a graphical representation based on some example messages.

[0010] Figure 5 This is a flowchart illustrating access restriction processing based on some examples.

[0011] Figure 6 It is a graphical representation of embedded SKB based on some examples.

[0012] Figure 7 This is a flowchart illustrating methods for monitoring the participation of embedded SKDs, based on some examples.

[0013] Figure 8 It is a graphical representation of a machine in the form of a computer system according to some examples, within which a set of instructions can be executed to cause the machine to perform any or more of the methods discussed herein according to some examples. Detailed Implementation

[0014] Implementations of this disclosure improve the functionality of computer-implemented applications by enhancing visibility into the actual and potential use of the SDK when it is embedded in a third-party application, while protecting user privacy by avoiding the transmission of personally identifiable information (PII) about third-party application users to the SDK provider system. The technical problem of monitoring potential engagement with SDKs embedded in third-party applications is solved by constructing an SDK engagement monitor and including it within the SDK embedded in the third-party application. Because opening a third-party application including an embedded SDK can potentially follow up with actions that use the SDK to access one or more functions provided by a backend system supporting the SDK, application open events and various associated information can be useful for predicting SDK utilization.

[0015] The SDK participation monitor is configured to capture system-initiated events and user-initiated events that indicate the opening of a third-party application embedded with the SDK. For the purposes of this specification, the event indicating the opening of a third-party application is referred to as an application open event. In response to detecting an application open event, the SDK participation monitor obtains associated information without a PPI from the detected event and transmits the obtained associated information to the SDK provider system, which is the backend system supporting the SDK. For the purposes of this disclosure, the communication triggered by the SDK participation monitor detecting an application open event, including the obtained associated information without a PPI, is referred to as an open event message.

[0016] For the purposes of this specification, the SDK participation monitor and one or more SDKs are collectively referred to as embedded SDKs. When embedded in a third-party application, each SDK facilitates access to selected functionalities provided by the SDK provider system. The SDK participation monitor can be used within a messaging system that hosts backend services for associated messaging clients, where the backend services for the associated messaging clients are the SDK provider system.

[0017] A messaging system, comprising a messaging client that runs on the client device and is supported by backend services provided on the messaging server system, is configured to enable users to capture images and videos using the camera device of the client device hosting the messaging client, and to share the captured content with other users via network communication. The messaging system may be configured to provide augmented reality (AR) components accessible via the messaging client. AR components can be used to modify the content captured by the camera device, for example, by overlaying pictures or animations on the captured image or video frames, or by adding three-dimensional (3D) effects, objects, text, and transformations.

[0018] The messaging system may include functionality that allows users to combine several content items, such as images or short videos, into a set, which can be broadcast when these content items are captured using a camera view screen of the messaging client. The camera view screen is a screen displayed by the messaging client that includes the output of the camera's digital image sensor, user-selectable elements operable to capture images or start and stop video recording via the camera, and may also display one or more user-selectable elements representing corresponding AR components. The messaging system may also enable users to create their own personalized cartoon avatars, which can be included in messages to make online communication more entertaining and expressive. To enable third-party developers to use some or all of these features—such as AR experiences, content item collections, and personalized cartoon avatars—the messaging system may use a developer tool server that maintains one or more SDKs that can be embedded in third-party applications, as well as an SKD engagement monitor, as embedded SDKs. Examples of one or more SDKs that can be embedded in third-party applications, as well as SKD engagement monitors, as embedded SDKs include AR toolkits, collection toolkits, and login toolkits. The AR toolkit is configured to enable users of third-party applications to access one or more AR widgets provided by the messaging system and / or facilitate the creation of new AR widgets by developers of third-party applications. For example, the AR toolkit could provide users of third-party applications with access to an AR widget that detects the position of a person's head captured by a digital image sensor and overlays an image of a party hat over the detected head position, so that the viewer sees a person wearing a party hat as presented on the camera-view screen. When the embedded SDK detects an event indicating engagement with the augmented reality toolkit, such as detecting a user-initiated gesture regarding associated visual control, the embedded SDK launches a messaging client installed on the same client device to the camera-view screen provided by that messaging client.

[0019] The Collections Toolkit is configured to enable users of third-party applications to access functionality that allows them to combine several content items, such as images or short videos, into collections, which can be broadcast as these content items are captured. The Login Toolkit enables users of the messaging system to connect to third-party applications using their credentials related to the messaging system.

[0020] The SDK participant monitor, included in the embedded SDK, detects each application open event and reports it to the messaging system as an open event message. Application open events indicate both the operation of launching the application and the operation of foregrounding the application. For the purposes of this specification, the operation of removing foreground focus from an application running on the client device is called backgrounding. The operation of restoring foreground focus to the application is called foregrounding. Foregrounding differs from launching an application because the application being foregrounded has previously been launched and is running in the background. Application open events can be caused, for example, by: activating a notification from the application, which is then displayed on the client device's screen; selecting an application from a carousel of one or more applications running in the background on the client device; or activating an icon representing the application on the client device's screen.

[0021] The SDK Participation Monitor tracks the number of app open events on client devices for each 24-hour period, represented by a calendar date. Whenever the SDK Participation Monitor detects an app open event, it updates the app open event count stored on the client device for that calendar date. In some examples, the SDK Participation Monitor generates a daily bucket identifier based on the updated app open event count and includes this generated daily bucket identifier, rather than the updated app open event count, in the open event message sent to the SDK provider system. The SDK Participation Monitor includes the calendar date associated with the app open event in the open event message, instead of the timestamp of the app open event. The calendar date associated with the app open event is generated by the SDK Participation Monitor in the form of day, month, and year. The SDK Participation Monitor generates the calendar date and daily bucket identifier on the client device. Generating calendar dates and daily bucket identifiers on the client device and sending the daily bucket identifiers instead of the application open event count and the calendar dates instead of the application open event timestamps to the SDK provider system helps protect the PPI of third-party application users from being leaked to the SDK provider system, since the SDK provider system can be operated by an entity different from the entity providing the third-party application.

[0022] In some examples, the generation of the daily bucket identifier involves: setting the daily bucket identifier to the app open event count if the updated app open event count is less than a first value (after updating the app open event count by incrementing the count in response to newly detected app open events); and setting the daily bucket identifier to a second value if the updated app open event count is greater than or equal to the first value. For example, if the app open event count is 10 or less, the SDK participation monitor sets the daily bucket identifier to the app open event count (if the app open event count is 1, the SDK participation monitor sets the daily bucket identifier to 1; if the app open event count is 2, the SDK participation monitor sets the daily bucket identifier to 2; if the app open event count is 3, the SDK participation monitor sets the daily bucket identifier to 3, and so on until the app open event count reaches 10). If the app open event count is greater than 10, the SDK participation monitor sets the daily bucket identifier to some other predetermined value, such as 10 or any other number, and includes that value as the daily bucket identifier in every subsequent open event message for that calendar date. It should be understood that various different patterns can be used to generate daily bucket identifiers, such as assigning different daily bucket identifiers to different value ranges. For example, bucket identifier "1" can be used to indicate that the number of detected events is between 1 and 3, bucket identifier "2" can be used to indicate that the number of detected events is between 4 and 12, bucket identifier "3" can be used to indicate that the number of detected events is greater than 12, and so on.

[0023] Open event messages can include information beyond the daily bucket identifier and associated calendar date, such as the identifier of a third-party application. In some examples, the SDK participation monitor is also configured to determine which SDKs are included in the embedded SDK and to send the corresponding identifiers of one or more SDKs in the embedded SDK as part of the open event message to the SDK provider system. An example of an SDK included in the embedded SDK is an Augmented Reality (AR) Toolkit, which provides third-party applications with access to AR experiences within the SDK provider system. When an embedded SDK including an AR Toolkit detects an event indicating participation by the AR Toolkit, the embedded SDK will be initiated by a messaging client provided by the SDK provider system to a camera device view screen provided by the messaging client.

[0024] Although the SDK participation monitor is described below in the context of messaging systems, the methods described herein can be advantageously used in a variety of computer-implemented applications that utilize the SDK.

[0025] Networked computing environment

[0026] Figure 1 This is a block diagram illustrating an example system 100 for exchanging data (e.g., messages and associated content) over a network. System 100 includes multiple instances of client devices 102, each instance hosting multiple applications including a messaging client 104 and a third-party application 103. The third-party application 103 is configured to enable users to access functionality provided by the third-party system 130.

[0027] Each message client 104 is communicatively coupled to other instances of message client 104 and message server system 108 via network 106 (e.g., the Internet).

[0028] The messaging client 104 is configured to communicate and exchange data with another messaging client 104 and with the messaging server system 108 via the network 106. The data exchanged between messaging clients 104 and between messaging client 104 and messaging server system 108 includes functions (e.g., commands for activating functions) and payload data (e.g., text, audio, video, or other multimedia data).

[0029] Message server system 108 provides server-side functionality to a specific message client 104 via network 106. While some functions of system 100 are described herein as being performed by message client 104 or message server system 108, the location of certain functions within message client 104 or message server system 108 can be a design choice. For example, it may be technically preferred that a technology and function be initially deployed within message server system 108, but later migrated to message client 104 with sufficient processing power on client device 102.

[0030] The message server system 108 supports various services and operations provided to the message client 104. Such operations include sending data to and receiving data from the message client 104, and processing data generated by the message client 104. As an example, this data may include message content, client device information, geolocation information, media enhancements and overlays, message content persistence conditions, social network information, and live event information. Data exchange within the system 100 is activated and controlled via functions available through the user interface (UI) of the message client 104.

[0031] Specifically, the process now turns to message server system 108. Application Programming Interface (API) server 110 is coupled to application server 112 and provides a programming interface to application server 112. Application server 112 is communicatively coupled to database server 118, which provides easy access to database 120. Web server 124 is coupled to application server 112 and provides a web-based interface to application server 112. For this purpose, web server 124 processes incoming network requests via Hypertext Transfer Protocol (HTTP) and several other related protocols. Database 120 stores data associated with messages processed by application server 112, such as profile data about a specific entity. In the case of an individual, profile data includes, for example, username, notification and privacy settings, as well as the user's self-reported age and records related to changes made by the user to their profile data.

[0032] Application Programming Interface (API) server 110 receives and sends message data (e.g., commands and message payloads) between client device 102 and application server 112. Specifically, API server 110 provides a set of interfaces (e.g., routines and protocols) that message client 104 can invoke or query to activate the functionality of application server 112. API server 110 exposes various functions supported by application server 112, including: account registration; login functionality; sending messages from one message client 104 to another message client 104 via application server 112; sending media files (e.g., images or videos) from message client 104 to message server 114 and enabling possible access by another message client 104; opening (e.g., application events related to message client 104); and various functions supported by developer tools provided by message server system 108 for use by third-party computer systems.

[0033] Application server 112 hosts several server applications and subsystems, including, for example, message server 114, image processing server 116, and social networking server 122. Message server 114 implements several message processing technologies and functions, particularly those related to the aggregation and other processing of content (e.g., text and multimedia content) included in messages received from multiple instances of message client 104. Image processing server 116 is dedicated to performing various image processing operations, typically relative to images or videos within the payload of messages sent from or received at message server 114. Social networking server 122 supports various social networking functions and services and makes these functions and services available to message server 114.

[0034] Figure 1The diagram also shows a developer tool server 117. Developer tool server 117 maintains one or more software development kits (SDKs) that enable users to integrate some of the functionality provided by message server system 108 into their applications (also referred to as third-party applications). The functionality provided by developer tool server 117 can be accessed from third-party computer systems via a developer portal, which can be accessed via a web browser. In some examples, the developer portal providing access to the functionality provided by developer tool server 117 to a third-party computer system (e.g., third-party system 130) can be downloaded to the third-party computer system, in which case a web browser may not be required. Third-party system 130 is shown as including developer portal 132. As mentioned above, developer portal 132 can be accessed via a web browser running on third-party system 130, or it can be downloaded to third-party system 130. As mentioned above, the functionality provided by third-party system 130 can be accessed by users via third-party application 103. Third-party application 103, installed on client device 102, is shown as including embedded SDK 105. Embedded SDK 105 includes the SDK participation monitor described above, and also includes one or more SDKs, each of which facilitates access to selected functions or a set of functions provided by the associated SDK provider system (i.e., in this example, by message server system 108).

[0035] System Architecture

[0036] Figure 2 This is a block diagram illustrating further details of system 100 according to some examples. Specifically, system 100 is shown as including a messaging client 104, a developer portal 132, and an application server 112. System 100 includes several subsystems supported on the client side by messaging client 104 and / or developer portal 132, and on the server side by application server 112. These subsystems include, for example, a short-lived timer system 202, a collection management system 204, and an enhancement system 206.

[0037] The short-lived timer system 202 is responsible for forcing temporary or time-limited access to content by the message client 104 and the message server 114. The short-lived timer system 202 includes several timers that selectively enable access to messages and associated content (e.g., for rendering and display) via the message client 104 based on duration and display parameters associated with the message or message set (e.g., a story). Further details regarding the operation of the short-lived timer system 202 are provided below.

[0038] The collection management system 204 is responsible for managing groups or collections of media (e.g., collections of text, images, video, and audio data). Collections of content (e.g., messages including images, videos, text, and audio) can be organized into "event libraries" or "event stories." Such collections can be made available for a specified time period, such as the duration of an event related to the content. For example, content related to a concert can be made available as a "story" during the duration of the concert. The collection management system 204 can also be responsible for publishing icons that notify the user interface of the messaging client 104 of the existence of a specific collection.

[0039] Furthermore, the collection management system 204 includes a curation interface 212 that enables collection managers to manage and curate specific content collections. For example, the curation interface 212 allows event organizers to curate content collections related to a specific event (e.g., removing inappropriate content or redundant messages). Additionally, the collection management system 204 employs machine vision (or image recognition technology) and content rules to automatically curate content collections. In some examples, users may be paid compensation for including user-generated content in the collection. In such cases, the collection management system 204 operates to automatically pay such users for using their content.

[0040] In some examples, functionality provided by the collection management system 204 can be made available to third-party developers for inclusion in associated third-party applications via developer tools server 117.

[0041] Enhancement system 206 provides various functions that enable users to enhance (e.g., annotate or otherwise modify or edit) media content that may be associated with a message. For example, enhancement system 206 provides functions related to generating and publishing media overlays for messages processed by system 100. The media overlays may be stored in database 120 and accessed through database server 118.

[0042] In some examples, augmentation system 206 is configured to provide access to AR components, which can be implemented using a programming language suitable for application development, such as JavaScript or Java, and identified by a corresponding AR component identifier in a message server system. AR components may include or reference various image processing operations corresponding to image modification, filtering, media overlay, transformation, etc. These image processing operations can provide an interactive experience of a real-world environment, where computer-generated perceptual information such as objects, surfaces, backgrounds, and lighting captured by digital image sensors or camera devices is augmented. In this case, the AR component includes a set of data, parameters, and other assets required to apply a selected augmented reality experience to an image or video feed.

[0043] In some implementations, the AR component includes a module configured to modify or transform image data presented within a graphical user interface (GUI) of a client device in a certain way. For example, complex additions or transformations can be performed on content images using AR component data, such as adding rabbit ears to a person's head in a video clip, adding floating hearts with a background color to a video clip, changing the proportions of features of a person within a video clip, or many other such transformations. This includes both real-time modifications and modifications to stored content, such as video clips in a gallery that can be modified using AR component modifications while the image is captured using a camera device associated with the client device and then displayed on the client device's screen.

[0044] Various augmented reality capabilities that can be provided by AR components include detecting objects (e.g., faces, hands, bodies, cats, dogs, surfaces, objects, etc.), tracking these objects as they leave, enter, and move around the field of view in a video frame, and modifying or transforming them while tracking them. In various implementations, different methods can be used to achieve such transformations. For example, some implementations may involve generating a 3D mesh model of one or more objects and using transformations and animated textures of the model within the video to achieve the transformation. In other implementations, tracking points on the object can be used to place an image or texture at the tracked location; this image or texture can be two-dimensional or three-dimensional. In still other implementations, neural network analysis of video frames can be used to place images, models, or textures within content (e.g., frames of images or videos). Therefore, AR component data refers both to the images, models, and textures used to create transformations within content and to the additional modeling and analysis information required to achieve such transformations using object detection, tracking, and placement.

[0045] In some examples, the functionality provided by the enhanced system 206 can be made available to third-party developers for inclusion in third-party applications via the developer tools server 117.

[0046] Data Architecture

[0047] Figure 3 This is a schematic diagram illustrating a data structure 300 that can be stored in a database 120 of a message server system 108, according to certain examples. Although the contents of the database 120 are shown to include several tables, it should be understood that the data can be stored in other types of data structures (e.g., as an object-oriented database).

[0048] Database 120 includes message data stored in message table 302. For any given message, this message data includes at least message sender data, message receiver (or recipient) data, and a payload. The message payload may include content generated using an SDK embedded in a third-party application. See below for reference. Figure 4 Further details describe information that can be included in the message and is contained within the message data stored in message table 302.

[0049] Entity table 304 stores entity data and (for example, links to entity diagram 306 and profile data 308). Entities for which records are maintained within entity table 304 can include individuals, company entities, organizations, objects, locations, events, etc. Regardless of entity type, any entity whose data is stored in message server system 108 can be an identifiable entity. Each entity is provided with a unique identifier and an entity type identifier (not shown).

[0050] Entity graph 306 stores information about relationships and associations between entities. For example, such relationships can be social, professional (e.g., working in a common company or organization), interest-based, or activity-based. Referring to the functionality provided by the AR component, entity graph 306 stores information that can be used to determine another profile representing the user controlling the associated client device, in cases where the AR component is configured to allow modification of the target media content object using a user's portrait image other than the portrait image of the user controlling the associated client device. As mentioned above, the user's portrait image can be stored in a user profile representing the user in the messaging system.

[0051] Profile data 308 stores various types of profile data about a specific entity. Based on privacy settings specified by the specific entity, profile data 308 can be selectively used and presented to other users of messaging system 100. In the case of an individual, profile data 308 includes, for example, a username, phone number, address, settings (e.g., notification and privacy settings), and an avatar representation (or a set of such avatar representations) selected by the user. A specific user can then selectively include one or more of these avatar representations within the content of messages transmitted via messaging system 100 and on a map interface displayed to other users by messaging client 104. The set of avatar representations may include “status avatars,” which present a graphical representation of a status or activity that a user can choose to communicate at a specific time.

[0052] Database 120 also stores augmented data in augmentation table 310. The augmented data is associated with and applied to videos (whose data is stored in video table 314) and images (whose data is stored in image table 316). In some examples, the augmented data is used by various AR components, including AR parts. An example of augmented data is a target media content object, as described above, which can be associated with AR components and used to generate AR experiences for the user.

[0053] Another example of augmented data is augmented reality (AR) tools that can be used in AR components to perform image transformations. Image transformations include real-time modifications to an image (e.g., a video frame) as it is captured using the digital image sensor of client device 102. The modified image is displayed along with the modifications on the screen of client device 102. AR tools can also be used to apply modifications to stored content, such as video clips or still images stored in a gallery. In client device 102, which has access to multiple AR tools, a user can apply different AR tools (e.g., by using different AR components configured to utilize different AR tools) to a single video clip to see how the different AR tools will modify the same video clip. For example, multiple AR tools applying different pseudo-random motion models can be applied to the same captured content by selecting different AR tools for the same captured content. Similarly, real-time video capture can be used with the illustrated modifications to show how the video image currently captured by the digital image sensor of the camera device provided by client device 102 will modify the captured data. Such data can be displayed on the screen without being stored in memory, or the content captured by the digital image sensor can be recorded and stored in memory with or without modification (or both). The messaging client 104 can be configured to include a preview function that can simultaneously show how modifications generated by different AR tools will look in different windows on the display. For example, this allows users to view multiple windows with different pseudo-random animations simultaneously displayed on the display.

[0054] In some examples, when a specific modification is selected along with the content to be transformed, the element to be transformed is identified by the computing device, and then, if the element to be transformed exists in a frame of the video, it is detected and tracked. The elements of the object are modified according to the modification request, thereby transforming the frames of the video stream. For different kinds of transformations, the transformation of the video stream frames can be performed using different methods. For example, for a frame transformation that primarily refers to changing the form of elements of an object, feature points of each element of the object are calculated (e.g., using an Active Shape Model (ASM) or other known methods). Then, a feature point-based mesh is generated for each of at least one element of the object. This mesh is used for subsequent stages of tracking the elements of the object in the video stream. During tracking, the mesh for each element is aligned with the position of each element. Then, additional points are generated on the mesh. A first set of first points is generated for each element based on the modification request, and a second set of points is generated for each element based on this first set of points and the modification request. The frames of the video stream can then be transformed by modifying the elements of the object based on the first and second sets of points and the mesh. In such a method, the background of the modified object can also be changed or distorted by tracking and modifying the background.

[0055] In some examples, transformations that alter some regions of an object using its elements can be performed by calculating feature points for each element of the object and generating a mesh based on those calculated feature points. Points are generated on the mesh, and then various regions are generated based on these points. The elements of the object are then tracked by aligning the region of each element with the position of each of at least one element, and the properties of the regions can be modified based on modification requests, thereby transforming frames of the video stream. Depending on the specific modification request, the properties of the mentioned regions can be transformed in different ways. Such modifications can involve: changing the color of the region; removing at least a portion of the region from the frames of the video stream; including one or more new objects in the region based on the modification request; and modifying or distorting the elements of the region or object. In various implementations, any combination of such modifications or other similar modifications can be used. For certain models to be animated, some feature points can be selected as control points to determine the entire state space for options used in model animation.

[0056] Story table 312 stores data relating to messages and collections of associated image, video, or audio data, compiled into collections (e.g., stories or galleries). The creation of a specific collection can be initiated by a specific user (e.g., each user maintaining records in entity table 304). A user can create a "personal story" in the form of a collection of content that has been created and sent / broadcast by that user. For this purpose, the user interface of messaging client 104 may include user-selectable icons to allow the sending user to add specific content to his or her personal story. In some examples, story table 312 stores one or more images or videos created using AR widgets.

[0057] The collection can also constitute a "live story" as a collection of content from multiple users, created manually, automatically, or using a combination of manual and automatic techniques. For example, a "live story" can constitute a curated stream of user-submitted content from different locations and events. For instance, a user with location services enabled on their client device and presenting options at a shared location event at a specific time can contribute content to a specific live story, for example, via the user interface of messaging client 104. Live stories can be identified to users by messaging client 104 based on their location. The end result is a "live story" told from a community perspective.

[0058] Another type of content collection is called a "location story," which allows users whose client devices 102 are located in a specific geographic location (e.g., on a college or university campus) to contribute to a specific collection. In some examples, contributing to a location story may require secondary authentication to verify that the end user belongs to a specific organization or other entity (e.g., a student on a university campus).

[0059] As mentioned above, video table 314 stores video data, which, in one example, is associated with a message whose records are maintained within message table 302. Similarly, image table 316 stores image data associated with messages whose message data is stored in entity table 304. Entity table 304 allows various enhancements from enhancement table 310 to be associated with various images and videos stored in image table 316 and video table 314.

[0060] Data communication architecture

[0061] Figure 4This is a schematic diagram illustrating the structure of message 400 according to some examples. Message 400 is generated by message client 104 for transmission to another message client 104 or message server 114. The content of a particular message 400 is used to populate message table 302 stored in database 120, which is accessible by message server 114. Similarly, the content of message 400 is stored in memory as "in transit" or "in flight" data of client device 102 or application server 112. In some examples, the content of message 400 includes images or videos created using AR components. Message 400 is shown as including the following example components:

[0062] • Message Identifier 402: A unique identifier that identifies message 400.

[0063] • Message text payload 404: The text to be generated by the user via the user interface of the client device 102 and included in message 400.

[0064] • Message Image Payload 406: Image data captured by the camera component of the client device 102 or retrieved from the memory component of the client device 102 and included in the message 400. The image data of the message 400 used for sending or receiving may be stored in the image table 316. In some examples, the image data of the message 400 used for sending or receiving is an image enhanced using an SDK embedded in a third-party application.

[0065] • Message video payload 408: Video data captured by the camera device component or retrieved from the memory component of the client device 102 and included in the message 400. The video data used to send or receive the message 400 may be stored in the video table 314.

[0066] • Message audio payload 410: Audio data captured by the microphone or retrieved from the memory component of the client device 102 and included in message 400.

[0067] • Message enhancement data 412: Represents enhancement data (e.g., filters, stickers, or other annotations or enhancements) to be applied to the message image payload 406, message video payload 408, and message audio payload 410 of message 400. Enhancement data for sending or receiving message 400 can be stored in enhancement table 310.

[0068] • Message duration parameter 414: A parameter value that indicates the amount of time, in seconds, for the content of the message (e.g., message image payload 406, message video payload 408, message audio payload 410) to be presented to the user via the message client 104 or made accessible to the user.

[0069] • Message geolocation parameter 416: Geolocation data (e.g., latitude and longitude coordinates) associated with the content payload of the message. The payload may include multiple message geolocation parameter 416 values, each of which is associated with a content item included in the content (e.g., a specific image within the message image payload 406, or a specific video within the message video payload 408).

[0070] • Message Story Identifier 418: An identifier value that identifies one or more sets of content (e.g., “Stories” identified in Story Table 312) associated with a specific content item in the message image payload 406 of message 400. For example, the identifier value can be used to associate multiple images within the message image payload 406 with multiple sets of content, respectively.

[0071] • Message Label 420: Each message 400 can be labeled with multiple labels, each of which indicates the subject of the content included in the message payload. For example, in the case where a specific image in the message image payload 406 depicts an animal (e.g., a lion), a label value indicating the relevant animal can be included within message label 420. The label values ​​can be generated manually based on user input, or automatically using, for example, image recognition.

[0072] • Message sender identifier 422: An identifier (e.g., a messaging system identifier, email address, or device identifier) ​​that indicates the user of the client device 102 on which message 400 is generated and from which message 400 is sent.

[0073] • Message recipient identifier 424: An identifier (e.g., a message system identifier, email address, or device identifier) ​​indicating the user of the client device 102 to which message 400 is addressed.

[0074] The content (e.g., values) of various components of message 400 can be pointers to locations of stored content data values ​​in tables. For example, image values ​​in message image payload 406 can be pointers to locations (or addresses of locations) within image table 316. Similarly, values ​​in message video payload 408 can point to data stored in video table 314, values ​​stored in message enhancement 412 can point to data stored in enhancement table 310, values ​​stored in message story identifier 418 can point to data stored in story table 312, and values ​​stored in message sender identifier 422 and message receiver identifier 424 can point to user records stored in entity table 304.

[0075] Time-based access restriction architecture

[0076] Figure 5 This is a schematic diagram illustrating access restriction processing 500, according to which access to content (e.g., a short-lived message 502 and the multimedia payload of associated data) or a collection of content (e.g., a short-lived message group 504) can be time-restricted (e.g., short-lived). In some examples, the content of short-lived message 502 includes images enhanced using an SDK embedded in a third-party application.

[0077] A brief message 502 is shown as associated with a message duration parameter 506, the value of which determines the amount of time the brief message 502 will be displayed by the message client 104 to the receiving user. In one example, depending on the amount of time specified by the sending user using the message duration parameter 506, the receiving user may view the brief message 502 for up to 10 seconds.

[0078] The message duration parameter 506 and the message receiver identifier 424 are shown as inputs to a message timer 512, which is responsible for determining the amount of time for which the brief message 502 will be shown to a specific receiving user identified by the message receiver identifier 424. Specifically, the brief message 502 will only be shown to the relevant receiving user within the time period determined by the value of the message duration parameter 506. The message timer 512 is shown as providing an output to a more generalized brief timer system 202, which is responsible for the overall timing of displaying content (e.g., the brief message 502) to the receiving user.

[0079] exist Figure 5 The short message 502 is shown as being included within a short message group 504 (e.g., a collection of messages in a personal story or event story). The short message group 504 has an associated group duration parameter 508, the value of which determines the duration for which the short message group 504 is presented and accessible to users of the messaging system 100. For example, the group duration parameter 508 could be the duration of a concert, where the short message group 504 is a collection of content related to that concert. Alternatively, the user (owner user or curator user) can specify the value of the group duration parameter 508 when setting up and creating the short message group 504.

[0080] Furthermore, each short message 502 within a short message group 504 has an associated group participation parameter 510, the value of which determines the duration for which the short message 502 is accessible within the context of the short message group 504. Therefore, a particular short message group 504 can "expire" and become inaccessible within its context before the short message group 504 itself expires according to the group duration parameter 508. The group duration parameter 508, the group participation parameter 510, and the message receiver identifier 424 each provide input to a group timer 514, which first operationally determines whether a particular short message 502 of the short message group 504 will be displayed to a specific receiving user, and if so, determines for how long. Note that the short message group 504 also knows the identity of the specific receiving user due to the message receiver identifier 424.

[0081] Therefore, the group timer 514 operationally controls the overall lifetime of the associated ephemeral message group 504 and the individual ephemeral messages 502 included within it. In one example, each ephemeral message 502 within the ephemeral message group 504 remains viewable and accessible for a period of time specified by the group duration parameter 508. In another example, within the context of the ephemeral message group 504, a particular ephemeral message 502 may expire based on the group participation parameter 510. Note that even within the context of the ephemeral message group 504, the message duration parameter 506 can still determine the duration for which a particular ephemeral message 502 is displayed to the receiving user. Therefore, the message duration parameter 506 determines the duration for which a particular ephemeral message 502 is displayed to the receiving user, regardless of whether the receiving user views the ephemeral message 502 within or outside the context of the ephemeral message group 504.

[0082] Furthermore, the short-lived timer system 202 can operationally remove a specific short-lived message 502 from the short-lived message group 504 based on determining that the associated group participation parameter 510 has expired. For example, when the sending user has established a group participation parameter 510 for 24 hours from the date of publication, the short-lived timer system 202 will remove the relevant short-lived message 502 from the short-lived message group 504 after the specified 24 hours. The short-lived timer system 202 also operates to remove the short-lived message group 504 when the group participation parameter 510 for each short-lived message 502 within the short-lived message group 504 has expired, or when the short-lived message group 504 itself has expired according to the group duration parameter 508.

[0083] In certain use cases, the creator of a specific ephemeral message group 504 can specify an indefinite group duration parameter 508. In this case, the expiration of the group participation parameter 510 of the last remaining ephemeral message 502 within the ephemeral message group 504 will determine when the ephemeral message group 504 itself expires. In this case, adding a new ephemeral message 502 with a new group participation parameter 510 to the ephemeral message group 504 effectively extends the lifetime of the ephemeral message group 504 to a value equal to the group participation parameter 510.

[0084] In response to the short-lived timer system 202 determining that a short-lived message group 504 has expired (e.g., is no longer accessible), the short-lived timer system 202 communicates with the messaging system 100 (and, in particular, the messaging client 104) to prevent the markers (e.g., icons) associated with the relevant short-lived message group 504 from being displayed in the user interface of the messaging client 104. Similarly, when the short-lived timer system 202 determines that the message duration parameter 506 of a particular short-lived message 502 has expired, the short-lived timer system 202 causes the messaging client 104 to stop displaying the markers (e.g., icons or text labels) associated with the short-lived message 502.

[0085] Embedded SDK

[0086] Figure 6 This is a diagrammatic representation based on some examples of the embedded SDK 600. For example... Figure 6 As shown, the embedded SDK 600 includes an SDK participation monitor 610 and several development toolkits—an augmented reality toolkit 620, an assembly toolkit 630, and a login toolkit 640.

[0087] Augmented Reality Kit 620 is configured to allow users of third-party applications to access data generated by a reference. Figure 2 The described augmented reality system 206 provides at least some of the functionalities. For example, the augmented reality kit 620 can provide users of third-party applications with access to an AR component that detects the position of a person's head captured by a digital image sensor and overlays an image of a party hat over the detected head position, so that a viewer will see a person wearing a party hat presented on a camera device view screen. When the embedded SDK 600 detects an event indicating engagement of the augmented reality kit 620 (e.g., a user-initiated gesture regarding associated visual control), the embedded SDK 600 launches the messaging client 104 to the camera device view screen provided by the messaging client 104.

[0088] Collection Toolkit 630 is configured to enable users of third-party applications to access functionality that allows them to combine several content items (such as images or short videos) into a collection that can be broadcast when these content items are captured. Login Toolkit 640 is configured to enable users of third-party applications to connect to the third-party application using their credentials related to the messaging system.

[0089] The SDK participation monitor 610 includes an event detector 612, a calendar date generator 614, and a daily session bucket builder 616. The event detector 612 detects each application open event and reports it to the SDK provider system as an open event message. As described above, an application open event indicates the operation of launching the application and the operation of bringing the application to the foreground. The calendar date generator 614 generates a calendar date associated with the application open event in the form of day, month, and year. Whenever the event detector 612 detects an application open event, the daily session bucket builder 616 updates the count of application open events for that calendar date stored on the client device, generates a daily bucket identifier based on the updated count, and includes the generated daily bucket identifier in the open event message for transmission to the SDK provider system. See also... Figure 7 This describes some of the operations performed by the embedded SDK 600.

[0090] Methods for monitoring the participation of embedded SDKs

[0091] Figure 7 This is a flowchart illustrating methods for monitoring the participation of an embedded SDK, based on some examples. While the described flowchart may show operations as sequential processing, many operations within an operation can be executed in parallel or simultaneously. Furthermore, the order of operations can be rearranged. Processing terminates when its operations are completed. Processing can correspond to methods, procedures, algorithms, etc. The operations of a method can be executed in whole or in part, can be combined with some or all of the operations in other methods, and can be executed by any number of different systems, such as the system described herein or any part thereof (e.g., a processor included in any system).

[0092] In various examples, some or all of the processing logic resides on the client device 102. When an application open event indicating that the third-party application should be opened on the client device is detected in the SDK embedded in the third-party application, method 700 begins at operation 710. At operation 720, the calendar date of the detected application open event is determined. At operation 730, the count of application open events is updated for that calendar date, and at operation 740, a daily bucket identifier is generated based on the updated count of application open events. At operation 750, as described above, the embedded SDK sends the calendar date and bucket identifier to the SDK provider system in the form of an open event message.

[0093] Machine architecture

[0094] Figure 8 This is a schematic representation of machine 800, within which instructions 808 (e.g., software, programs, applications, applets, or other executable code) can be executed to cause machine 800 to perform any or more of the methods discussed herein. For example, instructions 808 can cause machine 800 to perform any or more of the methods described herein. Instructions 808 transform a general, non-programmed machine 800 into a specific machine 800 programmed to perform the described and illustrated functions in the described manner. Machine 800 can operate as a standalone device or can be coupled (e.g., networked) to other machines. In a networked deployment, machine 800 can operate as a server machine or a client machine in a server-client network environment, or as a peer machine in a peer-to-peer (or distributed) network environment. Machine 800 may include, but is not limited to: server computers, client computers, personal computers (PCs), tablet computers, laptop computers, netbooks, set-top boxes (STBs), personal digital assistants (PDAs), entertainment media systems, cellular phones, smartphones, mobile devices, wearable devices (e.g., smartwatches), smart home devices (e.g., smart appliances), other smart devices, web devices, network routers, network switches, network bridges, or any machine capable of sequentially or otherwise executing instructions 808 specifying actions to be taken by machine 800. Furthermore, although only a single machine 800 is shown, the term "machine" should also be considered to include a collection of machines that individually or jointly execute instructions 808 to perform any or more of the methods discussed herein. For example, machine 800 may include client device 102 or any of a plurality of server devices forming part of message server system 108. In some examples, machine 800 may also include both client and server systems, wherein certain operations of a particular method or algorithm are performed on the server side and certain operations of a particular method or algorithm are performed on the client side.

[0095] Machine 800 may include processor 802, memory 804, and input / output I / O components 838, which may be configured to communicate with each other via bus 840. In the example, processor 802 (e.g., a central processing unit (CPU), a reduced instruction set computing (RISC) processor, a complex instruction set computing (CISC) processor, a graphics processing unit (GPU), a digital signal processor (DSP), an application-specific integrated circuit (ASIC), a radio frequency integrated circuit (RFIC), another processor, or any suitable combination thereof) may include, for example, processor 806 and processor 810 that execute instruction 808. The term "processor" is intended to include multi-core processors, which may include two or more independent processors (sometimes referred to as "cores") capable of executing instructions simultaneously. Although Figure 8 Multiple processors 802 are shown, but machine 800 may include a single processor with a single core, a single processor with multiple cores (e.g., a multi-core processor), multiple processors with a single core, multiple processors with multiple cores, or any combination thereof.

[0096] Memory 804 includes main memory 812, static memory 814, and memory cells 816, all of which are accessible by processor 802 via bus 840. Main memory 804, static memory 814, and memory cells 816 store instructions 808 embodying any one or more of the methods or functions described herein. Instructions 808 may also reside wholly or partially in main memory 812, in static memory 814, in machine-readable medium 818 within memory cells 816, within at least one processor in processor 802 (e.g., within the processor's cache memory), or in any suitable combination thereof during execution by machine 800.

[0097] I / O component 838 may include various components for receiving input, providing output, generating output, sending information, exchanging information, capturing measurement results, etc. The specific I / O component 838 included in a particular machine will depend on the type of machine. For example, a portable machine such as a mobile phone may include a touch input device or other such input mechanism, while a headless server machine may not include such a touch input device. It should be understood that I / O component 838 may include... Figure 8Many other components are not shown. In various examples, I / O component 838 may include user output component 824 and user input component 826. User output component 824 may include visual components (e.g., displays such as plasma display panels (PDPs), light-emitting diode (LED) displays, liquid crystal displays (LCDs), projectors, or cathode ray tube (CRT) displays), auditory components (e.g., speakers), haptic components (e.g., vibration motors, resistance mechanisms), other signal generators, etc. User input component 826 may include alphanumeric input components (e.g., keyboards, touchscreens configured to receive alphanumeric input, photoelectric keyboards, or other alphanumeric input components), pointing-based input components (e.g., mice, touchpads, trackballs, joysticks, motion sensors, or other pointing instruments), haptic input components (e.g., physical buttons, touchscreens providing positioning and force for touch or touch gestures, or other haptic input components), audio input components (e.g., microphones), etc.

[0098] In other examples, I / O component 838 may include biometric component 828, motion component 830, environmental component 832, or position component 834, as well as a wide variety of other components. For example, biometric component 828 includes components for detecting expressions (e.g., hand expressions, facial expressions, voice expressions, body posture, or eye tracking), measuring biosignals (e.g., blood pressure, heart rate, body temperature, sweating, or brain waves), and recognizing people (e.g., voice recognition, retinal recognition, facial recognition, fingerprint recognition, or EEG-based recognition). Motion component 830 includes accelerometer components (e.g., accelerometers), gravity sensor components, and rotation sensor components (e.g., gyroscopes).

[0099] The environmental component 832 includes, for example, one or more camera devices (with still image / photograph and video capabilities), lighting sensor components (e.g., photometers), temperature sensor components (e.g., one or more thermometers that detect ambient temperature), humidity sensor components, pressure sensor components (e.g., barometers), acoustic sensor components (e.g., one or more microphones that detect background noise), proximity sensor components (e.g., infrared sensors that detect nearby objects), gas sensors (e.g., gas detection sensors that detect the concentration of hazardous gases for safety purposes or measure pollutants in the atmosphere), or other components that can provide indications, measurements, or signals corresponding to the surrounding physical environment.

[0100] Regarding the camera device, client device 102 may have a camera device system including, for example, a front-facing camera on the front surface of client device 102 and a rear-facing camera on the rear surface of client device 102. The front-facing camera may be used, for example, to capture still images and videos (e.g., “selfies”) of the user of client device 102, and then the still images and videos may be enhanced using the enhancement data (e.g., filters) described above. The rear-facing camera may be used, for example, to capture still images and videos in a more conventional camera device mode, wherein these images are similarly enhanced using the enhancement data. In addition to the front-facing and rear-facing cameras, client device 102 may also include a 360° camera for capturing 360° photos and videos.

[0101] Furthermore, the camera system of the client device 102 may include dual rear cameras (e.g., a main camera and a depth-sensing camera), or even include triple, quadruple, or quintuple rear camera configurations on the front and rear sides of the client device 102. For example, these multi-camera systems may include wide-angle cameras, ultra-wide-angle cameras, telephoto cameras, macro cameras, and depth sensors.

[0102] The position component 834 includes a positioning sensor component (e.g., a GPS receiver component), an altitude sensor component (e.g., an altimeter or barometer that detects air pressure and from which altitude can be obtained), an orientation sensor component (e.g., a magnetometer), etc.

[0103] Various technologies can be used to implement communication. I / O component 838 also includes communication component 836, which is operable to couple machine 800 to network 820 or device 822 via a suitable coupling or connection. For example, communication component 836 may include a network interface component for interfacing with network 820 or another suitable device. In other examples, communication component 836 may include wired communication components, wireless communication components, cellular communication components, near field communication (NFC) components, Bluetooth® components (e.g., Bluetooth® Low Energy), Wi-Fi® components, and other communication components that provide communication via other modalities. Device 822 may be another machine or any peripheral device from a variety of peripheral devices (e.g., a peripheral device coupled via USB).

[0104] Furthermore, the communication component 836 may detect identifiers or include components operable to detect identifiers. For example, the communication component 836 may include a radio frequency identification (RFID) tag reader component, an NFC smart tag detection component, an optical reader component (e.g., an optical sensor for detecting one-dimensional barcodes such as Universal Product Code (UPC) barcodes, multi-dimensional barcodes such as Quick Response (QR) codes, Aztec codes, data matrices, data symbols, MaxiCode, PDF418, Ultra Code, UCC RSS-2D barcodes, and other optical codes), or an acoustic detection component (e.g., a microphone for identifying tagged audio signals). Additionally, various information can be obtained via the communication component 836, such as location via Internet Protocol (IP) geolocation, location via Wi-Fi® signal triangulation, location via detecting NFC beacon signals that can indicate a specific location, etc.

[0105] Various memories (e.g., main memory 812, static memory 814, and the memory of processor 802) and storage units 816 may store one or more sets of instructions and data structures (e.g., software) implemented or used by any or more of the methods or functions described herein. When executed by processor 802, these instructions (e.g., instruction 808) enable various operations to implement the disclosed examples.

[0106] Instructions 808 can be sent or received over network 820 via a network interface device (e.g., a network interface component included in communication component 836), using a transmission medium and employing any of several known transmission protocols (e.g., Hypertext Transfer Protocol (HTTP)). Similarly, instructions 808 can be sent or received via a transmission medium coupled to device 822 (e.g., peer-to-peer coupling).

[0107] Glossary

[0108] "Carrier signal" refers to any intangible medium capable of storing, encoding, or carrying instructions to be executed by a machine, and includes digital or analog communication signals or other intangible media to facilitate the communication of such instructions. Instructions can be sent or received over a network using a transmission medium via a network interface device.

[0109] "Client device" refers to any machine that interfaces with a communication network to obtain resources from one or more server systems or other client devices. Client devices can be, but are not limited to, mobile phones, desktop computers, laptop computers, portable digital assistants (PDAs), smartphones, tablet computers, ultrabooks, netbooks, laptop computers, multiprocessor systems, microprocessor-based or programmable consumer electronics, game consoles, set-top boxes, or any other communication device that a user can use to access the network.

[0110] "Communications network" refers to one or more parts of a network, which can be an ad hoc network, intranet, extranet, virtual private network (VPN), local area network (LAN), wireless LAN (WLAN), wide area network (WAN), wireless WAN (WWAN), metropolitan area network (MAN), the Internet, a part of the Internet, a part of the Public Switched Telephone Network (PSTN), a Common Old-Style Telephone Service (POTS) network, a cellular telephone network, a wireless network, a Wi-Fi® network, other types of networks, or a combination of two or more such networks. For example, a network or part of a network may include a wireless network or a cellular network, and the coupling may be a Code Division Multiple Access (CDMA) connection, a Global System for Mobile Communications (GSM) connection, or other types of cellular or wireless coupling. In this example, coupling can enable any data transmission technology of various types, such as Single Carrier Radio Transmission (1xRTT), Evolved Data Optimization (EVDO), General Packet Radio Service (GPRS), Enhanced Data Rate GSM Evolution (EDGE), 3rd Generation Partnership Project (3GPP) including 3G, 4th Generation Wireless (4G) networks, Universal Mobile Telecommunications System (UMTS), High-Speed ​​Packet Access (HSPA), Global Microwave Access Interoperability (WiMAX), Long Term Evolution (LTE) standards, other standards defined by various standards setting organizations, other long-distance protocols, or other data transmission technologies.

[0111] A “component” refers to a device, physical entity, or logic having boundaries defined by functional or subroutine calls, branch points, APIs, or other technologies that provide partitioning or modularity for specific processing or control functions. A component can be combined with other components via its interface to perform machine processing. A component can be an encapsulated functional hardware unit designed for use with other components and can be part of a program that typically performs a specific function in a related function. A component can constitute a software component (e.g., code implemented on a machine-readable medium) or a hardware component. A “hardware component” is a tangible unit capable of performing certain operations and can be configured or arranged in some physical manner. In various example implementations, one or more computer systems (e.g., standalone computer systems, client computer systems, or server computer systems) or one or more hardware components (e.g., processors or processor groups) of a computer system can be configured by software (e.g., an application or application portion) to operate to perform certain operations as described herein. Hardware components can also be implemented mechanically, electronically, or in any suitable combination thereof. For example, a hardware component may include dedicated circuitry or logic permanently configured to perform certain operations. Hardware components can be dedicated processors, such as field-programmable gate arrays (FPGAs) or application-specific integrated circuits (ASICs). Hardware components can also include programmable logic or circuitry temporarily configured by software to perform certain operations. For example, a hardware component may include software executed by a general-purpose processor or other programmable processor. Once configured by such software, the hardware component becomes a specific machine (or a specific part of a machine) uniquely tailored to perform the configured function, and no longer a general-purpose processor. It should be understood that the decision to implement a hardware component mechanically, in a dedicated and permanently configured circuit, or in a temporarily configured (e.g., software-configured) circuit can be driven by cost and time considerations. Therefore, the phrase "hardware component" (or "hardware-implemented component") should be understood to include tangible entities, i.e., entities physically constructed, permanently configured (e.g., hardwired), or temporarily configured (e.g., programmed) to operate or perform certain operations described herein. Considering the implementation where hardware components are temporarily configured (e.g., programmed), it is not necessary to configure or instantiate each hardware component at any given time. For example, in cases where the hardware components include a general-purpose processor configured as a dedicated processor via software, this general-purpose processor can be configured as different dedicated processors (e.g., including different hardware components) at different times. Therefore, the software configures one or more specific processors to constitute a specific hardware component at one moment and different hardware components at different times. Hardware components can provide information to and receive information from other hardware components. Therefore, the described hardware components can be considered communicatively coupled.In the presence of multiple hardware components, communication can be achieved through signal transmission (e.g., via appropriate circuitry and buses) between or among the two or more hardware components. In embodiments where multiple hardware components are configured or instantiated at different times, such communication between hardware components can be achieved, for example, by storing information in a memory structure accessed by the multiple hardware components and retrieving information from said memory structure. For example, one hardware component can perform an operation and store the output of that operation in a memory device communicatively coupled to it. Another hardware component can then access the memory device at a subsequent time to retrieve and process the stored output. Hardware components can also initiate communication with input or output devices and can operate on resources (e.g., information collection). The various operations of the example methods described herein can be performed at least in part by one or more processors that are temporarily configured (e.g., by software) or permanently configured to perform the relevant operations. Whether temporarily or permanently configured, such processors can constitute processor-implemented components that operate to perform one or more operations or functions described herein. As used herein, "processor-implemented component" refers to a hardware component implemented using one or more processors. Similarly, the methods described herein can be implemented at least in part by processors, wherein a particular processor or one or more processors are examples of hardware. For example, at least some operations of the method can be performed by one or more processors 802 or processor-implemented components. Furthermore, one or more processors can also operate to support the execution of related operations in a “cloud computing” environment or as “Software as a Service” (SaaS). For example, at least some operations can be performed by a group of computers (as an example of machines including processors), wherein these operations are accessible via a network (e.g., the Internet) and via one or more appropriate interfaces (e.g., APIs). The execution of certain operations can be distributed among processors, not residing within a single machine, but deployed across multiple machines. In some example implementations, the processor or processor-implemented component can reside in a single geographic location (e.g., within a home environment, office environment, or server cluster). In other example implementations, the processor or processor-implemented component can be distributed across multiple geographic locations.

[0112] "Computer-readable storage medium" refers to both machine-readable storage media and transmission media. Therefore, the term includes both storage devices / media and carrier / modulated data signals. The terms "machine-readable medium," "computer-readable medium," and "device-readable medium" refer to the same thing and can be used interchangeably in this disclosure.

[0113] "Machine storage medium" refers to one or more storage devices and media (e.g., centralized or distributed databases, and associated caches and servers) that store executable instructions, routines, and data. Therefore, this term should be considered to include, but is not limited to, solid-state memory and optical and magnetic media, including memory internal or external to the processor. Specific examples of machine storage media, computer storage media, and device storage media include: non-volatile memory, including, for example, semiconductor memory devices such as erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM), FPGAs, and flash memory devices; disks, such as internal hard disks and removable disks; magneto-optical disks; and CD-ROM and DVD-ROM disks. The terms "machine storage medium," "device storage medium," and "computer storage medium" refer to the same thing and are used interchangeably in this disclosure. The terms "machine storage medium," "computer storage medium," and "device storage medium" expressly exclude carrier waves, modulated data signals, and other such media, at least some of which are covered by the term "signal medium."

[0114] "Non-transitory computer-readable storage medium" refers to a tangible medium capable of storing, encoding, or carrying instructions that can be executed by a machine.

[0115] "Signal medium" means any intangible medium capable of storing, encoding, or carrying instructions executable by a machine, and includes digital or analog communication signals or other intangible media that facilitate the transmission of software or data. The term "signal medium" should be considered to include any form of modulated data signal, carrier wave, etc. The term "modulated data signal" means a signal whose characteristics are set or altered in a manner that encodes information in the signal. The terms "transmission medium" and "signal medium" mean the same thing and may be used interchangeably in this disclosure.

Claims

1. A method for monitoring, comprising: The participating software development kit (SDK) embedded in the third-party application detects an application opening event that indicates the foreground of the third-party application, which is opened in advance and executed in the background on the client device. The participating SSD is provided by a software development kit provider system different from the third-party provider system that supports the third-party application. as well as In response to the detection of the application opening event: Identify a second software development kit that causes the application to open, the second software development kit being embedded in the third-party application; Determine the calendar date of the application open event, update the count of the application open event for the calendar date, and generate a daily bucket identifier based on the updated count of the application open event; as well as An open event message is sent to the software development kit provider system. The open event message includes: data of the second software development kit embedded in the third-party application that caused the application to open; the calendar date; and the bucket identifier.

2. The method according to claim 1, wherein, The application open event, which indicates the foregrounding of the third-party application on the client device, includes logging into the third-party application on the client device using credentials associated with a messaging client supported by the software development kit provider's system.

3. The method according to claim 1, wherein, The application open event, which indicates the foregrounding of the third-party application on the client device, includes placing the third-party application in the foreground on the screen of the client device.

4. The method according to claim 1, wherein, Generating the daily bucket identifier includes: if the count of the updated application open events is less than a first value, then setting the daily bucket identifier to the count of the updated application open events.

5. The method according to claim 4, wherein, Generating the daily bucket identifier includes setting the daily bucket identifier to a second value if the count of updated application open events is greater than or equal to the first value.

6. The method according to claim 1, wherein, The open event message includes the identifier of the third-party application.

7. The method according to claim 1, wherein, The open event message includes a corresponding identifier embedded in one or more other software development kits within the third-party application.

8. The method according to claim 7, wherein, An augmented reality toolkit embedded in one or more other software development kits in the third-party application provides the third-party application with access to augmented reality experiences in the software development kit provider's system.

9. The method according to claim 8, wherein, The second software development kit that causes the application open event is the augmented reality toolkit, wherein detecting the application open event indicating the foregrounding of the third-party application on the client device includes: The system detects events indicating the involvement of the augmented reality toolkit and, in response, initiates a messaging client supported by the software development kit provider system to a camera device view screen provided by the messaging client.

10. The method according to claim 1, wherein, Determining the calendar date of the application open event, updating the count of application open events for the calendar date, and generating the daily bucket identifier are performed on the client device.

11. A system for monitoring, comprising: One or more processors; as well as A non-transitory computer-readable storage medium including instructions that, when executed by the one or more processors, cause the system to perform operations, including: The participating software development kit (SDK) embedded in the third-party application detects an application launch event indicating that the third-party application is in the foreground, the third-party application is pre-launched and running in the background on the client device, and the participating SSD is provided by a different SSD provider system than the third-party provider system supporting the third-party application; and In response to the detection of the application opening event: Identify a second software development kit that causes the application to open, the second software development kit being embedded in the third-party application; Determine the calendar date of the application open event, update the application open event count for the calendar date, and generate a daily bucket identifier based on the updated application open event count; and An open event message is sent to the software development kit provider system. The open event message includes: data of the second software development kit embedded in the third-party application that caused the application to open; the calendar date; and the bucket identifier.

12. The system according to claim 11, wherein, The application open event, which indicates the foregrounding of the third-party application on the client device, includes logging into the third-party application on the client device using credentials associated with a messaging client supported by the software development kit provider's system.

13. The system according to claim 11, wherein, The application open event, which indicates the foregrounding of the third-party application on the client device, includes placing the third-party application in the foreground on the screen of the client device.

14. The system according to claim 11, wherein, Generating the daily bucket identifier includes: if the count of the updated application open events is less than a first value, then setting the daily bucket identifier to the count of the updated application open events.

15. The system according to claim 14, wherein, Generating the daily bucket identifier includes setting the daily bucket identifier to a second value if the count of updated application open events is greater than or equal to the first value.

16. The system according to claim 11, wherein, The open event message includes the identifier of the third-party application.

17. The system according to claim 11, wherein, The open event message includes a corresponding identifier embedded in one or more other software development kits within the third-party application.

18. The system according to claim 17, wherein, An augmented reality toolkit embedded in one or more other software development kits in the third-party application provides the third-party application with access to augmented reality experiences in the software development kit provider's system.

19. The system according to claim 18, wherein, The second software development kit that causes the application open event is the augmented reality toolkit, wherein the detection of the application open event indicating the foregrounding of the third-party application at the client device includes: The system detects events indicating the involvement of the augmented reality toolkit and, in response, initiates a messaging client supported by the software development kit provider system to a camera device view screen provided by the messaging client.

20. A machine-readable non-transitory storage medium having instruction data, the instruction data being executable by a machine to cause the machine to perform an operation, the operation comprising: The participating software development kit (SDK) embedded in the third-party application detects an application opening event that indicates the foreground of the third-party application, which is opened in advance and executed in the background on the client device. The participating SSD is provided by a software development kit provider system different from the third-party provider system that supports the third-party application. as well as In response to the detection of the application opening event: Identify a second software development kit that causes the application to open, the second software development kit being embedded in the third-party application; Determine the calendar date of the application open event, update the count of the application open event for the calendar date, and generate a daily bucket identifier based on the updated count of the application open event; as well as An open event message is sent to the software development kit provider system. The open event message includes: data of the second software development kit embedded in the third-party application that caused the application to open; the calendar date; and the bucket identifier.

Citation Information

Patent Citations

  • User data store for online advertisement events

    US20170178253A1

  • Data processing method, server, terminal, and system

    WO2018153207A1