0 javascript android parse-platform ionic-framework ionic
我一直试图解决这个问题.我一直致力于离子+解析登录,注册,忘记密码应用程序.据说Ionic是前端而parse.com是数据库.
当从命令行使用Ionic服务时,这些功能完全可以从web broswer中的本地主机工作,但是当我为Android(离子构建android)或模拟(离子模拟android)构建应用程序或在Android设备上测试它时,我得到了一个错误消息范围:
当我尝试登录时; 发生意外错误,请再试一次
当我尝试重置密码时; 发生意外错误,请再试一次
当我尝试注册时,我显示以下错误消息:
XMLHttpRequest失败:{statusText":Not Found","status :: 404","responseURL":https://api.parse.com/1/users","response":""resp onseType":""." responseXML的":空," responseText的":"", "上传":{loadend ":空"的onload ":空," onprogress ":空," onloadstart ":空," onloadend ":空,:onload事件":空"的onerror":空"onabort":NULL} "withCredentials":假"的readyState":4 "超时":0, "ontimeout":NULL, "onprogress":NULL, "onloadstart":空,: onloadend ":空"的onload ":空"的onerror ":空,:onabort":空}
这是我的代码:
注册页面:模板文件夹
<ion-view title="Register">
<ion-content has-header="true" has-tabs="true" padding="true">
<div class="list">
<label class="item item-input">
<input type="email" ng-model="user.email" placeholder="Email">
</label>
<label class="item item-input">
<input type="password" ng-model="user.password" placeholder="Password">
</label>
<label class="item item-input">
<input type="text" ng-model="user.name" placeholder="First Name">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Date of Birth</span>
<input type="date" ng-model="user.dob">
</label>
</div>
<div class="assertive" ng-show="error.message">{{error.message}}</div>
<button class="button button-block button-stable" ng-click="register()">
CREATE ACCOUNT
</button>
By creating an account you agree to the Terms of Use and Privacy Policy.
</ion-content>
</ion-view>
Run Code Online (Sandbox Code Playgroud)
controllers.js
angular.module('ionicParseApp.controllers', [])
.controller('AppController', function($scope, $state, $rootScope, $ionicHistory, $stateParams) {
if ($stateParams.clear) {
$ionicHistory.clearHistory();
$ionicHistory.clearCache();
}
$scope.logout = function() {
Parse.User.logOut();
$rootScope.user = null;
$rootScope.isLoggedIn = false;
$state.go('welcome', {
clear: true
});
};
})
.controller('WelcomeController', function($scope, $state, $rootScope, $ionicHistory, $stateParams) {
if ($stateParams.clear) {
$ionicHistory.clearHistory();
$ionicHistory.clearCache();
}
$scope.login = function() {
$state.go('app.login');
};
$scope.signUp = function() {
$state.go('app.register');
};
if ($rootScope.isLoggedIn) {
$state.go('app.home');
}
})
.controller('HomeController', function($scope, $state, $rootScope) {
if (!$rootScope.isLoggedIn) {
$state.go('welcome');
}
})
.controller('LoginController', function($scope, $state, $rootScope, $ionicLoading) {
$scope.user = {
username: null,
password: null
};
$scope.error = {};
$scope.login = function() {
$scope.loading = $ionicLoading.show({
content: 'Logging in',
animation: 'fade-in',
showBackdrop: true,
maxWidth: 200,
showDelay: 0
});
var user = $scope.user;
Parse.User.logIn(('' + user.username).toLowerCase(), user.password, {
success: function(user) {
$ionicLoading.hide();
$rootScope.user = user;
$rootScope.isLoggedIn = true;
$state.go('app.home', {
clear: true
});
},
error: function(user, err) {
$ionicLoading.hide();
// The login failed. Check error to see why.
if (err.code === 101) {
$scope.error.message = 'Invalid login credentials';
} else {
$scope.error.message = 'An unexpected error has ' +
'occurred, please try again.';
}
$scope.$apply();
}
});
};
$scope.forgot = function() {
$state.go('app.forgot');
};
})
.controller('ForgotPasswordController', function($scope, $state, $ionicLoading) {
$scope.user = {};
$scope.error = {};
$scope.state = {
success: false
};
$scope.reset = function() {
$scope.loading = $ionicLoading.show({
content: 'Sending',
animation: 'fade-in',
showBackdrop: true,
maxWidth: 200,
showDelay: 0
});
Parse.User.requestPasswordReset($scope.user.email, {
success: function() {
// TODO: show success
$ionicLoading.hide();
$scope.state.success = true;
$scope.$apply();
},
error: function(err) {
$ionicLoading.hide();
if (err.code === 125) {
$scope.error.message = 'Email address does not exist';
} else {
$scope.error.message = 'An unknown error has occurred, ' +
'please try again';
}
$scope.$apply();
}
});
};
$scope.login = function() {
$state.go('app.login');
};
})
.controller('RegisterController', function($scope, $state, $ionicLoading, $rootScope) {
$scope.user = {};
$scope.error = {};
$scope.register = function() {
// TODO: add age verification step
$scope.loading = $ionicLoading.show({
content: 'Sending',
animation: 'fade-in',
showBackdrop: true,
maxWidth: 200,
showDelay: 0
});
var user = new Parse.User();
user.set("username", $scope.user.email);
user.set("password", $scope.user.password);
user.set("email", $scope.user.email);
user.signUp(null, {
success: function(user) {
$ionicLoading.hide();
$rootScope.user = user;
$rootScope.isLoggedIn = true;
$state.go('app.home', {
clear: true
});
},
error: function(user, error) {
$ionicLoading.hide();
if (error.code === 125) {
$scope.error.message = 'Please specify a valid email ' +
'address';
} else if (error.code === 202) {
$scope.error.message = 'The email address is already ' +
'registered';
} else {
$scope.error.message = error.message;
}
$scope.$apply();
}
});
};
})
.controller('MainController', function($scope, $state, $rootScope, $stateParams, $ionicHistory) {
if ($stateParams.clear) {
$ionicHistory.clearHistory();
}
$scope.rightButtons = [{
type: 'button-positive',
content: '<i class="icon ion-navicon"></i>',
tap: function(e) {
$scope.sideMenuController.toggleRight();
}
}];
$scope.logout = function() {
Parse.User.logOut();
$rootScope.user = null;
$rootScope.isLoggedIn = false;
$state.go('welcome', {
clear: true
});
};
$scope.toggleMenu = function() {
$scope.sideMenuController.toggleRight();
};
});
Run Code Online (Sandbox Code Playgroud)
apps.js
// setup an abstract state for the tabs directive
.state('welcome', {
url: '/welcome?clear',
templateUrl: 'templates/welcome.html',
controller: 'WelcomeController'
})
.state('app', {
url: '/app?clear',
abstract: true,
templateUrl: 'templates/menu.html',
controller: 'AppController'
})
.state('app.home', {
url: '/home',
views: {
'menuContent': {
templateUrl: 'templates/home.html',
controller: 'HomeController'
}
}
})
.state('app.login', {
url: '/login',
views: {
'menuContent': {
templateUrl: 'templates/login.html',
controller: 'LoginController'
}
}
})
.state('app.forgot', {
url: '/forgot',
views: {
'menuContent': {
templateUrl: 'templates/forgotPassword.html',
controller: 'ForgotPasswordController'
}
}
})
.state('app.register', {
url: '/register',
views: {
'menuContent': {
templateUrl: 'templates/register.html',
controller: 'RegisterController'
}
}
});
$urlRouterProvider.otherwise('/welcome');
})
.run(function ($state, $rootScope) {
Parse.initialize('**hidden**', '**hidden**');
var currentUser = Parse.User.current();
$rootScope.user = null;
$rootScope.isLoggedIn = false;
if (currentUser) {
$rootScope.user = currentUser;
$rootScope.isLoggedIn = true;
$state.go('app.home');
}
});
Run Code Online (Sandbox Code Playgroud)
可能是因为您必须添加插件白名单.
cordova plugin add cordova-plugin-whitelist
Run Code Online (Sandbox Code Playgroud)
如果要保存对config.xml文件的引用:
cordova plugin add cordova-plugin-whitelist --save
Run Code Online (Sandbox Code Playgroud)
你应该这样:
<access origin="*" />
Run Code Online (Sandbox Code Playgroud)
在您的config.xml文件中.如果您通过该插件的规格,您将看到您可以将您的域或外部域列入白名单.
像这样离开就意味着你列出了所有要求的白名单:所有请求.
新的cordova版本引入了其中一些功能.这里
有更多信息.
如果你想看看究竟是什么导致你的应用程序出现问题我建议你通过USB将你的Android设备插入你的计算机,激活调试功能,并使用Chrome作为检查员访问这个chrome:// inspect /#devices in browser .
您应该可以像使用标准Web应用程序一样查看设备并进行调试.
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |