register static method
Future<void>
register({
- required SDKEnvironment environment,
- String? baseURL,
- String? accessToken,
Register device callbacks with C++ (full async init, Phase 2) Must be called during SDK init after platform adapter
Implementation
static Future<void> register({
required SDKEnvironment environment,
String? baseURL,
String? accessToken,
}) async {
_environment = environment;
_baseURL = baseURL;
_accessToken = accessToken;
// Register callbacks if not already done in Phase 1
if (!_callbacksRegistered) {
registerCallbacks();
}
if (_isRegistered) {
_logger.debug('Device already fully registered');
return;
}
// Initialize SharedPreferences
_prefs = await SharedPreferences.getInstance();
// Pre-cache device ID
await _getOrCreateDeviceId();
try {
final lib = PlatformLoader.loadCommons();
// Allocate callbacks struct
_callbacksPtr = calloc<RacDeviceCallbacksStruct>();
final callbacks = _callbacksPtr!;
// Set callback function pointers
callbacks.ref.getDeviceInfo =
Pointer.fromFunction<RacDeviceGetInfoCallbackNative>(
_getDeviceInfoCallback);
callbacks.ref.getDeviceId =
Pointer.fromFunction<RacDeviceGetIdCallbackNative>(
_getDeviceIdCallback, _exceptionalReturnNull);
callbacks.ref.isRegistered =
Pointer.fromFunction<RacDeviceIsRegisteredCallbackNative>(
_isRegisteredCallback, _exceptionalReturnInt32);
callbacks.ref.setRegistered =
Pointer.fromFunction<RacDeviceSetRegisteredCallbackNative>(
_setRegisteredCallback);
callbacks.ref.httpPost =
Pointer.fromFunction<RacDeviceHttpPostCallbackNative>(
_httpPostCallback, _exceptionalReturnInt32);
callbacks.ref.userData = nullptr;
// Register with C++
final setCallbacks = lib.lookupFunction<
Int32 Function(Pointer<RacDeviceCallbacksStruct>),
int Function(Pointer<RacDeviceCallbacksStruct>)>(
'rac_device_manager_set_callbacks');
final result = setCallbacks(callbacks);
if (result != RacResultCode.success) {
_logger.warning('Failed to register device callbacks',
metadata: {'code': result});
calloc.free(callbacks);
_callbacksPtr = null;
return;
}
_isRegistered = true;
_logger.debug('Device callbacks registered successfully');
} catch (e, stack) {
_logger.debug('Device registration not available: $e', metadata: {
'stack': stack.toString(),
});
_isRegistered = true; // Mark as registered to avoid retry loops
}
}