MatDialog oturumu mobil tarayıcılarda çalışmıyor

oy
10

20 dakika boyunca boşta kalırsa kullanıcıyı uyarmak istiyorum. Böylece bir hizmet yarattı.

Masaüstü ile iyi çalışıyor ama cep telefonunda görünmüyor ve bazen ekran birkaç saat boyunca arka planda kalıyorsa, oturum kapatma iletişim ekranı tekrar sayfaya girdikten sonra geri sayımı başlattı.

Yani çıkış yapmalıyım ve giriş sayfasını görmeliyim ama burada birkaç saat sonra çıkış uyarısı geri sayım sayfasını gösteriyor, mobil tarayıcıda görünmüyor.

İşte kodum lütfen hangi mantığın eksik olduğunu bana bildirin.

İşte Service.ts dosyası. check () her 5 saniyede bir çağrılır ve çıkış uyarısı 20 saniyede gösterilir ...

const MINUTES_UNITL_AUTO_LOGOUT = 0.2; // 1 mins- 20
const CHECK_INTERVAL = 5000; // checks every 5 secs- 5000

@Injectable({
  providedIn: root,
})
export class AutoLogoutService {
  logOutInterval: any;

  constructor(
    private localStorage: LocalStoreManager,
    private authService: AuthService,
    public dialog: MatDialog
  ) {
    this.localStorage.savePermanentData(
      Date.now().toString().toString(),
      DBkeys.AUTO_LOGOUT
    );
    this.initListener();
  }

  initListener() {
    document.body.addEventListener(click, () => this.reset());
    document.body.addEventListener(mouseover, () => this.reset());
    document.body.addEventListener(mouseout, () => this.reset());
    document.body.addEventListener(keydown, () => this.reset());
    document.body.addEventListener(keyup, () => this.reset());
    document.body.addEventListener(keypress, () => this.reset());
  }

  reset() {
    this.setLastAction(Date.now());
  }

  initInterval() {
    this.logOutInterval = setInterval(() => {
      this.check();
    }, CHECK_INTERVAL);
  }
  clearInterval() {
    clearInterval(this.logOutInterval);
  }

  check() {
    const now = Date.now();
    const timeleft = this.getLastAction() + MINUTES_UNITL_AUTO_LOGOUT * 60 * 1000;
    const diff = timeleft - now;
    const isTimeout = diff < 0;
    console.log(diff);
    if (isTimeout && !this.authService.isLogoutDialogOpenned) {
      this.authService.isLogoutDialogOpenned = true;
      this.dialog
        .open(LogoutDialog, {
          maxWidth: 100vw,
        })
        .afterClosed()
        .subscribe((result) => {
          this.authService.isLogoutDialogOpenned = false;
        });
    }
  }

  public getLastAction() {
    return parseInt(this.localStorage.getData(DBkeys.AUTO_LOGOUT));
  }

  public setLastAction(lastAction: number) {
    this.localStorage.savePermanentData(
      lastAction.toString(),
      DBkeys.AUTO_LOGOUT
    );
  }
}
Oluştur 15/05/2020 saat 13:34
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Cep telefonuna inanıyorum, kullanıcı tarayıcıyı küçültüldüğünde, cep telefonları ram yönetimi için arka plan uygulamasını otomatik olarak öldürdüğü için mantığınız yürütmeyi durdurur ve tarayıcıyı yeniden başlattığında komut dosyanız tekrar başlar. Ayrıca yok etme veya pencere üzerinde oturum açmalısınız.

Cevap 23/05/2020 saat 09:56
kaynak kullanıcı

oy
0

Öneriler için teşekkürler, ancak aşağıdaki çözüm benim için çalıştı

Arka planda çalıştığı ngZone kullanıldı

initInterval() {
    this.ngZone.runOutsideAngular(() => {
      this.logOutInterval = setInterval(() => {
        this.check();
      }, CHECK_INTERVAL);
    })
  }
  clearInterval() {
    clearInterval(this.logOutInterval);
  }

  check() {
    const now = Date.now();
    const timeleft =
      this.getLastAction() + MINUTES_UNITL_AUTO_LOGOUT * 60 * 1000;
    const diff = timeleft - now;
    const isTimeout = diff < 0;
    const isBackgroundLogoutEnabled = diff < -ONE_MINUTE;

    this.ngZone.run(() => {
      if (isTimeout && !this.authService.isLogoutDialogOpenned) {
        this.authService.isLogoutDialogOpenned = true;
        this.dialog
          .open(LogoutDialog, {
            maxWidth: "100vw",
          })
          .afterClosed()
          .subscribe((result) => {
            this.authService.isLogoutDialogOpenned = false;
          });
      }
      if(isBackgroundLogoutEnabled){
        this.clearInterval();
        this.authService.isLogoutDialogOpenned = false;
        this.authService.logout();
        this.authService.redirectLogoutUser();
        this.dialog.closeAll();
      }
    });
  }
Cevap 26/05/2020 saat 15:58
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more