小程序使用微信地址or小程序跳转设置页
如果你有使用过小程序需要你授权微信地址的情况,那么正常的逻辑应该是这样的:
点击获取地址后,弹窗:

此时我相信选择拒绝的人应该还是比较多的,毕竟这是敏感数据,拒绝后再看页面相关功能是否有使用地址的合适理由,再重新点击给予权限。
问题是坑就在这里出现:小程序是会记住用户对上一次的授权情况,因为用户拒绝过,所以此时调用wx.chooseAddress()方法是不会再主动弹窗的,这时的处理是要跳转到权限设置页让用户打开。
当然,第二次点击时,直接跳转设置页就不太合理,而应该是先弹窗说明下:

在开发的过程中,被神奇的坑了一把。这个弹窗是在model当中,一开始将openSetting方法放在model中,当用户confirm去设置的时候调用,结果发现压根没反应。去看了官方的文档说:

看了下面一些评论之后,以为无法在model中调用openSetting方法跳转设置页,就在以为不得不要手动写model弹窗时,突然发现跳转可以在model中实现了!!!。
下面就不多废话,贴上现在可以正常运行的代码,帮助现在看文章的你解决下这个地址处理问题:
(这边用了京东的小程序开发框架,如果你用原生或其他框架看懂逻辑即可)
<View
className="right"
onClick={this.chooseAddress}
>
<Text className="text">
{address ? '切换地址' : '选择地址'}
</Text>
<Image src={rightImg} className="icon-right" />
</View>
chooseAddress() {
Taro.chooseAddress().then(
res => {
const { cityName, countyName, detailInfo, provinceName } = res;
this.setState({
address: provinceName + cityName + countyName + detailInfo,
});
},
err => {
if (err.errMsg === 'chooseAddress:fail auth deny') {
const { title, content, confirmText } = modalData.address; // tips:像这种获取手机,地址等通用信息的弹窗信息,最好抽离到公共常量数据,因为其他页面也可能用到,就不用每个用到的页面都写一次。
即使只有一个地方用到,也不应该将这里弹窗提示的中文代码放这里,因为下面的代码看起来明显简洁很多。
Taro.showModal({
title,
content,
confirmText,
}).then(res => {
if (res.confirm) {
Taro.openSetting();
}
});
}
},
);
}
看完代码的你是不是有点懵,就这样?是的,上面就是实现功能所需代码。
看到有一些人有用到getSetting方法去提前获取用户权限设置,我这边实践发现貌似用不上,因为无论提前获取到的是否true or false,都要调用chooseAddress方法(第一次下面弹窗询问的也是这个方法实现的),所以这边实现代码就如上所说。
小程序使用微信地址or小程序跳转设置页的更多相关文章
- 微信答题小程序 微信小程序 答题 demo 头脑王者这样的答题小程序开发 答题的微信小程序开发经验 微信答题比赛小程序
最近随着王思聪的我撒币,我快乐,直播答题非常火.同时知乎的答题小程序头脑王者也非常火爆.大家在微信和微信群里玩的不亦乐乎. 好吧,快乐总是属于你们,我却只能埋头写代码... 公司要求赶紧开发一个这样的 ...
- 微信小程序(原名微信应用号)开发工具0.9版安装教程
微信小程序全称微信公众平台·小程序,原名微信公众平台·应用号(简称微信应用号) 声明 微信小程序开发工具类似于一个轻量级的IDE集成开发环境,目前仅开放给了少部分受微信官方邀请的人士(据说仅200个名 ...
- TP3.2校验微信公众号||小程序 服务器地址
1.在TP3.2里面,写一个控制器,用来校验微信公众号||小程序的服务器地址 <?php namespace Home\Controller; use Think\Controller; hea ...
- JavaScript和微信小程序获取IP地址的方法
最近公司新加了一个需求,根据用户登录的IP地址判断是否重复登录,重复登录就进行逼退,那么怎么获取到浏览器的IP地址呢?最后发现搜狐提供了一个JS接口,可以通过它获取到客户端的IP. 接口地址如下: h ...
- 微信小程序之提高应用速度小技巧
作者:vicyao, 腾讯web前端开发 高级工程师商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. 原文链接:http://wetest.qq.com/lab/view/294.htm ...
- [小程序开发] 微信小程序内嵌网页web-view开发教程
为了便于开发者灵活配置小程序,微信小程序开放了内嵌网页能力.这意味着小程序的内容不再局限于pages和large,我们可以借助内嵌网页丰富小程序的内容.下面附上详细的开发教程(含视频操作以及注意事项) ...
- 微信小程序之微信登陆 —— 微信小程序教程系列(20)
简介: 微信登陆,在新建一个微信小程序Hello World项目的时候,就可以看到项目中出现了我们的微信头像,其实这个Hello World项目,就有一个简化版的微信登陆.只不过是,还没有写入到咱们自 ...
- 微信小程序PHP 微信支付接口调用
小程序端 /** * 微信支付接口 */ wxPaymoney:function (out_trade_no, true_money){ //out_trade_no 后台统一下单接口需要用 var ...
- [微信小程序] 认识微信小程序及开发环境搭建
微信公众平台首页 https://mp.weixin.qq.com 微信公众平台测试帐号系统 https://open.weixin.qq.com/connect/qrconnect?appid=wx ...
随机推荐
- 「AGC034D」 Manhattan Max Matching
「AGC034D」 Manhattan Max Matching 传送门 不知道这个结论啊... (其实就是菜嘛) 首先 \(O(n^2)\) 的建边显然不太行. 曼哈顿距离有这样一个性质,如果将绝对 ...
- python使用笔记19--网络操作
1.get请求 1 import requests 2 import datetime 3 #get请求 4 url = 'http://api.nnzhp.cn/api/user/stu_info' ...
- k8s之deployment详解
Deployment介绍 为了更好地解决服务编排的问题,k8s在V1.2版本开始,引入了deployment控制器,值得一提的是,这种控制器并不直接管理pod, 而是通过管理replicaset来间接 ...
- Jmeter之事务控制器
性能测试的结果统计时我们一定会关注TPS,TPS代表的是每秒事务数,每个事务对应的是我们的请求.虽然JMeter能够帮我们把每个请求统计成一个事务,但有时候我们希望把多个操作统计成一个事务,JMete ...
- ES 基础知识点总结
为什么使用 ES? 在传统的数据库中,如果使用某列记录某件商品的标题或简介.在检索时要想使用关键词来查询某个记录,那么是很困难的,假设搜索关键词 "小米",那么 sql 语句就是 ...
- Day12 抽象类、接口、内部类-面向对象编程(3)
抽象类 abstract修饰符可以用来修饰方法也可以用来修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类: 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类. ...
- 前端开发入门到进阶第三集【JavaScript中如何将html字符串转化为Jquery对象或者Dom对象】
https://www.cnblogs.com/mingjiatang/p/4746845.html
- 详述 IntelliJ IDEA 远程调试 Tomcat 的方法
首先,配置remote: 如上图所示,点击Edit Configurations,进入如下界面: 如上图所示,我们进入了Run/Debug Configurations界面,然后点击左上角的+,选择R ...
- informix 数据库锁表分析和解决方法
一.前言 在联机事务处理(OLTP)的数据库应用系统中,多用户.多任务的并发性是系统最重要的技术指标之一.为了提高并发性,目前大部分RDBMS都采用加锁技术.然而由于现实环境的复杂性,使用加锁技术又不 ...
- 深入刨析tomcat 之---第10篇 how tomcat works 第13章,Response 发送错误信息 sendError
writedby 张艳涛 在浏览器中发送一个错误应用url 那么tomcat是如何发送错误的呢? 基本上是发送http 的response协议,分为两部分一部分是response设置头信息, 那么先分 ...