Проверка активного сетевого подключения и выход из приложения, если оно не активно в ionic, с помощью ngCordova

#javascript #android #angularjs #ionic-framework #ionic-popup

#javascript #Android #angularjs #ionic-framework #ionic-всплывающее окно

Вопрос:

я разрабатываю приложение для конференций, которое управляется данными и будет постоянно обновляться с веб-сервера. я сохраняю данные в локальном хранилище для сохранения, но когда приложение установлено и запущено в первый раз, я хочу, чтобы появилось сообщение «Нет подключения к Интернету» и закрыть приложение, когда они нажимают любую кнопку во всплывающем окне. но когда есть Интернет, загрузите приложение. я сделал это в своей функции 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 amp;amp; 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 и отмена) приложение просто остается на белом экране. он не выходит из приложения.
я не знаю, что я делаю не так. пожалуйста, мне нужны советы и примеры кода, чтобы исправить мою ошибку.

Ответ №1:

Несколько аспектов, которые следует иметь в виду:

  • сообщается, что ваша реализация ExitApp() не работает на устройствах iOS

  • уничтожение приложения — это большой недостаток для удобства использования, вам лучше представить интерфейс с последними сохраненными данными или, если какие-либо данные кэшируются, сообщение «нет сетевого подключения», встроенное в макет приложения (проверьте Spotify для примера)

В любом случае ваша цель может быть достигнута с ngCordova.plugins.network помощью модуля, входящего в http://ngcordova.com /

Это пример службы, которая возвращает текущее состояние сети:

 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 amp;amp; window.cordova.plugins.Keyboard) {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        }
        if (window.StatusBar) {
            StatusBar.styleDefault();
        }

        //checking for internet connection on startup
        if( !ConnectivityService.isOnline amp;amp; !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;
    });
});
  

Комментарии:

1. спасибо, Энрико, я пытаюсь проверить наличие соединения, когда пользователь загружает приложение в первый раз. я уже загружаю данные из локального хранилища в каждый из моих контроллеров (хотя это плохая практика), но мне нужно проверить наличие подключения к Интернету и выйти из приложения, если пользователь никогда раньше не открывал приложение с подключением к Интернету. и если он загрузился с подключением к Интернету один раз … мне нужно, чтобы обойти эту функцию и перейти к моей логике контроллеров, которая будет загружать данные из локального хранилища. вы можете проверить мои коды здесь .

2. Только что исправлена ошибка в моем фрагменте (я не отменял ConnectivityService.IsOnline, теперь это так). Вы можете сохранить переменную в localstorage при первом подключении пользователя к Сети и использовать это значение для обхода принудительного выхода. Я собираюсь обновить ответ.

Ответ №2:

Читая их документ, в нем говорится, что нужно использовать

 ionic.Platform.exitApp();
  

Для выхода из приложения.

Также вы проверили, что ваш код даже соответствует этому условию.