Назад в кордове / phongap meteor build для android не будет закрывать приложение последовательно

Я создал и приложение для Android с метеорной и телефонной связью / кордорой: https://play.google.com/store/apps/details?id=com.idqkd3gsl4qt51152xgy

Он работает нормально (особенно, учитывая, что я на самом деле не программист), но одна проблема UX, с которой я боролся, заключается в том, что приложение не будет последовательно закрываться при нажатии кнопки «Назад» на моем телефоне. Время от времени он работает на первом прессе, но большую часть времени я должен забивать его 5-6 раз подряд, чтобы закрыть приложение.

Я использую последний железный маршрутизатор. Остальные пакеты, которые я использую, не кажутся особенно актуальными для этой проблемы, но они на всякий случай следующие:

Стандартные приложения-пакеты coffeescript natestrauser: font-awesome@4.1.0 учетные записи-пароль aldeed: autoform aldeed: collection2 nemo64: bootstrap less alanning: роли joshowens: accounts-entry mrt: accounts-admin-ui-bootstrap-3 mizzao: jquery -ui iron: router sacha: spin raix: push mizzao: bootboxjs meteorhacks: kadira bootstrap3-media-query

Репо можно увидеть здесь: https://github.com/The3vilMonkey/BrewsOnTap

Я не могу указать точную причину этой проблемы, кроме как кажется, что при запуске происходит какая-то переадресация с приложениями cordova. Лучшее решение, которое я нашел, – поймать событие popstate, и когда вы вернетесь к началу выхода или приостановите приложение. Я предпочитаю приостановить этот путь, когда пользователь возвращается в приложение, он не запускает его жизненный цикл с самого начала ,

if(Meteor.isCordova){ Meteor.startup(function(){ window.onpopstate = function () { if (history.state && history.state.initial === true){ navigator.app.exitApp(); //or to suspend meteor add cordova:org.android.tools.suspend@0.1.2 //window.plugins.Suspend.suspendApp(); } }; }); } 

Одно из предостережений, которое вызвало меня, когда я впервые использовал это, было перенаправление на страницу входа в систему, если пользователь не был зарегистрирован. Если вы используете этот метод в приложении, которое делает это, вам нужно переключиться на визуализацию входа Вместо того, чтобы перенаправлять, иначе ваше приложение немедленно выйдет / приостановится.

В моем случае я сделал два предыдущих ответа, чтобы они работали хорошо.

 document.addEventListener("backbutton", function(){ if (history.state && history.state.initial === true) { navigator.app.exitApp(); } else { history.go(-1); } }); 

Хотя ответ Келли действительно работает, он не оказался функционально правильным для моей конкретной ситуации. Важным моментом для этого решения является то, что он выйдет, как только кнопка «Назад» заставит вас вернуться к начальной странице, а не когда вы нажмете кнопку «Назад» на начальной странице.

В конце концов я использовал прослушиватель кордовы, чтобы увидеть, была ли нажата кнопка:

 if Meteor.isCordova Meteor.startup -> document.addEventListener("backbutton", -> if document.location.pathname is "/" navigator.app.exitApp() else history.go(-1) 

А затем, если я нахожусь в корне моего приложения, я выхожу / приостанавливаю, иначе я просто вернусь в историю.

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

Также обратите внимание, что это решение сломается, если вы хотите получить истинную историю, которая может вернуться через историю (потенциально ударяя корень вашего приложения несколько раз) до того, как она будет существовать в начальной точке входа. Сочетание моего ответа и Келли может сработать для этого. Я считаю, что, хотя это может быть ожидаемым поведением для веб-сайтов, это действительно не для мобильных приложений.