2017-01-10 6 views
3

OKですので、バックエンドAPIを呼び出すオフラインの最初のアプリケーションがあります。コードを使用してServiceWorkerの同期を保留にすることはできますか?

サービスワーカーの同期を使用して、アプリケーションがオフラインのときにAPIへの呼び出しをキャッシュし、ブラウザがオンラインに戻ったときにこれらの呼び出しを処理したいとします。

複雑なのは、API呼び出しを行うときに有効なOWINトークンを持つ必要があるということです。

解決策があります。必要なときにトークンを取得することができます。outlined hereです。ユーザーあたり1つのアクティブなセッションしか許可しないため、これはアプリケーションでは機能しません。 コード内にトークンがあると、現実世界のユーザーがアプリケーションで忙しくなる危険があります。

これは問題です: - Service-Workerの同期を以下のようなコードで一時停止することはできますか?

  • ユーザーがアプリケーションでセッションを終了すると、サービスワーカーの同期プロセスがコードで「今すぐ停止」するように指示します。
  • この時点で、同期処理は処理が必要なすべての呼び出しを追跡し、いずれの処理も行わないことが重要です。また、追加の同期呼び出しは「キューに追加」する必要があります。

    1. 次のユーザーが有効なOWINトークンを取得すると、同期プロセスに「通常通り」続行するように指示できます。

    これまでのところ、私のグーグルグーグルはこれを明示的に扱うものは何も返しません。ドキュメンテーションのほとんどは、これが不可能であることを示唆しています。

    これが可能かどうかは誰にも分かりますか?

    +1

    これらのトークンはどれくらいの期間存在しますか? 「1人のユーザーに1つのアクティブなセッションしか許可しない」 - 複数のタブで失敗するという意味ですか?単一のページからフェッチを重複させて同じ問題を回避するにはどうすればよいですか? –

    +0

    ベアラのクッキーとしてトークンをブラウザに保存します。 これは、すべてのページとすべてのタブで同じトークンが有効であることを意味します(ユーザーがブラウザを閉じない限り、または「ログアウト」メニューオプションを選択した場合)。 –

    +0

    ここでは同じソリューションを使用できませんでしたか?トークンをIndexedDBに入れ、サービスワーカーからアクセスします。 –

    答えて

    1

    OK、So上記の議論から、そして他のオフラインの議論から; 質問に対する簡単な答えは「いいえ」です - 2017年1月13日(はい、金曜日です)。サービスワーカーの同期を一時停止することはできません。

    回避策として、我々が見つけることができる2つのアプローチがあった。

    (どちらも解決策をある程度再考する)

    1. 可能であれば、同期コード内から新しいOWIN認証トークンを取得します。
    2. 1を使用できない場合は、API呼び出しを3つのカテゴリに分割します。

    2.1電話を受ける。これらは、サービスワーカーの標準的なキャッシュメカニズムを通じて処理することができます。

    2.2レスポンスを無視できる非Getコール。これらはIndexedDBテーブルに追加することができ、Webワーカーはユーザーがデータベースに接続した後で処理することができます。

    2.3レスポンスが必要な非コールを呼び出します。これらはあまり頻繁に起こらない。したがって、それぞれのケースで、オンライン/オフラインの状況で別々のコードパスを記述します。

    それはそれです。オプション2は現在のプロジェクトで動作します。オプション2がまだ実行可能でないプロジェクトが存在する可能性があります。

    関連する問題