App Context API for Unreal SDK
App Context provides easy-to-use, serverless storage for user and channel data you need to build innovative, reliable, scalable applications. Use App Context to easily store metadata about your application users and channels, and their membership associations, without the need to stand up your own databases.
PubNub also triggers events when object data is changed: set, updated, or removed from the database. At the same time, making a request to set the same data that already exist, doesn't trigger any event. Clients can receive these events in real time and update their front-end application accordingly.
User
Get Metadata for All Users
Returns a paginated list of User Metadata objects, optionally including the custom data object for each.
Method(s)
- Blueprint
- C++
Method variants
You can also call the GetAllUserMetadataRaw
variant of this method which takes String values for Include
and Sort
instead of the FPubnubGetAllInclude
and FPubnubGetAllSort
structs.
PubnubSubsystem->GetAllUserMetadata(
FOnGetAllUserMetadataResponse OnGetAllUserMetadataResponse,
FPubnubGetAllInclude Include = FPubnubGetAllInclude(),
int Limit = 100,
FString Filter = "",
FPubnubGetAllSort Sort = FPubnubGetAllSort(),
FString PageNext = "",
FString PagePrev = ""
);
Parameter | Description |
---|---|
OnGetAllUserMetadataResponse * | The callback function used to handle the result in JSON format. |
Include Type: FPubnubGetAllInclude | A comma-separated list of property names to include in the response. |
Limit Type: int | The maximum number of results to return (default: 100). |
Filter Type: FString | Expression used to filter the results. Check online documentation to see exact filter formulas. |
Sort Type: FPubnubGetAllSort | Key-value pair of a property to sort by, and a sort direction. For example: {name: 'asc'} |
PageNext Type: FString | A string to retrieve the next page of results (if applicable). |
PagePrev Type: FString | A string to retrieve the previous page of results (if applicable). Ignored if PageNext is provided. |
Count Type: EPubnubTribool enum | Whether to include a total count of users in the response (default: not set). |
FPubnubGetAllInclude
Field | Type | Description |
---|---|---|
IncludeCustom | bool | Whether to include the membership Custom field. |
IncludeStatus | bool | Whether to include the membership Status field. |
IncludeType | bool | Whether to include the membership Type field. |
IncludeTotalCount | bool | Whether to include the total count. |
FPubnubGetAllSort
Field | Type | Description |
---|---|---|
GetAllSort | TArray<FPubnubGetAllSingleSort> | Array of sorts for Membership related function. The order matters, sorts will be applied from the first index to the last. |
Basic Usage
Reference code
This example is a self-contained code snippet ready to be run. It includes necessary imports and executes methods with console logging. Use it as a reference when working with other examples in this document.
Using Raw Method
#include "Kismet/GameplayStatics.h"
#include "PubnubSubsystem.h"
UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(this);
UPubnubSubsystem* PubnubSubsystem = GameInstance->GetSubsystem<UPubnubSubsystem>();
// Create a pubnub response delegate
// you MUST implement your own callback function to handle the response
FOnGetAllUserMetadataResponse OnGetAllUserMetadataResponse;
OnGetAllUserMetadataResponse.BindDynamic(this, &AMyActor::OnGetAllUserMetadataResponse);
int Limit = 10; // Limit to 10 objects
EPubnubTribool Count = PT_False; // Don't include total count
// Fetch all user metadata using Raw method
show all 16 linesUsing Non-Raw Method
#include "Kismet/GameplayStatics.h"
#include "PubnubSubsystem.h"
UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(this);
UPubnubSubsystem* PubnubSubsystem = GameInstance->GetSubsystem<UPubnubSubsystem>();
// Create a pubnub response delegate
FOnGetAllUserMetadataResponse OnGetAllUserMetadataResponse;
OnGetAllUserMetadataResponse.BindDynamic(this, &AMyActor::OnGetAllUserMetadataResponse);
// Create include and sort parameters
FPubnubGetAllInclude Include;
Include.IncludeCustom = true;
Include.IncludeStatus = true;
show all 32 linesReturns
This method returns the FOnGetAllUserMetadataResponse
struct.
FOnGetAllUserMetadataResponse
Field | Type | Description |
---|---|---|
Status | int | HTTP code of the result of the operation. |
UsersData | TArray<FPubnubUserData>& | Aa array of FPubnubUserData structs which are the users with their associated User metadata. |
PageNext | FString | Random string returned from the server, indicating a specific position in a data set. Used for forward pagination, it fetches the next page, allowing you to continue from where you left off. |
PagePrev | FString | Random string returned from the server, indicating a specific position in a data set. Used for backward pagination, it fetches the previous page, enabling access to earlier data. Ignored if the pageNext parameter is supplied. |
FPubnubUserData
Field | Type | Description |
---|---|---|
UserID | FString | Unique user identifier. If not supplied, then the current user's User is used. |
UserName | FString | Display name for the user. |
ExternalID | FString | User's identifier in an external system. |
ProfileUrl | FString | The URL of the user's profile picture. |
Email | FString | The user's email address. |
Custom | FString | JSON providing custom data about the user. Values must be scalar only; arrays or objects are not supported. |
Status | FString | User status. Max. 50 characters. |
Type | FString | User type. Max. 50 characters. |
Updated | FString | The date when the user's metadata was last updated. |
ETag | FString | Information on the object's content fingerprint. |
JSON Response
{
"Uuids": [
{
"Uuid": "uuid-1",
"Name": "John Doe",
"Email": "john.doe@pubnub.com",
"ExternalId": "",
"ProfileUrl": "",
"Custom": "",
"Updated": "2020-06-17T16:28:14.060718Z"
},
{
"Uuid": "uuid-2",
"Name": "Bob Cat",
"Email": "bobc@example.com",
show all 29 linesGet User Metadata
Returns metadata for the specified User, optionally including the custom data object for each.
Method(s)
- Blueprint
- C++
PubnubSubsystem->GetUserMetadata(
FString Include,
FString User,
FOnGetUserMetadataResponse OnGetUserMetadataResponse
);
Parameter | Description |
---|---|
Include Type: FString | A comma delimited string with additional/complex user attributes to include in response. Use "" if you don't want to retrieve additional attributes. |
User Type: FString | The metadata ID for which to retrieve the user object. Can't be empty. |
OnGetUserMetadataResponse * | The callback function used to handle the result. |
Basic Usage
#include "Kismet/GameplayStatics.h"
#include "PubnubSubsystem.h"
UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(this);
UPubnubSubsystem* PubnubSubsystem = GameInstance->GetSubsystem<UPubnubSubsystem>();
// Create a pubnub response delegate
// you MUST implement your own callback function to handle the response
FOnGetUserMetadataResponse OnGetUserMetadataResponse;
OnGetUserMetadataResponse.BindDynamic(this, &AMyActor::OnGetUserMetadataResponse);
FString Include = ""; // No additional attributes
FString User = "uuid-1";
PubnubSubsystem->GetUserMetadata(Include, Limit, Start, End, Count, OnGetUserMetadataResponse);
Returns
This method returns the FOnGetUserMetadataResponse
struct.
FOnGetUserMetadataResponse
Field | Type | Description |
---|---|---|
Status | int | HTTP code of the result of the operation. |
UserData | FPubnubUserData | Aa instance of FPubnubUserData struct which is the user with their associated User metadata. |
JSON Response
{
"Uuid": "uuid-1",
"Name": "John Doe",
"Email": "john.doe@pubnub.com",
"ExternalId": "",
"ProfileUrl": "",
"Custom": "",
"Updated": "2020-06-17T16:28:14.060718Z"
}
Set User Metadata
Unsupported partial updates of custom metadata
The value of the custom metadata parameter sent in this method always overwrites the value stored on PubNub servers. If you want to add new custom data to an existing one, you must:
- Get the existing metadata and store it locally.
- Append the new custom metadata to the existing one.
- Set the entire updated custom object.
Set metadata for a User in the database, optionally including the custom data object for each.
Method(s)
- Blueprint
- C++
PubnubSubsystem->SetUserMetadata(
FString User,
FString Include,
FString UserMetadataObj
);
Parameter | Description |
---|---|
User Type: FString | The metadata ID for which to retrieve the user object. Can't be empty. |
Include Type: FString | A comma delimited string with additional/complex user attributes to include in response. Use "" if you don't want to retrieve additional attributes. |
UserMetadataObj Type: FString | The JSON string with the definition of the User Metadata object to create. |
API limits
To learn about the maximum length of parameters used to set user metadata, refer to REST API docs.
Basic Usage
#include "Kismet/GameplayStatics.h"
#include "PubnubSubsystem.h"
UGameInstance* GameInstance = UGameplayStatics::GetGameInstance(this);
UPubnubSubsystem* PubnubSubsystem = GameInstance->GetSubsystem<UPubnubSubsystem>();
FString User = "user123"; // Example User Metadata ID
FString Include = ""; // No additional attributes
FString UserMetadataObj = "{\"name\":\"John Doe\",\"email\":\"johndoe@example.com\"}"; // Example JSON object
// Call the SetUserMetadata method
PubnubSubsystem->SetUserMetadata(User, Include, UserMetadataObj);
Returns
{
"Uuid": "uuid-1",
"Name": "John Doe",
"Email": "john.doe@pubnub.com",
"ExternalId": "",
"ProfileUrl": "",
"Custom": "",
"Updated": "2020-06-17T16:28:14.060718Z"
}
Other Examples
Iteratively update existing metadata
#include "PubnubSubsystem.h"
#include "GameFramework/Actor.h"
#include "Kismet/GameplayStatics.h"
UCLASS()
//Replace MYPROJECT with name of your project
class MYPROJECT_API AMyActor : public AActor
{
GENERATED_BODY()
protected:
virtual void BeginPlay() override;
private:
show all 70 lines