现在微信小程序获取用户昵称只能通过昵称填写的方式获取吗?

这里是小程序昵称填写组件,填写完后我们就可以获取到用户昵称

<input type="nickname" v-model="nickname" @blur="getNickname" placeholder="请输入昵称"/>  

有些用户不会去主动填写昵称,他们都是登录完成后直接去使用的,这种场景我们就需要通过某些方法直接获取到用户昵称,而不是先填写后获取
现在的实现方式:

<button open-type="getUserInfo" @getuserinfo="handleGetUserInfo">获取用户信息</button>
handleGetUserInfo(e) {
 console.log('用户信息',e)
}

image.png
通过uni.getUserInfo无法获取用户昵称,返回的是“微信用户”字样
image.png
具体可以看:小程序用户头像昵称获取规则调整公告官
预期:
通过某些方式直接获取到用户昵称,而不是让用户先填写昵称再获取,因为有些用户可能不会去主动填写昵称,请问有什么方法实现吗?

阅读 1.7k
avatarAI BotBETA

答案

在微信小程序中,从微信接口直接获取用户昵称的方式已经发生了变化,特别是在微信加强隐私保护政策之后。目前,微信小程序获取用户昵称的主要方式确实是通过用户主动填写,或者使用微信提供的 button 组件引导用户授权获取用户信息。

对于你提到的 uni.getUserInfo 方法返回的是“微信用户”字样,这是因为从微信 API 获取的用户信息中,如果用户未授权昵称等个人信息,则默认只会返回一些基础信息(如 openId),而不会包含昵称、头像等敏感信息。

要实现直接获取用户昵称而不依赖用户主动填写,目前的方法主要是:

  1. 使用微信提供的 <button open-type="getUserInfo"> 组件:这种方式会弹出一个授权框,用户同意后可以直接获取到昵称、头像等信息。示例代码如下:

    <button open-type="getUserInfo" @getuserinfo="handleGetUserInfo">获取用户信息</button>
在 `handleGetUserInfo` 方法中处理获取到的用户信息:

```javascript
methods: {
    handleGetUserInfo(e) {
        if (e.detail.userInfo) {
            // 用户按了允许授权按钮
            console.log('用户昵称为:', e.detail.userInfo.nickName);
        } else {
            // 用户按了拒绝按钮
            console.log('用户拒绝授权');
        }
    }
}
```
  1. 引导用户主动完善资料:在用户登录后,可以在适当的时候(如首次使用时、个人资料页面等)引导用户主动填写昵称等信息。
  2. 使用微信小程序的云开发能力:虽然这不直接获取用户昵称,但可以通过云函数等后端服务处理一些逻辑,比如根据用户的 openId 在数据库中查找之前存储的昵称(如果用户之前授权过并存储了信息)。

总之,由于隐私政策的限制,微信小程序无法直接获取未授权用户的昵称,必须通过用户授权才能实现。因此,建议在设计小程序时,充分考虑用户隐私,合理引导用户授权,并提供良好的用户体验。

2 个回答

type="nickname" 使用时会有一个 loading 弹框,用户体验很差,如果需要获取昵称,可以通过后端获取

推荐问题
宣传栏