callWithDeviceToken static method
Implementation
static Future<AppticsResponse?> callWithDeviceToken({
String? userId,
required Function httpCall
}) async {
try {
final validConfigs = await AppticsConfigs.getValidConfigs();
if (validConfigs == null) {
return AppticsResponse.failureResponse();
}
AppticsDeviceInfo? deviceInfo = await AppticsDeviceRegistrar().syncDevice();
if (deviceInfo == null) {
return AppticsResponse.failureResponse();
}
AppticsUser? userInfo;
String? token;
if (userId != null) {
userInfo = await AppticsUserManager().syncUser(userId);
if (userInfo == null) {
return null;
}
token = await AppticsBearerManager().getBearerToken(deviceInfo.deviceId, false);
} else {
token = await AppticsBearerManager().getBearerToken(deviceInfo.anonymousId, false);
}
if (token == null) {
return AppticsResponse.failureResponse();
}
var request = httpCall(validConfigs, token , deviceInfo, userInfo?.appticsUserId);
var url = Uri.https(
request.baseDomain,
request.urlPath,
request.queryParams
);
AppticsDebugLog.info(url.toString());
var response = await http.post(url, headers: request.headers, body: request.body);
AppticsDebugLog.info(response.body);
try {
final appticsResponse = AppticsResponse.fromJson(jsonDecode(response.body));
if (appticsResponse.statusCode == AppticsStatusCodes.SessionTokenExpired) {
String? refreshedToken;
if (userId != null) {
refreshedToken = await AppticsBearerManager().getBearerToken(deviceInfo.deviceId, true);
} else {
refreshedToken = await AppticsBearerManager().getBearerToken(deviceInfo.anonymousId, true);
}
if (refreshedToken != null) {
var retryRequest = httpCall(validConfigs, token , deviceInfo, userInfo?.appticsUserId);
var retryResponse = await http.post(url, headers: retryRequest.headers, body: retryRequest.body);
AppticsDebugLog.info(retryResponse.body);
return Future.value(AppticsResponse.fromJson(jsonDecode(retryResponse.body)));
}
return Future.value(AppticsResponse.failureResponse());
}
} catch(e) {
AppticsDebugLog.error(e.toString());
}
return Future.value(AppticsResponse.fromJson(jsonDecode(response.body)));
} catch (exeception) {
AppticsDebugLog.error('Exception while syncing $exeception');
}
return Future.value(AppticsResponse.failureResponse());
}