Android Ionic页面转换不适用于具有推送功能的页面
我在我的应用程序中实现了android推送接收,只要应用程序在该页面启动,它就可以正常工作。但是,如果您导航到收件箱页面,其中实现了推送通知,则转换将不起作用 在没有push实现的情况下,转换运行良好 我想知道是否有人在实现特性时遇到过类似的问题Android Ionic页面转换不适用于具有推送功能的页面,android,angularjs,cordova,ionic-framework,phonegap-pushplugin,Android,Angularjs,Cordova,Ionic Framework,Phonegap Pushplugin,我在我的应用程序中实现了android推送接收,只要应用程序在该页面启动,它就可以正常工作。但是,如果您导航到收件箱页面,其中实现了推送通知,则转换将不起作用 在没有push实现的情况下,转换运行良好 我想知道是否有人在实现特性时遇到过类似的问题 .controller('BuzonMenuCtrl', function($scope, $window, $state, $ionicPlatform) { $scope.botonBuzon = function(){ $state.
.controller('BuzonMenuCtrl', function($scope, $window, $state, $ionicPlatform) {
$scope.botonBuzon = function(){
$state.go('buzon');
};
})
.controller('BuzonCtrl', function($scope, $rootScope, $window, $ionicActionSheet, $ionicPopup, $state, $http, dataFactory, pushFactory) {
// Activacion de la funcionalidad push
pushFactory.funcionalidadPush();
}
factorys.js
.factory('pushFactory', ['$rootScope','$http','$state','$ionicLoading','$ionicPlatform','$cordovaPush','dataFactory',
function($rootScope,$http,$state,$ionicLoading,$ionicPlatform,$cordovaPush,dataFactory) {
/* Objeto del factory */
var fac = {};
fac.funcionalidadPush = function(){
if (ionic.Platform.isAndroid()){
var androidConfig = {
"senderID": "94XXXXXXXXXX",
"ecb": "casosPush"
};
$rootScope.data.pushplatform = "gcm";
alert('Entro en modo Android');
};
if (ionic.Platform.isIOS()){
alert('Entro en modo iOS');
};
$ionicPlatform.ready(function() {
$cordovaPush.register(androidConfig).then(function(result) {
// Success
}, function(err) {
// Error
})
window.casosPush = function (notification) {
switch(notification.event) {
case 'registered':
if (notification.regid.length > 0 ) {
alert('registration ID = ' + notification.regid);
$rootScope.data.token = notification.regid;
}
break;
case 'message':
// this is the actual push notification. its format depends on the data model from the push server
//alert('message = ' + notification.message + ' msgCount = ' + notification.msgcnt);
$rootScope.mensajes.push(notification);
break;
case 'error':
alert('GCM error = ' + notification.msg);
break;
default:
alert('An unknown GCM event has occurred');
break;
}
};
// WARNING: dangerous to unregister (results in loss of tokenID)
$cordovaPush.unregister(options).then(function(result) {
// Success!
}, function(err) {
// Error
})
}, false);
};
return fac;
}]);
App.js
angular.module('notPush', ['ionic', 'ngCordova', 'notPush.controllers'])
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
StatusBar.styleDefault();
}
});
})
.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('splash', {
url: '/splash',
templateUrl: 'templates/splash.html',
controller: 'SplashCtrl'
})
.state('buzonMenu', {
url: '/buzonMenu',
templateUrl: 'templates/buzonMenu.html',
controller: 'BuzonMenuCtrl'
})
.state('buzon', {
url: '/buzon',
templateUrl: 'templates/buzon.html',
controller: 'BuzonCtrl'
})
// If none of the above states are matched, use this as the fallback:
$urlRouterProvider.otherwise('/buzonMenu');
});
编辑
正如我在评论中所建议的那样
$window.location.reload(true);
它除了让屏幕闪烁之外什么都不做,而且
$state.go($state.current, {}, {reload: true});
它试图重新加载页面,但仅在损坏状态下加载,加载白色背景和按钮(不带颜色),但不加载其他内容
编辑2一些澄清:
1219 AudioTrack W AUDIO_OUTPUT_FLAG_FAST denied by client
2531 PushPlugin V execute: action=register
2531 PushPlugin V execute: data=[{"senderID":ID DELETED FOR PRIVACY ISSUES,"ecb":"casosPush"}]
2531 PushPlugin V execute: jo={"senderID":ID DELETED FOR PRIVACY ISSUES,"ecb":"casosPush"}
2531 PushPlugin V execute: ECB=casosPush senderID=ID DELETED FOR PRIVACY ISSUES
2531 GCMRegistrar D resetting backoff for ID DELETED FOR PRIVACY ISSUES
1219 InputMethodManager.. W Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@df31fbd attribute=null, token = a
ndroid.os.BinderProxy@28f2dc02
2531 GCMRegistrar V Registering app ID DELETED FOR PRIVACY ISSUES of senders ID DELETED FOR PRIVACY ISSUES
2531 SystemWebChromeCli.. D file:///android_asset/www/lib/ionic/js/ionic.bundle.js: Line 20243 : ReferenceError: options is not defined
2531 SystemWebChromeCli.. D at file:///android_asset/www/js/factorys.js:214:31
2531 SystemWebChromeCli.. D at file:///android_asset/www/lib/ionic/js/ionic.bundle.js:44687:19
2531 SystemWebChromeCli.. D at Object.ionic.Platform.ready (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:2120:9)
2531 SystemWebChromeCli.. D at Object.self.ready (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:44685:26)
2531 SystemWebChromeCli.. D at Object.fac.funcionalidadPush (file:///android_asset/www/js/factorys.js:166:20)
2531 SystemWebChromeCli.. D at new <anonymous> (file:///android_asset/www/js/controllers.js:440:15)
2531 SystemWebChromeCli.. D at invoke (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:12821:17)
2531 SystemWebChromeCli.. D at Object.instantiate (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:12829:27)
2531 SystemWebChromeCli.. D at file:///android_asset/www/lib/ionic/js/ionic.bundle.js:17098:28
2531 SystemWebChromeCli.. D at self.appendViewElement (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:48110:24)
2531 chromium I [INFO:CONSOLE(20243)] "ReferenceError: options is not defined
2531 chromium I at file:///android_asset/www/js/factorys.js:214:31
2531 chromium I at file:///android_asset/www/lib/ionic/js/ionic.bundle.js:44687:19
2531 chromium I at Object.ionic.Platform.ready (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:2120:9)
2531 chromium I at Object.self.ready (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:44685:26)
2531 chromium I at Object.fac.funcionalidadPush (file:///android_asset/www/js/factorys.js:166:20)
2531 chromium I at new <anonymous> (file:///android_asset/www/js/controllers.js:440:15)
2531 chromium I at invoke (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:12821:17)
2531 chromium I at Object.instantiate (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:12829:27)
2531 chromium I at file:///android_asset/www/lib/ionic/js/ionic.bundle.js:17098:28
2531 chromium I at self.appendViewElement (file:///android_asset/www/lib/ionic/js/ionic.bundle.js:48110:24)", source: file:///android_asset/www/lib/ionic
/js/ionic.bundle.js (20243)
1604 GCM D GcmService start Intent { act=com.google.android.c2dm.intent.REGISTER pkg=com.google.android.gms cmp=com.google.android.gms/.gcm.GcmServi
ce (has extras) } com.google.android.c2dm.intent.REGISTER
2531 GCMBroadcastReceiver V onReceive: com.google.android.c2dm.intent.REGISTRATION
2531 GCMRegistrar V Setting the name of retry receiver class to com.plugin.gcm.CordovaGCMBroadcastReceiver
2531 GCMBroadcastReceiver V GCM IntentService class: com.plugin.gcm.GCMIntentService
2531 GCMBaseIntentService V Acquiring wakelock
2531 GCMBaseIntentService V Intent service name: GCMIntentService-GCMIntentService-1
2531 GCMRegistrar V Registering receiver
2531 GCMBaseIntentService D handleRegistration: registrationId = TOKEN DELETED FOR PRIVACY ISSUES, error = null, unregistered = null
2531 GCMRegistrar D resetting backoff for ID DELETED FOR PRIVACY ISSUES
2531 GCMRegistrar V Saving regId on app version 10
2531 GCMIntentService V onRegistered: TOKEN DELETED FOR PRIVACY ISSUES
2531 GCMIntentService V onRegistered: {"event":"registered","regid":TOKEN DELETED FOR PRIVACY ISSUES}
2531 PushPlugin V sendJavascript: javascript:casosPush({"event":"registered","regid":TOKEN DELETED FOR PRIVACY ISSUES})
2531 GCMBaseIntentService V Releasing wakelock
2531 EGL_emulation W eglSurfaceAttrib not implemented
2531 OpenGLRenderer W Failed to set EGL_SWAP_BEHAVIOR on surface 0xa4cdd7e0, error=EGL_SUCCESS
1219 AudioTrack W AUDIO_OUTPUT_FLAG_FAST denied by client
1219 InputMethodManager.. W Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@35215d0a attribute=null, token =
android.os.BinderProxy@28f2dc02
1219带音频输出标志的音频曲目被客户端快速拒绝
2531 PushPlugin V execute:action=寄存器
2531 PushPlugin V execute:data=[{“senderID”:因隐私问题而删除的ID,“ecb”:“casosPush”}]
2531 PushPlugin V execute:jo={“senderID”:ID因隐私问题被删除,“ecb”:“casosPush”}
2531 PushPlugin V execute:ECB=casosPush senderID=ID因隐私问题被删除
2531 GCMRegistrar D为因隐私问题删除的ID重置回退
1219输入方法管理器。。W窗口已聚焦,忽略焦点增益:com.android.internal.view.IInputMethodClient$Stub$Proxy@df31fbdattribute=null,token=a
ndroid.os。BinderProxy@28f2dc02
2531 GCMRegistar V因发件人隐私问题删除注册应用程序ID因隐私问题删除ID
2531 SystemWebChromeCli。。Dfile:///android_asset/www/lib/ionic/js/ionic.bundle.js: 第20243行:引用错误:未定义选项
2531 SystemWebChromeCli。。盯着file:///android_asset/www/js/factorys.js:214:31
2531 SystemWebChromeCli。。盯着file:///android_asset/www/lib/ionic/js/ionic.bundle.js:44687:19
2531 SystemWebChromeCli。。D位于Object.ionic.Platform.ready(file:///android_asset/www/lib/ionic/js/ionic.bundle.js:2120:9)
2531 SystemWebChromeCli。。D在Object.self.ready(file:///android_asset/www/lib/ionic/js/ionic.bundle.js:44685:26)
2531 SystemWebChromeCli。。D位于Object.fac.functionalidadpush(file:///android_asset/www/js/factorys.js:166:20)
2531 SystemWebChromeCli。。D在纽约(file:///android_asset/www/js/controllers.js:440:15)
2531 SystemWebChromeCli。。D在调用时(file:///android_asset/www/lib/ionic/js/ionic.bundle.js:12821:17)
2531 SystemWebChromeCli。。D在Object.instantiate(file:///android_asset/www/lib/ionic/js/ionic.bundle.js:12829:27)
2531 SystemWebChromeCli。。盯着file:///android_asset/www/lib/ionic/js/ionic.bundle.js:17098:28
2531 SystemWebChromeCli。。D在self.appendViewElement处(file:///android_asset/www/lib/ionic/js/ionic.bundle.js:48110:24)
2531铬I[信息:控制台(20243)]“参考错误:未定义选项
2531铬I atfile:///android_asset/www/js/factorys.js:214:31
2531铬I atfile:///android_asset/www/lib/ionic/js/ionic.bundle.js:44687:19
2531铬I在Object.ionic.Platform.ready处(file:///android_asset/www/lib/ionic/js/ionic.bundle.js:2120:9)
2531铬I在Object.self.ready(file:///android_asset/www/lib/ionic/js/ionic.bundle.js:44685:26)
2531 Object.fac.functionalidadpush处的铬I(file:///android_asset/www/js/factorys.js:166:20)
2531铬I在纽约(file:///android_asset/www/js/controllers.js:440:15)
2531铬I在调用(file:///android_asset/www/lib/ionic/js/ionic.bundle.js:12821:17)
2531铬I在Object.instantiate(file:///android_asset/www/lib/ionic/js/ionic.bundle.js:12829:27)
2531铬I atfile:///android_asset/www/lib/ionic/js/ionic.bundle.js:17098:28
2531铬I自组装元件(file:///android_asset/www/lib/ionic/js/ionic.bundle.js:48110:24)“,资料来源:file:///android_asset/www/lib/ionic
/js/ionic.bundle.js(20243)
1604 GCM D GcmService start Intent{act=com.google.android.c2dm.Intent.REGISTER pkg=com.google.android.gms cmp=com.google.android.gms/.GCM.GcmServi
ce(有额外功能)}com.google.android.c2dm.intent.REGISTER
2531 GCMBroadcastReceiver V onReceive:com.google.android.c2dm.intent.REGISTRATION
2531 gcmregistar V将重试接收器类的名称设置为com.plugin.gcm.CordovaGCMBroadcastReceiver
2531 GCMBroadcastReceiver V GCM IntentService类:com.plugin.GCM.gcminentservice
2531 GCMBaseIntentService V获取尾波锁
2531 GCMBasEventService V意向服务名称:GCMinentService-GCMinentService-1
2531 GCMRegistar V注册接收机
2531 GCMBasEventService D HandlerRegistration:registrationId=因隐私问题删除的令牌,错误=null,未注册=null
2531 GCMRegistar D重置回退
$scope.$on('$cordovaPush:notificationReceived', handleNotification);
handleNotification = function(event, notification){
$timeout(function(event, notification) {
switch(notification.event) {
case 'registered':
if (notification.regid.length > 0 ) {
alert('registration ID = ' + notification.regid);
$scope.regid = notification.regid;
var user = { user: 'David', type: 'android', token: notification.regid };
$http.post('http://172.16.16.101:8000/tokens', JSON.stringify(user));
}
break;
case 'message':
// this is the actual push notification. its format depends on the data model from the push server
//alert('message = ' + notification.message + ' msgCount = ' + notification.msgcnt);
alert(JSON.stringify([notification]));
var aux = {title:'',message:'',payload: { valor1:true }}
$scope.mensajes.push(notification);
break;
case 'error':
alert('GCM error = ' + notification.msg);
break;
default:
alert('An unknown GCM event has occurred');
break;
}
});
}
/*
app.js
*/
angular.module('notPush', ['ionic', 'notPush.controllers', 'notPush.factorys'])
.run(function($ionicPlatform,$rootScope) {
$ionicPlatform.ready(function() {
if(window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if(window.StatusBar) {
StatusBar.styleDefault();
}
$rootScope.mensajes = [];
// Push code
try{
var pushNotification = window.plugins.pushNotification;
} catch (ex){
}
var successfn = function(result){
alert("Success: " + result);
};
var errorfn = function(result){
window.alert("Error: " + result);
};
window.casosPush = function(notification){
switch (notification.event){
case 'registered':
if (notification.regid.length > 0){
alert('registration ID = ' + notification.regid);
}
break;
case 'message':
alert(JSON.stringify([notification]));
$rootScope.mensajes.push(notification);
break;
case 'error':
alert('GCM error = ' + notification.msg);
break;
default:
alert('An unknown GCM event has occurred');
break;
}
};
try{
pushNotification.register(
successfn,
errorfn,
{
"senderID": "94XXXXXXXXXX",
"ecb" : "window.casosPush"
}
);
} catch(notification){
}
});
})
.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('splash', {
url: '/splash',
templateUrl: 'templates/splash.html',
controller: 'SplashCtrl'
})
.state('registro', {
url: '/registro',
templateUrl: 'templates/registro.html',
controller: 'RegistroCtrl'
})
.state('buzonMenu', {
url: '/buzonMenu',
templateUrl: 'templates/buzonMenu.html',
controller: 'BuzonMenuCtrl'
})
.state('buzon', {
url: '/buzon',
templateUrl: 'templates/buzon.html',
controller: 'BuzonCtrl'
})
.state('detallesSimple', {
url: '/detallesSimple',
templateUrl: 'templates/detallesSimple.html',
controller: 'DetallesCtrl'
})
.state('detallesDoble', {
url: '/detallesDoble',
templateUrl: 'templates/detallesDoble.html',
controller: 'DetallesCtrl'
})
.state('detallesWV', {
url: '/detallesWV',
templateUrl: 'templates/detallesWV.html',
controller: 'DetallesWVCtrl'
})
// If none of the above states are matched, use this as the fallback:
$urlRouterProvider.otherwise('/splash');
});
var exapp = angular.module('exapp',
['ionic',
'ui.select2',
'exapp.controllers',
'exapp.services']);
exapp.run(function($ionicPlatform, $state, Notifications, geo) {
$ionicPlatform.ready(function() {
try{
var pushNotification = window.plugins.pushNotification;
} catch (ex){
}
var successfn = function(result){
// window.alert("S: " + result);
};
var errorfn = function(result){
// window.alert("E: " + result);
};
window.onCB = function(e){
switch (e.event){
case 'registered':
if (e.regid.length > 0){
localStorage.setItem('registration_id', e.regid);
}
break;
case 'message':
if (e.foreground){
navigator.notification.beep(1);
}
$state.go('app.notifications');
break;
}
};
try{
pushNotification.register(
successfn,
errorfn,
{
"senderID": "191919191919191",
"ecb" : "window.onCB"
}
);
} catch(e){
}
});
});
// States
exapp.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('app', {
url: "/app",
abstract: true,
templateUrl: "templates/menu.html",
controller: 'AppCtrl'
})
.state('app.profile', {
url: "/profile",
views: {
'menuContent': {
templateUrl: "templates/profile.html",
controller: "ProfileCtrl"
}
}
})
.state('app.login', {
url: "/login",
views: {
'menuContent' :{
templateUrl: "templates/login.html",
controller: 'AuthCtrl'
}
}
});
// if none of the above states are matched, use this as the fallback
$urlRouterProvider.otherwise('/app/profile');
});