ionic遇到的问题
一.生成签名(.keystore)文件
keytool -genkey -v -keystore demo.keystore -alias demo.keystore -keyalg RSA -validity 20000
keytool是工具名称,-genkey意味着执行的是生成数字证书操作,-v表示将生成证书的详细信息打印出来;
-keystore demo.keystore 证书的文件名;(hongtai.keystore)
-alias demo.keystore 表示证书的别名
-keyalg RSA 生成密钥文件所采用的算法;
-validity 20000 该数字证书的有效期;
输入后会让你回答关于你公司和地区的一些问题,这些回答一定要记住,以后更新apk的时候需要用到,最好截屏记录。
秘钥库口令:ht5117.com
您的名字与姓氏是什么:localhost(注意:这个为域名不是真正的姓名)
您的组织单位名称是什么:hongtai
您的组织名称是什么:hongtai
您所在的城市或区域名称是什么:fuzhou
该单位的双字母国家/地区代码是什么:cn
您所在的省/市/自治区名称是什么:fuzhou
二.签名apk
jarsigner -verbose -keystore /yourpath/demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore -digestalg SHA1 -sigalg MD5withRSA -tsa http://timestamp.digicert.com
jarsigner是工具名称,-verbose表示将签名过程中的详细信息打印出来;
-keystore /yourpath/demo.keystore 之前生成的证书
-signedjar demo_signed.apk 签名后的apk
demo.apk 需要签名的apk
demo.keystore 证书的别名
三.扫描二维码 一直提示scan of undefined
解决方法:添加后需要删除平台platform 重新生成 才会在平台下生成新的插件包
四.发现ng-if ng-show ng-class ng-hide 等目前测试了这几个都存在一个问题,
这些指令里调用的方法会多次执行,并且在进入视图和离开视图都会触发执行,为什么?
五.view 生命周期:
//$ionicView.loaded
//$ionicView.beforeEnter
//$ionicView.enter
//$ionicView.afterEnter
//$ionicView.beforeLeave
//$ionicView.leave
//$ionicView.afterLeave
//$ionicView.unloaded
六.cordova 项目 极光推送集成步骤
目前SDK只支持Android 2.3或以上版本的手机系统。富媒体信息流功能则需Android3.0或以上版本的系统。
1、下载极光推送的phonegap插件:cn.jpush.phonegap.JPushPlugin 到本地,或者直接连接到git库上的地址 添加到项目中
2、SDK集成步骤
解压缩 jpush-sdk_v1.x.y.zip 集成压缩包
复制 libs/jpush-sdk-release1.x.y.jar 到工程 libs/ 目录下
复制 libs/armeabi/libjpush1xy.so 到工程 libs/armeabi 目录下
复制 libs/armeabi-v7a/libjpush.so 到工程 libs/armeabi-v7a 目录下
如果您的项目有 libs/armeabi-v7a 这个目录,请把 libs/armeabi-v7a下的so文件 也复制一份到这个目录。
复制 res/drawable-hdpi 中的资源文件到工程的 res/drawable-hdpi/ 目录下
复制 res/layout 中的布局文件到工程的 res/layout/ 目录下
说明 1:若没有drawable-xxxx/jpush_notification_icon这个资源默认使用应用图标作为通知icon,在5.0以上系统将应用图标作为statusbar icon可能显示不正常,用户可定义纯色icon替换这个文件,文件名不要变。
说明 2:如果要在gradle中配置 shrinkResources true 用来清理多余资源,请在res/raw/ 中添加一个keep.xml来描述保留JPushSDK中的必要资源。示例请参考版本包中的 res/raw/keep.xml文件。(2.1.5版本以上)
3、在极光官网上注册一个自己的账号,并登录。在应用控制台创建一个项目,此项目的包名一定要和你自己的cordova项目程序包名一致,如果不一致,请修改config.xml中包名
4、修改phonegap插件:android下的JPushPlugin.java文件,将引入的R包名前的包名修改为自己的程序包名:例如:import cn.hongtai.schoolApp.R;
5、修改plugn.xml文件中的JPUSH_APPKEY的值,此值为在极光推送官网创建的demo项目的appkey的值
6、修改ios文件夹下的PushConfig.plist文件里的appkey值
7、注意:如果项目生成一直报错,请打开项目下的AndroidManifest.xml配置文件,修改里面的项目包名与appkey值,然后重新生成项目即可
8、sdk服务端集成,服务端在官网上有c#的demo,修改里面的秘钥为你自己在官网创建的demo的秘钥
9、解决集成后会提示缺乏统计代码问题办法
在JPushInterface文件中添加如下代码即可
import cn.jpush.android.api.JPushInterface;
@Override
protected void onResume()
{
super.onResume();
JPushInterface.onResume(this);
}
@Override
protected void onPause()
{
super.onPause();
JPushInterface.onPause(this);
}
10.集成jpush后,项目在某些模拟器上运行接收不了推送信息,可能是项目没有添加兼容支持的cpu镜像文件
七、发现 给对象属性赋值报错只读的问题解决方法
var deferred = $q.defer();
var query = "select * from YongHu where yongHuId=?";
$cordovaSQLite.execute($rootScope._db, query, [yongHuId]).then(function (res) {
if (res.rows.length > 0) {
var user = {};
var _user = res.rows.item(0);
deferred.resolve(user);
}
}, function (err) {
deferred.reject();
});
return deferred.promise;
如果直接返回res.rows.item(0) 这个对象 的属性是只读的不能赋值,如果要给返回的对象进行赋值等操作,新创建一个对象返回
八、有出现跨域问题,解决办法
1.可用jsonp方法,具体网上找下资料有
2.客户端config.xml配置
服务端处理代码添加下面这句代码
context.Response.AddHeader("Access-Control-Allow-Origin", "*");
九、调用系统拨打电话和发送短信,可直接使用html5的a标签href:tel或者href:sms属性,但是需要配置下面两句话,使所有的地址都服从于白名单
十、各个插件git地址及说明
cordova-plugin-whitelist
cordova-plugin-device : 设备
cordova-plugin-console :控制台
cordova-plugin-statusbar : 状态栏
ionic-plugin-keyboard:https://github.com/driftyco/ionic-plugins-keyboard.git 键盘插件
cordova-plugin-x-toast :https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin.git 提示框插件
cordova-plugin-actionsheet :https://github.com/EddyVerbruggen/cordova-plugin-actionsheet.git ActionSheet插件
cordova-plugin-camera :摄像头插件
cn.jpush.phonegap.JPushPlugin :极光推送插件
cordova-sqlite-storage :https://github.com/litehelpers/Cordova-sqlite-storage.git sqlite本地存储插件
cordova-plugin-network-information :网络状态插件
cordova-plugin-splashscreen :启动动画插件 可控制启动动画的时间,隐藏等 原来的默认启动动画是3秒
//以下三个插件可控制文件上传 下载 打开等操作
cordova-plugin-file-transfer: 文件传输插件
cordova-plugin-file :文件
cordova-plugin-file-opener2:https://github.com/pwlin/cordova-plugin-file-opener2.git 文件打开
cordova-plugin-app-version:https://github.com/whiteoctober/cordova-plugin-app-version.git app版本信息插件 可用来判断当前app版本信息,自动更新用
phonegap-plugin-barcodescanner:https://github.com/phonegap/phonegap-plugin-barcodescanner.git 扫描枪,扫描条码
十一、配置文件参数说明
浏览器缓存是否启用
是否满屏
启动动画图片文件名
启动动画演示时间
屏幕方向 横屏还是竖屏
十二、require.js的使用
1.定义严格模块结构,例如:bootstrap.js文件
define(['app'], function (app) {
'use strict';
//方案1:如果不好理解方案2的内容可以直接
//angular.bootstrap(document, [app.name]);
//方案2:
angular.element(document).ready(function () {
var startApp = function () {
angular.bootstrap(document, [app.name]);
}
var onDeviceReady = function () {
angular.element().ready(function () {
startApp();
});
}
if (typeof cordova === 'undefined') {
startApp();
} else {
document.addEventListener("deviceready", onDeviceReady, false);
}
});
});
2.定义main.js文件
require.config({baseUrl: 'js',deps: ['bootstrap']});
3.引入require.js文件,在index.html 添加
4.模块化控制器:例如:
define(function (require) {
'use strict';
var services = require('service/services');
var controllers = angular.module('app.controllers', []);
controllers.controller("xiaoXiCtr", require('controller/tongxunlu/xiaoXiCtr'));
return controllers;
});
5.模块化服务,例如:
define(function (require) {
'use strict';
var services = angular.module('app.services', []);
services.factory("userService", require("service/common/userService"));
return services;
});
十三、
$ionicConfigProvider.scrolling.jsScrolling(false); //全局禁用js滚动条
$ionicConfigProvider.views.maxCache(5);//最大全局缓存为5个视图
十四、如果发现自动更新时候 下载apk错误,请配置mime下的类型 'apk': 'application/vnd.android.package-archive'
十五、ngCordova的使用 ngCordova是angular与cordova 集成的原生插件,是对原生的插件又进行了高层封装
1、下载ngCordova库,在index.html文件引入ng-cordova.js
app.js启动文件添加ngCordova 的依赖

浙公网安备 33010602011771号