Phonegap - обработка push-уведомлений после того, как я покинул область индекса с помощью window.location.replace
я используюPhoneGap 4.2 (на основе Cordova 5.0) для создания кроссплатформенного приложения.
Приложение для Android и iOS.
Когда пользователь загружает приложение, он находится вindex.html
, Оттуда у меня есть доступ к различным методам JavaScript, необработанным, на основе Cordova, и я случайно используюJQuery v1.11.1.
Когда приложение получает push-уведомление, оно должно иметь доступ кlocation
свойство в полезной нагрузке и оттуда доступ к указанному месту назначения (например,https://stackoverflow.com/questions/ask«). Я делаю это. Затем пользователь должен быть перенаправлен на конкретное место, которое является веб-сайтом (без открытия браузера,т.е., оставляя приложение),или же включить сайт в индексный файл и заменить его содержимое.
С помощьюiFrames
не представляется возможным, просто включить веб-сайт в индексный файл, потому что веб-сайт просто отображается как пустой или некоторые другие проблемы - хотя я могу ошибаться, но этовроде, как бы, что-то вроде не по теме (вероятно, это решит всю проблему, которую я собираюсь представить).
Прочитав несколько статей (antonylees, Переполнение стекаи т. д.) Я пришел к решению простого использованияwindow.location.replace(externalUrl);
для доступа к сайту. Работает отлично. (Обратите внимание, что создание сайта и включение его в мое приложение не вариант, так как он слишком тяжелый).
Все идет нормально
Я используюPushPlugin Плагин Cordova для обработки Push-уведомлений. Все настроено и работает; Я получаю push-уведомления.
Чтобы быть в состоянии справиться (то есть процесс) push-уведомления, которые я зарегистрировалonNotification
слушатели событий, как для Android, так и для iOS.
Существует три сценария, которые я должен учитывать при обработке поступающего push-уведомления:
Прибытие Push → Пользователь нажимает уведомление → Приложение запускается с «холодного старта» (приложение не запущено) → Полезная нагрузка обрабатывается с помощью метода «onNotification», доступного в файле индекса, и пользователь перенаправляется в местоположение, указанное в push-уведомлении. полезная нагрузкаНажатие поступает → Пользователь нажимает уведомление → Приложение запускается в фоновом режиме (то есть работает), но пользователь еще не покинул индексный файл → Полезная нагрузка обрабатывается с помощью метода `onNotification`, доступного в индексном файле, и пользователь перенаправляется в местоположение, указанное в полезной нагрузке push-уведомленияНажатие прибывает → Пользователь нажимает уведомление → Приложение запускается в фоновом режиме (то есть работает), но пользователь уже покинул индексный файл, будучи уже перенаправленным в прошлом на веб-сайт, и больше не имеет доступа к методу `onNotification` потому что он не существует на новом сайте → Пользователь остается именно там, где он был, и не был перенаправлен на новое местоМоя проблема
Сценарии 1. и 2. работают нормально, потому что у меня есть доступ к подключенным слушателям уведомлений, и они могут обработать полезную нагрузку и получить свойство местоположения, которое я отправляю с полезной нагрузкой, чтобы определить, куда должен быть перенаправлен пользователь.
В сценарии 3, однако, пользователь был перенаправлен из файла индекса (и на внешний веб-сайт) и технически в область действия индекса, поэтому у меня больше нет доступа к методам, которые были доступны в файле индекса, в том числеonNotification
методы.
Из-за этого я не могу перенаправить пользователя в новое место, когда он получил push-уведомление.
Итак, мой вопрос:
Как я могу обработать вновь прибывшую полезную нагрузку push-уведомлений после выхода из файла индекса? Возможно, есть ли лучшие альтернативы, чтобы просто включить веб-сайт в индекс и, таким образом, сделать ранее определенные методы доступными для использования всякий раз, когда они мне нужны?
Спасибо.
редактировать
Мне было указано, чтоInAppBrowser Плагин может предложить то, что я ищу, предоставляя функцию обратного вызова или внедрение кода в браузер. Я попробую это сегодня вечером и вернусь с отчетом, а пока я буду признателен за ответы SO, если у вас получится лучше понять ситуацию :)