logoutExtension method
Future<String>
logoutExtension({
- required SipInfoData sipInfoData,
- required PushNotifParams pushNotifParams,
Implementation
Future<String> logoutExtension({
required SipInfoData sipInfoData,
required PushNotifParams pushNotifParams,
}) async {
final deviceTokenRes = await PushVoipNotif.getDeviceToken();
final fcmToken = await PushVoipNotif.getFCMToken();
final pnPushParams = PnPushParams(
pnProvider: Platform.isAndroid ? 'fcm' : 'apns',
pnParam: Platform.isAndroid
? pushNotifParams.bundleId
: '${pushNotifParams.teamId}.${pushNotifParams.bundleId}.voip',
pnPrid: deviceTokenRes,
fcmToken: fcmToken,
);
await deleteExtRegisterAor(
sipInfoData: sipInfoData,
pnPushParams: pnPushParams,
);
await removeDeviceToken(
deviceToken: deviceTokenRes,
domain: sipInfoData.registerServer,
extension: sipInfoData.accountName.toString(),
);
final String authString = base64Encode(utf8.encode(
'${sipInfoData.userName}@${sipInfoData.registerServer}:${sipInfoData.authPass}'));
final String authorization = 'Basic $authString';
// Check how many devices are currently online for this extension.
// Only call logoutPbx if this is the last remaining device (total_device_online == 1),
// to avoid logging out other active sessions on different devices.
final checkRes = await checkDeviceOnline(
domain: sipInfoData.registerServer,
extension: sipInfoData.accountName.toString(),
);
final totalDeviceOnline = checkRes?.data.totalDeviceOnline ?? 1;
if (totalDeviceOnline <= 1) {
await logoutPbx(
extension: sipInfoData.accountName.toString(),
authorization: authorization,
apiUrl: sipInfoData.apiUrl,
unregisterPbx: true,
);
} else {
_logger.info(
'Skip logoutPbx: extension ${sipInfoData.accountName} still has $totalDeviceOnline devices online.',
);
}
return 'UNREGISTER';
}