2016-09-03 3 views
0

Я пытаюсь получить 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> 

ответ

0

$ ionicPlatform.ready не стрелять, потому что у вас нет Cordova. Это закомментировано.

+0

+ ionic-platform-web-клиент устарел. Он заменяется Ionic Cloud Client. См. Миграцию: http://docs.ionic.io/migration.html – e666

+0

ionicPlatform.ready следует называть, есть ли у вас кордова или нет. Вы получаете сообщения об ошибках? – Ladmerc

+0

@Ladmerc Я не получаю сообщений об ошибках - приложение все равно будет работать. – TheWozJesse