0

私はデータ駆動型の会議アプリを開発しており、Web サーバーから常に更新されます。永続化のためにローカルストレージにデータを保存していますが、アプリを初めてインストールして起動したときに、「インターネット接続がありません」というメッセージをポップアップ表示し、ポップアップのボタンをクリックするとアプリを閉じたいと考えています。ただし、インターネットがある場合はアプリをロードします。app.run 関数でこれを実行しましたが、機能しません。

var app = angular.module('starter', ['ionic', 'ionic-material', 'ngCordova']);

app.run(function ($ionicPlatform, $ionicPopup, $timeout) {
    $ionicPlatform.ready(function () {
        // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
        // for form inputs)

        if (window.cordova && window.cordova.plugins.Keyboard) {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        }
        if (window.StatusBar) {
            StatusBar.styleDefault();
        }

        //checking for internet connection on startup
        if (window.Connection) {
            if (navigator.connection.type === Connection.NONE) {
                document.addEventListener("offline", function () {
                    $ionicPopup.confirm({
                        title: "Internet Disconected",
                        content: "Sorry, No internet connection now, please try again"
                    }).then(function (result) {
                        if (!result) {
                            $ionicPlatform.exitApp();
                        }
                    });
                }, false);
            }
        }
    });
});

アプリはメッセージをポップアップ表示しますが、いずれかのボタン (OK とキャンセル) をクリックすると、アプリは白い画面のままになります。アプリは終了しません。何が間違っているのかわかりません。エラーを修正するためのアドバイスとコード サンプルが必要です。

4

2 に答える 2

2

心に留めておくべきいくつかの側面:

  • あなたの exitApp() の実装は、iOS デバイスでは動作しないと報告されています

  • アプリを強制終了することはユーザビリティにとって大きな問題です。最新のキャッシュされたデータをインターフェイスに表示するか、データがキャッシュされている場合は、アプリのレイアウトに統合された「ネットワーク接続なし」メッセージを表示することをお勧めします (例として Spotify をチェックしてください)。

いずれにせよ、あなたの目的は、 http://ngcordova.com/ngCordova.plugins.networkにバンドルされているモジュールで達成できます。

これは、現在のネットワーク ステータスを返すサービスの例です。

angular.module('app.common.connectivity', [
  'ngCordova.plugins.network'
])

.service('ConnectivityService', function($cordovaNetwork) {
  this.isOnline = $cordovaNetwork.isOnline() || false;
});

次のように、このモジュールを追加して、必要な場所にサービスを挿入できます。

var app = angular.module('starter', ['ionic', 'ionic-material', 'app.common.connectivity']);

app.run(function ($ionicPlatform, $ionicPopup, $timeout, ConnectivityService) {
    $ionicPlatform.ready(function () {
        // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
        // for form inputs)

        if (window.cordova && window.cordova.plugins.Keyboard) {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        }
        if (window.StatusBar) {
            StatusBar.styleDefault();
        }

        //checking for internet connection on startup
        if( !ConnectivityService.isOnline && !window.localStorage.appLaunched ) {
          $ionicPopup.confirm({
            title: "Internet Disconected",
            content: "Sorry, No internet connection now, please try again"
          })
          .then(function(result) {
            $ionicPlatform.exitApp();
          });
        }

        // Apparently we're online so remember we already have been here
        if ( !localStorage.appLaunched ) localStorage.appLaunched = true;
    });
});
于 2016-10-11T21:23:54.463 に答える