gh-qqnews-user
v1.0.1
Published
获取用户的头像昵称和登录类型
Downloads
8
Readme
腾讯新闻增长技术团队的用户信息
背景介绍(Background)
当前 npm 包集合了获取用户信息、登录、切换登录态、退出登录等功能。可以在新闻客户端、微信、QQ、浏览器等环境中使用。
请注意,当前组件只在*.qq.com
中使用。
- getUserInfo:获取用户信息;
- login:登录,在手 Q 中自动获取登录态,无需登录;
- changeLogin:切换登录,只在新闻客户端中使用;
- logout:退出登录,只在新闻客户端中使用;
安装(Install)
使用 npm:
$ npm install gh-qqnews-user
使用 bower:
$ bower install gh-qqnews-user
使用 yarn:
$ yarn add gh-qqnews-user
使用 jsDelivr 的 CDN 地址:
<script src="https://cdn.jsdelivr.net/npm/gh-qqnews-user"></script>
使用 unpkg 的 CDN 地址:
<script src="https://unpkg.com/gh-qqnews-user"></script>
使用方式(Usage)
这里要提供先直接用一个简单的例子,介绍如何使用。
import { getUserInfo, login, changeLogin, logout } from "gh-qqnews-user";
// 获取用户信息
// 支持回调函数
// 该方法返回的字段,可以继续下拉,有介绍
getUserInfo((userinfo) => {
console(userinfo);
});
// 支持Promise
getUserInfo().then((userinfo) => {
console.log(userinfo);
});
// 登录
login("qqorweixin", (islogined) => {
console.log("login", islogined);
});
login("qqorweixin").then((islogined) => {
console.log("login", islogined);
};
login().then((islogined) => {
console.log("login", islogined);
};
// 切换登录方式
changeLogin("qqorweixin").then((islogined) => {
console.log("login", islogined);
};
// 退出登录
logout();
各方法的说明
getUserInfo
返回的字段
获取用户的信息,包含了用户的登录方式、昵称、头像和 openid:
未登录时:
{
"logintype": "" // 为空时表示未登录
}
已登录:
{
"logintype": "qq", // 已登录,qq:qq或qq互联登录,weixin:微信登录
"openid": "123456",
"nickname": "帅小丘",
"avatar": "http://thirdqq.qlogo.cn/g?b=oidb&k=I5M9qhYB4s0sZsicicCPouibw&s=100&t=1483288257"
}
传入的参数
同时,该方法还可以传入参数,若第 1 个参数是newsapp
或者liteapp
,则直接从接口获取用户的信息。
这里有多种的调用方式:
// declare function getUserInfo(): Promise<UserInfoResult>;
// declare function getUserInfo(callback: (userInfo: UserInfoResult) => void): Promise<UserInfoResult>;
// declare function getUserInfo(app: "newsapp" | "liteapp"): Promise<UserInfoResult>;
// declare function getUserInfo(app: "newsapp" | "liteapp", callback: (userInfo: UserInfoResult) => void): Promise<UserInfoResult>;
// 回调函数
getUserInfo((userinfo) => {
console(userinfo);
});
// Promise
getUserInfo().then((userinfo) => {
console.log(userinfo);
});
// 所在的APP和回调函数
getUserInfo('newsapp', (userinfo) => {
console(userinfo);
});
// 所在的APP和Promise
getUserInfo('newsapp').then((userinfo) => {
console.log(userinfo);
});
login
登录。可以在微信、新闻客户端中拉起登录。
传入的参数只在客户端中生效,在微信中默认会使用微信公众号授权登录,QQ 中无需登录,需要选择登录方式:
- 空: 则默认为 qqorweixin 的方式;
- qq: QQ 登录;
- weixin: 微信登录;
- qqorweixin: QQ 或微信登录,用户可以任意选择,只在新闻客户端中生效;
回调方式支持回调函数和 Promise;
login((islogined) => {
console.log(islogined);
});
login().then((islogined) => {
console.log(islogined);
});
// 新闻客户端中,拉起双登录
login('qqorweixin', (islogined) => {
console.log(islogined);
});
login('qqorweixin').then((islogined) => {
console.log(islogined);
});
// 新闻客户端中,只拉起QQ登录
login('qq').then((islogined) => {
console.log(islogined);
});
// 新闻客户端中,只拉起微信登录
login('weixin').then((islogined) => {
console.log(islogined);
});
注意:
在 iOS 的新闻客户端中,不论用户是否已经登录,都可以使用
login
再次呼起登录;在 Android 的新闻客户端中,若呼起的登录方式与当前的登录态相同,则直接回调为 false,不会弹出登录窗口,比如当前为 QQ 登录,那么再次使用qqorweixin
呼起登录时,都会直接回调为 false。
同时,在这两个系统的新闻客户端内,若再次呼起登录的方式,与当前的登录状态不一样,则后登录的账户会作为副账户存在,不会顶掉当前主账户的信息。
changeLogin
切换主登录方式。
在上面我们已经说过login
会存在两个问题:
- Android 下若呼起的登录方式与当前的登录态相同,则无法重新登录;
- iOS 和 Android 下,若呼起的登录方式与当前的登录态不同是,则后登录的账号作为副账户存在
为了解决这两个问题,客户端还提供了切换账号的功能,其实就是: 退出当前账号(logout)+重新登录(login)。若我们使用上面两个方式的组合来让用户重新登录,iOS 下没问题,但在 Android 下,退出账号时会首先弹窗确认,而这个弹窗确认是不会阻止后面的 login 进程的,login 就会进入到自己的判断流程,导致 login 失败。
这里我们使用changeLogin(string logintype, function callback)
来切换账号。使用方式与 login 一样:
第 1 个参数登录的方式有:
qq
:只有 QQ 登录按钮 ;weixin
: 只有微信登录按钮;qqorweixin
; QQ 和微信按钮都有,用户可以任意选择
第 2 个参数是登录后的回调, true
表示登录成功; false
表示登录失败,比如中断登录等。
changeLogin('qq', (result) => {
if (result) {
alert('切换账号成功');
} else {
console.log('中断切换');
}
});
loginForce
强制登录。无论本地是否已登录,均重新拉起登录方式。若本地已经登录,则需先退出当前登录态。
只在新闻客户端中使用
logout
退出登录。没有参数。
logout();