https://github.com/aptabase/aptabase-cpp
https://github.com/aptabase/aptabase-cpp
Last synced: 11 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/aptabase/aptabase-cpp
- Owner: aptabase
- Created: 2025-06-14T12:09:21.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-07-23T18:27:47.000Z (11 months ago)
- Last Synced: 2025-07-23T21:14:40.758Z (11 months ago)
- Language: C++
- Size: 26.4 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README

# C++ SDK for Aptabase
## Design Goals
The Aptabase Client SDK for C++ was designed with versatility and flexibility as core principles, enabling integration across a wide spectrum of applications, from video games to web servers. This chapter outlines the design goals that guided the development of this SDK.
### Adaptability to Various Execution Models
One of the primary design goals was to support different execution models, accounting for the diverse ways applications handle timing and processing:
- **Application-Loop Ticking**: Support for applications that operate on a frame-by-frame basis, where the analytics events can be transported during the loop
- **Thread-based Processing**: Compatibility with systems that prefer to allocate dedicated threads for analytics operations
- **Boost-like Asynchronous Implementation**: Support for applications using asynchronous programming patterns similar to Boost.Asio, allowing for non-blocking operations (Work in progress)
### Abstraction of Networking Implementation
C++ offers numerous approaches to handling HTTP requests, ranging from platform-specific APIs to third-party libraries. To accommodate this diversity, we:
- Implemented an abstract interface for HTTP operations, allowing different HTTP client implementations to be plugged in
- Provided default implementations for cpp-httplib and boost, while making it easy to substitute custom networking code
## Integration
Aptabase-cpp uses CMake as it's build system. It's user's responsibility to supply all dependencies. Also supplied networking implementation does not compile by default.
CMake example with boost enabled
```cmake
# Code to include boost and openssl dependencies
# Based on your setup, it may be add_subdirectory or find_package
set(CMAKE_APTABASE_USE_BOOST ON)
add_subdirectory(path/to/aptabase-cpp)
```
CMake example with cpp-httplib enabled
```cmake
# Code to include cpp-httplib and openssl dependencies
# Based on your setup, it may be add_subdirectory or find_package
set(CMAKE_APTABASE_USE_HTTPLIB ON)
add_subdirectory(path/to/aptabase-cpp)
```
## Examples
Here is minimal aptabase-cpp example, required to submit your first event to analytics system
```c++
#include
#include
#include
int main(){
std::string aptabase_app_key = "";
std::string aptabase_app_url = "https://your.aptabase.url"
bool aptabase_is_debug = true;
Aptabase::Analytics aptabase(
std::make_unique(),
aptabase_app_key,
aptabase_app_url
aptabase_is_debug
);
aptabase.StartSession();
aptabase.RecordEvent("TestEvent1");
aptabase.EndSession();
}
```
Event may have additional attributes of std::string, float or double types
```c++
aptabase.RecordEvent("TestEvent1", {{"Attribute1", 0.f}, {"Attribute2", 234.0}, {"Attribute3", "Value"}});
```
By default, unique sessionId is generated each StartSession call.
Custom sessionId also can be provided.
```c++
std::string customSessionId = "12345";
aptabase.StartSession(customSessionId);
aptabase.RecordEvent("TestEvent1");
aptabase.EndSession();
```
System attributes can be supplied and/or changed in runtime.
```c++
aptabase.SetLocale("en-US");
aptabase.SetAppVersion("0.0.1");
aptabase.SetOsName("Linux");
aptabase.SetOsVersion("5.17");
aptabase.SetDebug(true);
aptabase.RecordEvent("TestEvent1");
aptabase.SetDebug(false);
aptabase.RecordEvent("TestEvent1");
```