hbuilder开发5+APP采坑记录
开发⼀款APP产品需要在安卓和苹果2⼤平台发布,同时开发团队也需要有安卓和IOS。
HTML5 Plus移动App,简称5+App,是⼀种基于HTML、JS、CSS编写的运⾏于⼿机端的App,这种App可以通过扩展的JS API任意调⽤⼿机的原⽣能⼒,实现与原⽣App同样强⼤的功能和性能。
通过5+App可以降低APP开发的门槛,让⼀般的前端开发⼈员也可以进⾏APP的开发,同时能为公司节约很⼤的成本,只需要⼀个前端团队即可。
最近我司为了快速发布⼀个APP产品,也选择了5+App这种⽅式,由于本⼈主要是做后端开发的,前端这块不是很熟,在开发过程中遇到了很多的问题,特别是⼀些IOS证书的申请流程,搞的晕头转向,为了 避免后⾯的同学采坑,在这⾥将采坑的内容分享出来。
APP图标问题?
在真机调试环境下,hbuilder会把APP内容同步到我们的⼿机中,这个时候图标显⽰的是hbuilder的图标,不是我们在启动页设置好了的⾃⼰的图标,这个需要将APP打包后装在⼿机上才可以显⽰出来。
启动页图⽚问题?
启动页图⽚有2个问题,⼀个是和上⾯图标⼀样的问题,在真机调试环境下是没效果的,还有个问题就是不能去掉,很多APP都会在启动时候加载⼀些⼴告内容,这是⼀个很常见的需求,hbuilder中只能配置静态的本地图⽚然后打包到APP中,不能做成动态的,当时我想的是能不能直接配⼀个图⽚地址,然后就可以达到动态的效果,事实证明是不⾏的,打包不了。
那么如何解决这个问题呢?
既然启动页不能更改,也去不掉,那就制作⼀张⾃⼰公司logo的启动页⾯,在启动页⾯加载完成之后⾃⼰实现⼀个⼴告页⾯,⼴告页⾯后就是我们的APP⾸页,通过这种⽅式来达到动态启动⼴告页的效果,由于我本⼈没做过原⽣的移动开发,不知道在原⽣的开发中能不能将启动页去掉,我们这边⽤的是别⼈的框架,这个就只能妥协了,当然启动页⾯也是有必要的,可以让APP在启动时将⼀些资源提前加载好。
我看了⼀些其他的APP,⽐如微店买家版,也是有⾃⼰的启动图⽚,然后再跳转到⼴告页⾯,最后到⾸页的。
APP中⽤百度地图定位问题?
登录问题?
在创建应⽤的时候需要分别填写安卓和IOS的信息
IOS需要注意的是Bundle ID的填写,⼀个是正式的,⼀个是测试环境下使⽤的,Bundle ID通常都是公司的包名称,⽐如
安卓没有Bundle ID这个说法,安卓的叫应⽤包名,⽽且不区分正式和测试环境,只需要填写⼀个就可以了,⽐如iandi.app
前提是你得将你的APP⽤签名⽂件进⾏签名打包,然后安装到你的⼿机上,最后下载提供的签名获取⼯具安装到⼿机上,通过这个⼯具获取签名然后填写到开发平台的账号申请信息中即可。
最重要的问题来了,我的APP怎么签名打包呀?
在jdk的bin⽂件中,输⼊以下命名进⾏⽂件⽣成:
keytool -genkey-alias别名-keyalg RSA -validity10000-keystore⽂件名.keystore
alias是你要填写的别名
⽂件名.keystore 是⽂件保存的名称
回车之后会让你填写⼀些基本的证书信息还有密码,密码⼀定要记住
如果⼤家不是Java开发⼈员,本地可能没有按照jdk,这个时候你可以⽤hbuilder开发包中⾃带的jre的bin⽬录去⽣产证书。
打包的话就可以选择使⽤⾃⼰的证书,然后填写下图的信息,最后打包安装到⾃⼰的⼿机中获取签名:
等那边审核通过之后,你会得到⼀个appid和appsecret,直接在SDK配置中进⾏配置即可使⽤登录的功能。
登录⽰例可以参考官⽅给的demo,记得在注销登录的时候调⽤下⾯的退出登录⽅法:
function logout(auth){
auth.logout(function(){
outLine("注销\""+auth.description+"\"成功");
},function(e){
outLine("注销\""+auth.description+"\"失败:"+e.message);
});
}
如果不调⽤logout⽅法会导致当你⼿机中的切换成另⼀个账号的时候,你登录获取的还是之前的信息,有缓存。推送问题?
hbuilder开发APP时默认集成了⼀些第三⽅的推送功能,⽐如个推。当然在使⽤的过程中也踩过⼀些坑。
1.IOS使⽤普通消息模板进⾏推送时会弹出⼀个很丑的框,效果图如下:
那么怎么去掉这个⽐较丑的框呢,在推送的时候我们⽤透传消息模版来推送就不会出现这个框了,这个时候就需要⾃⼰⽤代码监控消息过来,当收到消息的时候你可以⾃⼰创建⼀个本地消息或者⽤系统消息提⽰框来代替。
本地消息创建:
function createLocalPushMsg(){
var options = {cover:false};
var str = dateToStr(new Date());
android获取真正的签名str += ": 欢迎使⽤HTML5+创建本地消息!";
ateMessage( str, "LocalMSG", options );
outSet( "创建本地消息成功!" );
outLine( "请到系统消息中⼼查看!" );
if(plus.os.name=="iOS"){
outLine('*如果⽆法创建消息,请到"设置"->"通知"中配置应⽤在通知中⼼显⽰!');
}
}
系统提⽰框:
plus.nativeUI.alert()
2.IOS离线推送收不到?
安卓的APP如果被杀死了,想要做离线推送是不可能的,只能通过⼿机⼚商来实现离线推送,IOS中也是通过苹果提供的APNS服务来实现离线消息的推送功能。
通过setAPNInfo(ApnPayload payload);来设置推送信息,但是按照这样的做法改了代码之后还是死活收不到消息,在线的就可以了,搞了好久最后怀疑是评估证书的问题,在个推中创建推送应⽤是需要传证书的,最开始之前我传的.p12证书是通过 ⽣成的,这个证书打包时要⽤到,当时也没什么问题,到后来发现离线推送不⾏了,才去原因,发现苹果开发者中⼼还有⼀个推送的证书类型,我去,这么⿇烦,⼜单独申请了⼀个推送的证书
然后通过下⾯的⽅式⽣成了⼀个推送的.p12⽂件,上传到个推,最后才能收到离线消息。
⽣成p12需要3个⽂件:
1,本机在developer.apple/ios/manage/certificates/team/index.action⽣成certifacates时上
传的本机证书:SigningR 2,从developer.apple/ios/manage/overview/index.action的app IDs⾥拿到的Push SSLCertificate,命名为:
3,在本机双击会⾃动加载到本机的Keychain中,在keychain中到该证书,展开,导出其下的private key为:key.p12
将以上3个⽂件放在同⼀个⽂件夹中,并⽤terminal打开,⼀次输⼊下⾯命令(需要输⼊密码时均填写123456):
1,openssl x509 - -inform DER -out aps.pem -outform PEM
2,openssl pkcs12 -nocerts -out key.pem -in key.p12
3,openssl pkcs12 -export -in aps.pem -inkey key.pem -SigningRequest -name "push" -out push.p12
即可⽣成需要的p12
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论