针对 微信小程序 的 getUserInfo 接口废弃,不能弹出授权窗口的问题

getUserInfo 接口废弃说明

官方给出的废弃getUserInfo接口的通知链接:小程序登录、用户信息相关接口调整说明

废弃时间:2021年4月28日以后

废弃后的使用情况:无法通过wx.getUserInfo与<button open-type="getUserInfo"/>获取用户个人信息(头像、昵称、性别与地区),将直接获取匿名数据(包括userInfo与encryptedData中的用户个人信息),获取加密后的openID与unionID数据的能力不做调整。

重点:数据匿名、也不再向用户发起授权请求。

getUserProfile接口 代替 getUserInfo 接口

解决方法:改用 getUserProfile接口调试

支持版本:2.10.4版本基础库开始支持(覆盖微信7.0.9以上版本)

优势:相比较getUserInfo 接口弹出的授权窗口,一点拒绝,之后再也无法弹出授权窗口。getUserProfile接口 完美修复了这个Bug

此次更新的原因:很多开发者在打开小程序时就通过组件方式唤起getUserInfo弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。

总结以下几个重点:

重点一:<button open-type="getUserInfo"/> 等同在  函数里直接调用 wx.getUserInfo的接口

重点二:2021年4月28日过后 改用 wx.getUserProfile接口 来代替 wx.getUserInfo接口

重点三:wx.getUserProfile(Object) 这里的Object 必须要有一个参数 desc 是 string类型的 用途:用来告诉用户为什么要获取用户的信息。

总结:如果你想向用户发起一个授权获取信息的请求,就不能使用 <button open-type="getUserInfo"/> 或者 wx.getUserInfo接口。 不想数据被匿名,也是同上。

改造示例:

使用uni-app开发的方法 来使用  button按钮标签与 uni.getUserProfile 接口的案例

<!-- 标签部分 -->

<!-- 登录按钮 -->
<button type="primary" class="btn-login" @click="getUserInfo">一键登录</button>




// js 部分
getUserInfo(){
    uni.getUserProfile({
        // desc 属性是必须要添加的属性  string类型  用途:是告知用户为什么需要获取用户信息
        desc: '获取用户信息',
        success(info){
            // 这里获取的信息等同于 以前的getUserInfo返回的信息
            console.log(info)
        }
    })
}

getUserProfile 接口的使用方法:

wx的文档: wx.getUserProfile(Object object) 的 微信文档说明 链接

uni-app的文档: uni.login(OBJECT) uni-app上使用的说明文档 链接

<think>好的,我现在需要回答用户关于在微信小程序中获取用户头像和昵称的问题,特别是使用wx.getUserInfo的示例。首先,我要回忆一下微信小程序的API变化。记得之前wx.getUserInfo可以直接获取用户信息,但后来因为隐私政策调整,可能需要用户授权才能使用。不过根据用户提供的引用,特别是引用[2]和[4],现在wx.getUserInfo可能返回默认的头像和昵称,比如灰色头像和“微信用户”的昵称。 用户提到引用[2]指出wx.getUserProfile接口废弃,所以现在可能需要其他方法。根据引用[3]和[4],替代方案可能包括使用按钮触发授权,比如createUserInfoButton或者让用户主动点击按钮后获取信息。另外,引用[4]提到HBuilderX(uniapp)的实现方法,可能需要结合getUserProfile或者新的API。 接下来,我需要确保回答符合用户的要求,给出具体的实现步骤和示例代码。需要注意现在wx.getUserInfo可能不再直接返回真实信息,所以正确的做法应该是引导用户点击按钮,使用getUserProfile或者新的方式。不过根据引用[2],getUserProfile也被收回了,所以可能需要使用其他方法,比如用户主动选择头像和昵称,例如通过表单或按钮跳转到设置页。 另外,要参考微信官方的最新文档,确保方法不过时。根据引用[4],可能需要使用按钮组件,例如button的open-type设置为getUserInfo,然后在回调中获取信息。不过根据引用[2],使用wx.getUserInfo返回的是默认信息,所以需要结合其他方法,比如让用户手动上传头像,填写昵称。 可能正确的步骤是:1. 使用按钮触发授权,2. 用户点击后弹出授权窗口,3. 在回调函数中获取用户信息。但需要注意接口的变化,可能需要使用getUserProfile或者新的API。不过根据引用[2],getUserProfile已被废弃,所以现在可能需要使用其他的方式,比如用户主动填写表单或选择头像。 因此,正确的示例代码可能包括创建一个按钮,设置open-type为getUserInfo,绑定事件处理函数,在回调中获取用户信息。但需要指出现在返回的可能只是默认信息,需要用户主动上传。或者可能需要使用新的API,比如wx.chooseAvatar和wx.chooseNickName来让用户选择头像和昵称。 综上所述,我需要整理这些步骤,确保代码示例正确,并且符合微信当前的规定。同时,要引用用户提供的参考资料,特别是引用[2]和[4]中的信息,说明接口的变化和替代方案。</think>### 微信小程序获取用户头像与昵称的实现方法 由于微信调整了用户信息获取规则,原接口 `wx.getUserInfo` 和 `wx.getUserProfile` 可能返回默认信息(如灰色头像和“微信用户”昵称)[^2][^4]。以下是当前(2023年)推荐实现方案: --- #### **方法1:使用按钮引导用户主动上传** 通过按钮组件触发用户主动选择头像或填写昵称: ```javascript // WXML <button open-type="chooseAvatar" bindchooseavatar="onChooseAvatar">选择头像</button> <input type="nickname" placeholder="请输入昵称" /> ``` ```javascript // JS Page({ onChooseAvatar(e) { const { avatarUrl } = e.detail; this.setData({ avatar: avatarUrl }); // 获取头像临时路径 } }) ``` --- #### **方法2:通过授权按钮获取基础信息(可能返回默认值)** 若仍需使用旧接口,需用户主动触发按钮: ```javascript // WXML <button open-type="getUserInfo" bindgetuserinfo="onGetUserInfo">授权获取信息</button> ``` ```javascript // JS Page({ onGetUserInfo(e) { const { userInfo } = e.detail; console.log(userInfo.avatarUrl, userInfo.nickName); // 可能返回默认信息[^2] } }) ``` --- #### **注意事项** 1. **真实信息获取限制**:微信已限制直接获取真实头像和昵称,需用户主动上传或填写[^4]。 2. **接口调整**:`wx.getUserProfile` 接口废弃,不再推荐使用[^3]。 3. **兼容性**:新接口(如 `chooseAvatar`)需基础库版本≥2.21.2,旧版本需降级处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值