Я пытаюсь получить push-уведомления, работающие над ионным Android-приложением, основанным исключительно на одном WebView, который отправляется через cordova-plugin-inappbrowser
.
Функция $ionicPlatform.ready()
никогда не звонит, и поэтому объект Ionic.Push
никогда не создается (не регистрируется токен устройства). Я могу запустить console.log
до того, как $ionicPlatform.ready()
вызывается внутри функции запуска, но не внутри обратного вызова от $ionicPlatform.ready()
.
Я пропустил что-то очевидное?
app.js
var websiteURL = 'http://example.com';
angular.module('abc', ['ionic'])
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
if(window.cordova && window.cordova.plugins.Keyboard) {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
//stops the viewport from snapping when text inputs are focused. Ionic handles this internally for
// a much nicer keyboard experience.
cordova.plugins.Keyboard.disableScroll(true);
}
if(window.StatusBar) {
StatusBar.styleDefault();
}
// bootstrap for push notifications, set debug to true to use Ionic's push notification platform, not Google's/Apple's
var push = new Ionic.Push({
"debug": true
});
// register the apps token so that the ionic platform can communicate with it
push.register(function(token) {
console.log("Device token:",token.token);
});
});
})
.controller("AppController", function($scope) {
$scope.openWebsite = function()
{
// open up the peoplemovers site in the in app browser window
window.open(websiteURL,'_self');
};
})
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title></title>
<link href="lib/ionic/css/ionic.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
<link href="css/ionic.app.css" rel="stylesheet">
-->
<!-- ionic/angularjs js -->
<script src="lib/ionic/js/ionic.bundle.js"></script>
<script src="lib/ionic-platform-web-client/dist/ionic.io.bundle.min.js"></script>
<!-- cordova script (this will be a 404 during development) -->
<!-- Cordova is bootstrapped by ionic-platform-web-client, uncomment this if you remove ionic-platform-web-client... -->
<!-- <script src="cordova.js"></script> -->
<!-- your app's js -->
<script src="js/app.js"></script>
</head>
<body ng-app="abc">
<ion-pane>
<ion-content ng-controller="AppController" ng-init="openWebsite()" padding="true">
</ion-content>
</ion-pane>
</body>
</html>
EDIT
Я переустановил Ionic, Кордова, узел, НПМ, Android студии и Android SDK.
URL-адрес, в котором вызовы window.open имеют кнопку выбора файла, которая использовалась для сбоя приложения, когда файл был выбран на вкладке «Галерея» Android, что было вызвано некоторыми проблемами с разрешениями на Android. Сообщение форума предложило добавить плагин cordova-plugin-camera
, чтобы добавить необходимые разрешения, и этот DID решит проблему.
Однако, звонок $ionicPlatform.ready
не производится. Даже если я запустил ionic plugin remove cordova-plugin-camera
, я больше не могу получить $ionicPlatform.ready
.
У меня нет сообщений об ошибках, приложение загружается нормально. Такое поведение является последовательным при тестировании на телефоне LG Android 6.0, эмуляторе Android (SDK 23) и эмуляторе Genymotion.
Есть ли более простой способ получить права доступа к файлу с телефона, кроме плагина камеры? Если нет, есть ли строка настройки или конфига, которую мне нужно, чтобы запустить функцию $ionicPlatform.ready
?
Вот новый app.js:
var websiteURL = 'http://example.com';
angular.module('lmgapp', ['ionic'])
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
console.log('firing');
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
cordova.plugins.Keyboard.disableScroll(true);
}
if(window.StatusBar) {
StatusBar.styleDefault();
}
});
})
.controller("AppController", function($scope) {
$scope.openWebsite = function()
{
console.log('in the controller');
// open up the site in the in app browser window
window.open(websiteURL,'_self');
};
});
И вот новый index.html после переустановки:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title></title>
<link href="lib/ionic/css/ionic.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<!-- ionic/angularjs js -->
<script src="lib/ionic/js/ionic.bundle.js"></script>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
<!-- your app's js -->
<script src="js/app.js"></script>
</head>
<body ng-app="lmgapp">
<ion-pane>
<ion-content ng-controller="AppController" ng-init="openWebsite()">
</ion-content>
</ion-pane>
</body>
</html>
+ ionic-platform-web-клиент устарел. Он заменяется Ionic Cloud Client. См. Миграцию: http://docs.ionic.io/migration.html – e666
ionicPlatform.ready следует называть, есть ли у вас кордова или нет. Вы получаете сообщения об ошибках? – Ladmerc
@Ladmerc Я не получаю сообщений об ошибках - приложение все равно будет работать. – TheWozJesse