快应用之授权登录

快应用的授权要区分多种情况,华为、魅族不支持微信账户授权,所以,华为要走华为的账号,魅族走魅族的账号,及打开网页和网页与快应用进行通信,最理想的登录就是手机验证码登录了1.华为账号授权先要在华为快应用网站上先创建一个快应用,这个快应用的名字等信息要和你即将要开发的快应用名字一样获取appid方法的链接证书指纹必须在华为ide上才能获取获取授权的接口文档也应该查看华为的开发文档,并且在调试的时候,必须使用华为ide来测试授权,如果使用快应用官方的,则授权返回的数据都是一些模拟的数据在生成指纹证书后,在sign文件夹中会有release文件夹,且生成pem后缀的文件,要将release中的文件复制到debug文件夹下,最好是将debug里面的文件删除,然后再粘贴到文件夹中,替换可能会出现问题首先用接口获取手机机型/* 如:华为则返回HUAWEI,华为荣耀也是返回HUAWEI */device.getInfo({ success: res => { this.deviceName = res.manufacturer; }})然后使用授权接口获取accessToken,这里华为提供的api和快应用官网提供的字段有些不同并且,华为文档中使用一个api就能够获得到用户的相关信息,但是快应用官网上的文档则需使用两个api来获取用户的基本信息/* 华为账号授权 */account.authorize({ appid: '', /* 华为文档提供的字段及华为快应用才有的appid */ state: '1', /* state可以指定任意值,认证服务器会原封不动地返回这个值 */ type: 'token', /* 设置type为获取token */ scope: 'scope.baseProfile', /* 设置为scope.baseProfile则获取用户的基本信息 */ success: auth => { /* 华为文档中使用authorize就能够获取用户的基本信息,包括昵称头像及openid和unionid,但是快应用官方文档则写的是要使用下面这个接口来返回用户的信息 */ account.getProfile({ appid: '', token: auth.accessToken, success: data => { let userInfo = {}; /* 因为文档中有写用户的相关信息都可能为空,如果你要用户头像,要判断下,不知华为测试放是否是使用测试账号,没有头像啥的,如果你直接赋值为data.avatar.default,则会报错,但是你用自己账号测试不会出现头像报错的现象 */ if(data.nickname) { userInfo.nickname = data.nickname; } else { userInfo.nickname = '小九'; } if(data.avatar.default) { userInfo.avatar = data.avatar.default; } else { userInfo.avatar = 'defaultimg.png'; } }, fail: () => { prompt.showToast({ message: '授权失败' }) } }) }, fail: () => { prompt.showToast({ message: '授权失败' }) }})因快应用官方文档和华为文档都写了用户的信息均可能为空,所以,走授权这条路不是很现实2.微信账号授权微信账号授权也有很多坑,微信账号的那个签名要在开发工具中的hap中点击生成MD5,然后你在测试的时候,上面的忘了讲了,你生成证书时会生成一个sign文件夹,即使你的项目还没有完全完成,你也要先生成正式的证书,然后将release里的两个证书文件复制到debug里面,最好是先删除debug文件夹中的文件然后直接粘贴到debug中,如果你的sign中只有release文件夹,可以自己新建一个debug文件夹微信授权你要先判断一下用户的手机中是否有微信或者用户的微信版本是否满足快应用授权/* 返回NONE 表示当前微信登录不可用,微信未安装或者手机系统不支持 */if(wxaccount.getType() == 'NONE') { prompt.showToast({ message: '手机系统不支持快应用,请升级后重试' }) this.showLogin = false;} 然后再进行授权wxaccount.authorize({ scope: 'snsapi_userinfo', /* snsapi_userinfo为授权用户基本信息 */ state: 'randomString', /* 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止 csrf 攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加 session 进行校验 */ success: data => { console.log(data) /* 获取code */ console.log(data.code) }, fail: () => { prompt.showToast({ message: '授权失败' }) },})3.魅族授权魅族的授权是使用网页端,这里又学了一招新的东西,就是网页与快应用进行通信/* 前端代码 */<template> <web id="web" trustedurl="{{trustedurl}}" @message="handleMessage" src="https://open-api.flyme.cn/oauth/authorize?response_type=token&scope=uc_basic_info"></web></template><script> import router from '@system.router'; import prompt from '@system.prompt'; export default { data() { return { /* 网页往快应用中发消息必须加上这个字段,就是你要进行通信的链接,最好进行转义 */ trustedurl: [/^https:\/\/baidu.com/] } }, /* 接收网页端返回的消息 */ handleMessage(msg) { /* 网页端往快应用发送消息无法直接发送对象,但是可以发送json字符串 */ /* 这个msg是我这边后端进行了一些数据的格式化 */ let message = JSON.parse(msg.message); console.log(message) } }</script>后端链接返回处理system.postMessage('hello')/* 文档是这样写的,但是呢,在html中直接这样写是不行的,应该是下面这样写 */window.system.postMessage('hello')4.使用手机号加验证码登录

October 17, 2019 · 1 min · jiezi

快应用开发的一些问题及总结

语法上像极了VUE和微信小程序的结合版。1、配置文件内没有小程序一样可直接配置程序的tab页。处理方法:写一个Main入口文件,使用tab组件引入对应的模块即可。2、Main入口文件编写完 发现新的问题,有几个tab页就会同时加载几个页面的文件,如果使用官方示例的懒加载,在切换时tab页其实是重新加载的,不能像vue一样去保存状态,主页面如果是加载静态数据的话,不太适合,每次都在刷新页面,经验比较少,暂时没找到合适的方案处理。3、通用样式支持较少,通过flex布局完成布局样式的处理,这三行样式设置用的挺多的 display: flex; flex-direction: column; flex-wrap: wrap; 4、证书生成后一定要保存好,面得提交审核时找不到之前的 重新生成一个又不一样了。5、不要给list组件上下文添加其他组件,如果需要的话,把需要添加的地方写到list子组件list-item内进行渲染。6、页面title,如果是跳转到webView页面,等待h5页面加载后titleBar才会进行替换,可以在点击进入的页面内穿参数到webView页面。7、background-color会在红米note3手机查看webView页面后,设置样式同时含有border-radius时也会导致background-color失效。暂时不不同时使用background-color、border-radius。技术人员说会在新的版本内处理这个兼容问题。

April 10, 2019 · 1 min · jiezi

快应用的开发注意点

随着公司越来越多业务线开发快应用,我们总结一下我们这个月开发快应用的心得及给出必要的指导。因为快应用与我们公司的预装策略有关,我们想要手机商预装我们的去哪儿App,那么我们就得帮他们推广一下他们的快应用。至于快应用是否能比微信小程序带来更多流量,那是另一回事了。快应用目前是由小米公司统一给九大手机商提供技术支持的,因此我们在开发快应用有问题时,直接问小米的人就行了。而小米在早期就开发过类似小程序的东西,因此它的体系与微信小程序出入比较大,像百度,支付宝,头条都是直接抄微信的,网上早有破解微信小程序的代码,因此他们在开发者工具,模板,接口,实现得几乎一样。而快应用则自己独立开发,是真正的native架构(其他公司是多webview架构),前端模板又是走vue那套,又没有统一的接口对象,许多经验是不能直接迁移的。最坑的是,由于没有webview,需要自己实现CSS引擎,小米早期为了性能考虑,许多CSS样式不支持的。下面就展开描述吧CSS层不支持继承。display只有两种值:flex与node。因此它勉强算是flexbox布局,但是它是没有inline-flex. 默认flex-direction为row, 因此其他小程序转换过来的页面大多数堆在一行里。如果对纯flexbox布局不熟悉,可以参考我们官网的文章,这里总结了一些布局 https://rubylouvre.github.io/…没有浮动与清理浮动的样式,即 float与overflow。定位没有相对定位与绝对定位,因此也没有z-index , 因此想实现某个东西浮在另一个东西的上面,需要用到它的stack标签。当然你也可以使用 负margin与transform 。没有精细地处理文本的样式,如text-overflow, letter-spacing, line-break ,overflow-wrap, tab-size, text-align, text-align-last, text-indent, text-justify, text-size-adjust, text-transform, white-space, word-break, word-spacing。浏览器中可以用16进制,颜色名,RGB, RGBA, HSL, HSLA 这些方式指定颜色值,但快应用只支持前两种。标签层面没有button,建议用我们提供Button。没有icon, 建议用我们提供Icon。文本节点必须放在text, span, a, label 标签内,否则它们不会显示。不过娜娜奇会帮你自己添加的。 并且text标签内容不能再套text标签, span标签内容不能再套span标签checkbox、 radio必须放在checkbox-group、 radio-group中,这是为了与其他平台保持一到,娜娜奇会帮你处理文本节点中有换行符,它们会真的换行的,不会像浏览器那样自动忽略。因此我们框架会自动去掉文本两边的空白或 移除纯的空白节点。list-item是一个巨坑,它总是会报各种BUG。为了减少BUG,它内部就不要使用if指令,而改用show指令。百度、微信,支付宝小程序是使用hidden指令隐藏元素,而快应用是用 show指令,我们会用娜娜奇做处理。组件render的第一行不能是 if, 三元表达式, 短路与, map循环,因为它们会生成block标签,而快应用的根标签不能为block。由于label下不能放text,因此不建议用label标签。swiper与其他小程序有差异,每次只展示一个标签,以后使用我们封装的swiper组件。快应用的标签都必须有闭标签,如<input />必须写成<input ></input>。如果用娜娜奇,我们会帮你做处理。快应用有div没有view,其他小程序有view没有div,建议统一使用div,娜娜奇做处理不支持data-*属性,在编译时会发出警告事件系统事件不能冒泡。事件不区分onXXX, catchXXX, 与其他小程序不一样,因此建议不想冒泡时一定要自己stopPropagationinput事件中,它的onChange事件相当于onInput事件。事件没有pageX, pageY。暂时没有touchstart, touchmove, touchend事件,听说下一版有。其他快应用没有页面组件这一概念,为了实现与其他小程序一样的效果,如往下拉,tabBar, 分享,我们是用了一层PageWrapper组件。如果你在app中使用enablePullDownRefresh,因为这会逼使娜娜奇在PageWrapper加一个list, list-item标签。上面提过,list-item很坑的。因此不要在app中使用enablePullDownRefresh,而是在特定的页面的config指定enablePullDownRefresh。<template> <anu-page-wrapper> <div> <div style="{{props[‘style1233’] }}"><text>async/await</text></div> <div><text>status:</text><text>{{state.status}}</text></div> <anu-button>试一试</anu-button> </div> </anu-page-wrapper></template>页面组件与普通组件的文件名都统一用index.js,这是方便我们兼容各种小程序的路由系统。我们想做日志收集,在App退出时,快应用是触发onDestory事件, 在其他小程序是触发onHide事件。目前就发现这些,如果大家有新的发现请告通我们。GITHUB提ISSUE或Qtalk找我都行。https://github.com/RubyLouvre…

December 4, 2018 · 1 min · jiezi

快应用开发者大赛,10 万大奖等你来拿 ????

????关于快应用 & 开发者大赛快应用是基于手机硬件平台的新型应用形态,标准是由主流手机厂商组成的快应用联盟联合制定。其标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台,以平台化的生态模式对个人开发者和企业开发者全品类开放。快应用具备传统APP完整的应用体验,无需安装、即点即用;覆盖 10 亿设备,与操作系统深度集成,探索新型应用场景。快应用── 复杂生活的简单答案,让生活更顺畅。 快应用开发者大赛,是由快应用生态平台十家硬件手机厂商努比亚、联想、一加、小米、vivo、华为、OPPO、金立、魅族、中兴主办,大赛围绕快应用生态平台统一的技术标准,进行快应用产品的开发设计。大赛秉承科技、生态、未来三个核心,希望开发者可以携手十家硬件厂商共同推进安卓手机应用体验的升级。关于大赛更多详情,可参见 快应用开发者大赛FAQ。????大赛设置了哪些奖项?社会组:一等奖,1名,奖金10万元 二等奖,2名,奖金5万元 三等奖,2名,奖金3万元 高校组:一等奖,1名,奖金5万元 二等奖,2名,奖金3万元 三等奖,2名,奖金1万元 团队奖:最具创新团队,1名,奖金3万元 最具潜力团队,1名,奖金3万元 最具扶持团队,1名,奖金3万元凡提交参赛作品的团队均可获得纪念证书一份获奖团队作品在2019年快应用市场宣传免费展示优秀开发者有机会可获得快应用生态平台成员6亿+级流量重点扶持????关于赛程安排欲知更多详情,可以参见 快应用官网服务全面升级,2018快应用开发者大赛来啦!。

October 13, 2018 · 1 min · jiezi