start method

void start({
  1. required String serverUrl,
  2. bool debugLogs = false,
  3. OnAutoReauthenticationFails? onAutoReauthenticationFails,
  4. Future<WebRTCParams> getWebRTCParams(
    1. USER_ID userId
    )?,
})

Init and start Askless. This method should be called before making any operations using Askless.

serverUrl The server URL, must start with ws:// or wss://. Example: ws://192.168.0.8:3000.

debugLogs Show Askless internal logs for debugging

onAutoReauthenticationFails is a callback that is triggered once the automatic re-authentication attempt fails. This happens when the user loses the internet connection and Askless tries to reconnect, but the previous credential is no longer valid. This is a good place to handle the logic of refreshing the Access Token or moving the user to the logout page. onAutoReauthenticationFails is NOT called after AsklessClient.instance.authenticate(..) is finished.

getWebRTCParams For video and audio calls only. (optional)

⚠️ Requires configuration, click here to proceed

A function that returns a future object of type WebRTCParams which allows you to set configuration and constraints Map objects from WebRTC, it's recommended to set your TURN servers in the configuration field.

Example:

   void main() {
     AsklessClient.instance.start(
         serverUrl: 'ws://192.168.0.8:3000',
         debugLogs: false,
         onAutoReauthenticationFails: (String credentialErrorCode, void Function() clearAuthentication) {
           // Add your logic to handle when the user credential
           // is no longer valid
           if (credentialErrorCode == "EXPIRED_ACCESS_TOKEN") {
             refreshTheAccessToken();
           } else {
             clearAuthentication();
             goToLoginPage();
           }
         },
         // Only in case you want to use video and/or audio calls:
         getWebRTCParams: (userId) => Future.value(
             WebRTCParams(
                 configuration: {
                   'iceServers': [
                     {
                       "urls": [
                         'stun:stun1.l.google.com:19302',
                         'stun:stun2.l.google.com:19302'
                       ],
                     },
                     {
                       // setting up TURN servers are important for Apps behind symmetric nat
                       "urls": "turn:a.relay.metered.ca:80",
                       "username": "turn.username",
                       "credential": "turn.password",
                     },
                     {
                       "urls": "turn:a.relay.metered.ca:80?transport=tcp",
                       "username": "turn.username",
                       "credential": "turn.password",
                     }
                   ]
                 }
             )
         )
     );

     runApp(const MyApp());
   }

Implementation

void start({
  required String serverUrl,
  bool debugLogs = false,
  OnAutoReauthenticationFails? onAutoReauthenticationFails,
  Future<WebRTCParams> Function(USER_ID userId)? getWebRTCParams,
}) {
  _getWebRTCParams = getWebRTCParams ?? (userId) => Future.value(
      WebRTCParams(configuration: {
        'iceServers': [
          {
            "urls":   [
              'stun:stun1.l.google.com:19302',
              'stun:stun2.l.google.com:19302'
            ],
          }
        ]
      })
  );
  _startedAt = DateTime.now();
  setAsklessLogger(Logger(debugLogs: debugLogs));
  _checkStartTasks();
  getIt.get<ConnectionService>().start(serverUrl: serverUrl);
  getIt.get<AuthenticateService>().start(onAutoReauthenticationFails: onAutoReauthenticationFails);
}