- Когда приложение переходит в автономный режим (режим полета или отсутствие Wi-Fi), иногда (в моем случае каждый раз) не удается обнаружить подключение к сети.
- Я пробовал Network.addListener('networkStatusChange'), ручной опрос с помощью Network.getStatus() и постановку в очередь автономных действий — ни один из них не работает надежно.
- Запустите приложение на устройстве iOS или в симуляторе.
- Переключитесь в автономный режим.
- Переключитесь обратно в онлайн.
- Обратите внимание, что онлайн-обнаружение не работает.
. Однако ни одно из предложенных решений не решило проблему в моем случае.
Как я могу надежно определить, когда приложение iOS снова подключается к сети? Существуют ли известные способы обхода или исправления этого ограничения?
минимальный воспроизводимый пример:
// sandbox-code: https://github.com/sidharth74659/capaci ... rk-ios-mwe
// Reproduces only on iOS (device & simulator). Android works correctly.
import { CommonModule } from '@angular/common';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { PluginListenerHandle } from '@capacitor/core';
import { Network } from '@capacitor/network';
import {
IonButton,
IonContent,
IonHeader,
IonItem,
IonList,
IonTitle,
IonToolbar
} from '@ionic/angular/standalone';
@Component({
standalone: true,
selector: 'app-home',
templateUrl: 'home.page.html',
imports: [
CommonModule,
IonHeader,
IonToolbar,
IonTitle,
IonContent,
IonButton,
IonList,
IonItem
],
})
export class HomePage implements OnInit, OnDestroy {
isOnline = false;
logs: string[] = [];
networkListener?: PluginListenerHandle;
async ngOnInit() {
const status = await Network.getStatus();
this.isOnline = status.connected;
this.log(`Initial getStatus(): ${this.state()}`);
this.networkListener = await Network.addListener(
'networkStatusChange',
status => {
this.isOnline = status.connected;
this.log(`networkStatusChange fired: ${this.state()}`);
}
);
}
ngOnDestroy() {
this.networkListener?.remove();
}
async checkNetworkStatus() {
const status = await Network.getStatus();
this.isOnline = status.connected;
this.log(`Manual getStatus(): ${this.state()}`);
}
private log(message: string) {
const time = new Date().toLocaleTimeString();
this.logs.unshift(`${time} - ${message}`);
}
private state() {
return this.isOnline ? 'ONLINE' : 'OFFLINE';
}
}
Capacitor Network iOS MWE
{{ isOnline ? 'ONLINE' : 'OFFLINE' }}
Check Network.getStatus()
{{ log }}
Подробнее здесь: https://stackoverflow.com/questions/798 ... g-capacito
Мобильная версия