1.0.1 • Published 3 years ago

gh-qqnews-user v1.0.1

Weekly downloads
3
License
ISC
Repository
-
Last release
3 years ago

腾讯新闻增长技术团队的用户信息

背景介绍(Background)

version size

当前 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 登录,那么再次使用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();

ChangeLog

ChangeLog

1.0.1

3 years ago

1.0.0

3 years ago

0.0.5

4 years ago

0.0.3

4 years ago

0.0.4

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago