trackUserLogin method
Implementation
Future<PamResponse> trackUserLogin(String custID,
{Map<String, dynamic>? payload}) async {
return await queue.add(() async {
try {
var loginPayload = Map<String, dynamic>.from(payload ?? {});
var notiKey =
Platform.isAndroid ? "android_notification" : "ios_notification";
var deletePayload = <String, dynamic>{
"_delete_media": {notiKey: ""}
};
if (config?.loginKey == "") {
loginPayload["customer"] = custID;
} else {
loginPayload[config?.loginKey ?? "customer"] = custID;
}
final previousDestination = await _createTrackingDestination();
final deleteResponse = await _postTrackerTo(
"delete_media", deletePayload, previousDestination);
if (deleteResponse.error != null) {
await _activateCustomer(custID);
return deleteResponse;
}
if (previousDestination.sessionType == _TrackingSessionType.public) {
final publicLoginResponse =
await _postTrackerTo("login", loginPayload, previousDestination);
if (publicLoginResponse.error != null) {
await _activateCustomer(custID);
return publicLoginResponse;
}
}
await _activateCustomer(custID);
final loginDestination = await _createTrackingDestination();
final response =
await _postTrackerTo("login", loginPayload, loginDestination);
final push = await getPushToken();
if (push != null && response.error == null) {
await _setDeviceToken(push);
}
return response;
} catch (error, stackTrace) {
return _createInternalErrorResponse(
"USER LOGIN ERROR", error, stackTrace);
}
});
}