Uni-App 小程序面试题高频问答汇总
1、你在uni-app中如何做多端适配的?
● 使用UniApp提供的跨平台组件和API
UniApp提供了一系列的跨平台组件和API,例如<view>、<text>、<image>等。这些组件和API在不同平台上有着相同或相似的表现和功能,可以方便地实现多端适配。
● 使用flex布局
UniApp支持使用flex布局,在不同设备上能够自适应调整布局。通过设置弹性盒子的属性和子项的属性,可以实现页面元素的水平和垂直布局,适应不同屏幕尺寸的设备。
● 使用百分比单位和rpx单位
UniApp支持使用百分比单位和rpx单位来设置元素的宽度、高度、边距等。百分比单位可以根据父元素的大小来调整元素的尺寸,而rpx单位可以根据设备的像素密度进行自适应调整。
● 使用条件编译指令
UniApp提供了条件编译指令,可以根据不同平台或不同版本号来编写不同的代码逻辑。通过条件编译指令,可以实现平台独立的代码和平台特定的代码,从而更好地进行多端适配。
综上所述,通过使用UniApp提供的跨平台组件和API、弹性布局、百分比单位、rpx单位、条件编译指令以及测试和调试工具,可以实现在UniApp中的多端适配。同时,合理的布局和样式设计也是保证多端适配效果的重要因素,需要结合具体需求和平台特点进行综合考虑。
2、请说一说uni-app中如何做跨端兼容?
在uni-app中,可以通过条件编译做跨端兼容,实现在不同平台展示不同的结构、样式、行为
条件编译是一种根据不同的平台或版本号,在代码中选择性地编写不同逻辑的技术。通过条件编译指令,可以在编译时根据条件判断来选择性地包含或排除某些代码块。
uni-app中的条件编译使用了类似于 C 语言的预处理器指令,可以根据 $PLATFORM 变量和 __VERSION__ 变量来进行条件判断。以下是 UniApp 中常用的条件编译指令:
● #ifdef:如果指定的标识符已被 #define 过,则编译下面的代码块。
● #ifndef:如果指定的标识符未被 #define 过,则编译下面的代码块。
● #if:如果满足给定的条件表达式,则编译下面的代码块。
● #else:与 #ifdef 或 #ifndef 配套使用,如果前面的条件不满足,则编译下面的代码块。
● #endif:结束一个条件编译的代码块。
3、小程序登录授权流程 ?
① 微信服务器验证:
当⽤户打开⼩程序时,⼩程序会向⽤户展示登录按钮,⽤户点击登录按钮后,⼩程序会向微信服务器发送登录请求(wx.login())。微信服务器接收到登录请求后,会验证⼩程序的身份和 合法性。如果⼩程序通过验证,微信服务器会⽣成⼀个临时的登录凭证(code)。
code有效时间仅为5分钟, 如果5分钟内⼩程序的后台不拿着这个临时身份证来微信后台服务器换取微信⽤户id的话,那么这个身份证就会被作废,需要再调⽤wx.login重新⽣成登录凭证。
② 发送code到开发者服务器:
在wx.login的success回调中拿到微信登录凭证,紧接着会通过 wx.request把code传到开发者服务器,为了后续可以换取微信⽤户身份id。
③ 获取⽤户信息:
⼩程序通过调⽤微信提供的API,使⽤临时登录凭证(code)向微信服务器发送请 求,以获取⽤户的唯⼀标识(openid)和会话密钥(session_key)。
④ 绑定微信⽤户身份id和业务⽤户身份:
此时开发者后台通过校验⽤户名密码就拿到了业务侧的⽤户身 份id,通过code到微信服务器获取微信侧的⽤户身份openid。微信会建议开发者把这两个信息的对应关 系存起来,我们把这个对应关系称之为“绑定”。 有了这个绑定信息,⼩程序在下次需要⽤户登录的时候就可以不需要输⼊账号密码,因为通过wx.login() 获取到code之后,可以拿到⽤户的微信身份openid,通过绑定信息就可以查出业务侧的⽤户身份id,这 样静默授权的登录⽅式显得⾮常便捷。
⑤⑥⑦ 业务登录凭证SessionId:
⽤户登录成功之后,开发者服务器需要⽣成会话密钥SessionId,在服 务端保持SessionId对应的⽤户身份信息,同时把SessionId返回给⼩程序。⼩程序后续发起的请求中携带 上SessionId,开发者服务器就可以通过服务器端的Session信息查询到当前登录⽤户的身份,这样我们 就不需要每次都重新获取code,省去了很多通信消耗。
4、uni-app中 ⼀键登录 如何实现 ?
uni⼀键登录是DCloud联合个推公司推出的,整合了三⼤运营商⽹关认证能⼒的服务。
uni⼀键登录是替代短信验证登录的下⼀代登录验证⽅式,能消除现有短信验证模式等待时间⻓、 操作繁琐和容易泄露的痛点。
为什么要使用一键登录?
1. ⽤户体验好; ⼀键登录,⽆需等待和复制短信验证码,能有效降低⽤户流失率,提升⽤户注册量在App 激活量中的转换率。
2. 便宜; 使⽤uni⼀键登录,每次验证仅需2分!⽐短信验证码便宜数倍,也⽐市场上三⽅提供的⼀ 键登录要更便宜。
3. 开发体验好 ; 采⽤运营商⽹关认证,避免短信劫持,有效提升安全性 ; ⽆需原⽣插件,⽆需⾃定义基座(HBuilder标准基座就可以直接运⾏调试),简单快速完 成上线。
实现步骤?
1. App界⾯弹出请求授权,询问⽤户是否同意授权该App获取⼿机号。这个授权请求界⾯是运营 商sdk弹出的,可以有限定制。
2. ⽤户同意授权后,SDK底层访问运营商⽹关鉴权,获得当前设备access_token等信息。
3. 在服务器侧通过 uniCloud 将access_token等信息 置换为当前设备的真实⼿机号码。然后服 务器直接⼊库,避免⼿机号传递到前端发⽣的不可信情况。
4. 前置条件:
● ⼿机安装有sim卡
● ⼿机开启数据流量(与wifi⽆关,不要求关闭wifi,但数据流量不能禁⽤。)
● 开通uniCloud服务(但不要求所有后台代码都使⽤uniCloud)
5、uni-app小程序的上线流程