使用中の@capgo/capacitor-webview-crash
iOSとAndroidでウェブビュークラッシュを検出して、死んだウェブビューを再起動し、長時間実行中のウェブビューを一定間隔でリサイクルして、メモリ圧力がOOMに変化する前に。
インストール
npm install @capgo/capacitor-webview-crash
npx cap sync
このプラグインが公開するもの
- iOSとAndroidでウェブビュークラッシュ後にネイティブ再起動
- キオスク、POS、サイン、スキャナ、ダッシュボードなどの長時間実行するアプリ用に、一定間隔でネイティブウェブビューをリスタート
restartWebView- JavaScriptがページリロードなしで新しいネイティブウェブビューを要求できるようにします。WebViewCrashPluginConfig- タイプplugins.WebViewCrashオプションcapacitor.config.ts.getPendingCrashInfoインnull何も待っていない場合。clearPendingCrashInfo- アプリの状態が復元された後、保存されたマーカーをクリアします。simulateCrashRecovery- ローカルでリカバリフローをテストするために、偽のクラッシュマーカーを作成します。webViewRestoredAfterCrash- 復元されたランタイム内でクラッシュマーカーがまだ pendding である場合に発火するリスナーイベント。webViewRestoredAfterRestart- どのネイティブ再起動マーカーも pendding である場合に発火するリスナーイベント。
例としての使用方法
import { WebViewCrash } from '@capgo/capacitor-webview-crash';
await WebViewCrash.addListener('webViewRestoredAfterCrash', async (info) => {
console.log('Recovered after a WebView crash', info);
await WebViewCrash.clearPendingCrashInfo();
});
await WebViewCrash.addListener('webViewRestoredAfterRestart', async (info) => {
console.log('Recovered after a native WebView restart', info);
await WebViewCrash.clearPendingCrashInfo();
});
const pending = await WebViewCrash.getPendingCrashInfo();
// Note: the listener callback may have already cleared the pending marker.
if (pending.value) {
console.log('Pending crash or restart marker', pending.value);
}
ネイティブの自動再起動
再起動の動作を設定するには capacitor.config.ts JavaScript が利用できない場合でも、常に機能するようにするために:
import type { CapacitorConfig } from '@capacitor/cli';
import type { WebViewCrashPluginConfig } from '@capgo/capacitor-webview-crash';
const webViewCrash: WebViewCrashPluginConfig = {
restartOnCrash: true,
restartCron: '0 3 * * *',
restartAfterCrashDelayMs: 0,
};
const config: CapacitorConfig = {
plugins: {
WebViewCrash: webViewCrash,
},
};
export default config;
スケジュールされた再起動は reason: 'periodicRestart'. ご利用のために固定間隔で restartIntervalMs を使用します。 restartCron デバイスのローカルタイムゾーン内で5つのフィールドのcronスケジュールの場合 0 3 * * * 毎日03:00に再起動するように設定してください。両方のスケジュールを同時に設定しないでください:ネイティブの初期化は、設定された場合と restartCron が大きい場合に致命的な構成エラーを投げます。 restartIntervalMs 短いスケジュールを使用する前に、重要なアプリケーション状態を永続化してください。 0手動ネイティブ再起動
JavaScriptがネイティブのWebViewを予防的に置き換えることを決定した場合、たとえばメモリが重いワークフロー後に:
メソッドは restartWebView() とNative __CAPGO_KEEP_0__に新しいWebViewを作成するように要求します。Androidはホストアクティビティを再生します。iOSは__CAPGO_KEEP_1__ブリッジビューを再構築し、新しい
await WebViewCrash.restartWebView();
を生成するのではなく、現在のページを再読み込みするのではなく。 reason: 'manualRestart' and asks native code to create a fresh WebView. Android recreates the host activity. iOS rebuilds the Capacitor bridge view so a new WKWebView Appflowの比較/移行のマーケティングコピー
Appflowの移行ステップ2
- GitHub: https://github.com/Cap-go/capacitor-webview-crash/
- Docs: /docs/plugins/webview-crash/
Keep going from Using @capgo/capacitor-webview-crash
Capacitor Webview Crashプラグインを使用している場合 Using @capgo/capacitor-webview-crash Capacitor Webview Crashプラグインを使用して、ネイティブメディアとインターフェイスの動作を計画する @capgo/capacitor-webview-crash for the implementation detail in @capgo/capacitor-webview-crash, Capacitor Webview Crashプラグインを使用して、ネイティブメディアとインターフェイスの動作を計画する Capacitor Webview Crashプラグインを使用して、ネイティブメディアとインターフェイスの動作を計画する Using @capgo/capacitor-live-activities native機能を使用するために@capgo/capacitor-live-activities @capgo/capacitor-live-activities native機能を実装するために@capgo/capacitor-live-activities、そして native機能を使用するために@capgo/capacitor-video-player native機能を使用するために@capgo/capacitor-video-player