Giter Site home page Giter Site logo

wafer-client-sdk's Introduction

微信小程序客户端腾讯云增强 SDK

Build Status Coverage Status License

本 项目是 Wafer 的组成部分,为小程序客户端开发提供 SDK 支持会话服务和信道服务。

SDK 获取与安装

解决方案客户端 Demo 已经集成并使用最新版的 SDK,需要快速了解的可以从 Demo 开始。

如果需要单独开始,本 SDK 已经发布为 bower 模块,可以直接安装到小程序目录中。

npm install -g bower
bower install wafer-client-sdk

安装之后,就可以使用 require 引用 SDK 模块:

var qcloud = require('./bower_components/wafer-client-sdk/index.js');

会话服务

会话服务让小程序拥有会话管理能力。

登录

登录可以在小程序和服务器之间建立会话,服务器由此可以获取到用户的标识和信息。

var qcloud = require('./bower_components/qcloud-weapp-client-sdk/index.js');

// 设置登录地址
qcloud.setLoginUrl('https://199447.qcloud.la/login');
qcloud.login({
    success: function (userInfo) {
        console.log('登录成功', userInfo);
    },
    fail: function (err) {
        console.log('登录失败', err);
    }
});

本 SDK 需要配合云端 SDK 才能提供完整会话服务。通过 setLoginUrl 设置登录地址,云服务器在该地址上使用云端 SDK 处理登录请求。

setLoginUrl 方法设置登录地址之后会一直有效,因此你可以在微信小程序启动时设置。

登录成功后,可以获取到当前微信用户的基本信息。

请求

如果希望小程序的网络请求包含会话,登录之后使用 request 方法进行网络请求即可。

qcloud.request({
    url: 'http://199447.qcloud.la/user',
    success: function (response) {
        console.log(response);
    },
    fail: function (err) {
        console.log(err);
    }
});

如果调用 request 之前还没有登录,则请求不会带有会话。request 方法也支持 login 参数支持在请求之前自动登录。

// 使用 login 参数之前,需要设置登录地址
qcloud.setLoginUrl('https://199447.qcloud.la/login');
qcloud.request({
    login: true,
    url: 'http://199447.qcloud.la/user',
    success: function (response) {
        console.log(response);
    },
    fail: function (err) {
        console.log(err);
    }
});

关于会话服务详细技术说明,请参考 Wiki

信道服务

信道服务小程序支持利用腾讯云的信道资源使用 WebSocket 服务。

// 创建信道,需要给定后台服务地址
var tunnel = this.tunnel = new qcloud.Tunnel('https://199447.qcloud.la/tunnel');

// 监听信道内置消息,包括 connect/close/reconnecting/reconnect/error
tunnel.on('connect', () => console.log('WebSocket 信道已连接'));
tunnel.on('close', () => console.log('WebSocket 信道已断开'));
tunnel.on('reconnecting', () => console.log('WebSocket 信道正在重连...'));
tunnel.on('reconnect', () => console.log('WebSocket 信道重连成功'));
tunnel.on('error', error => console.error('信道发生错误:', error));

// 监听自定义消息(服务器进行推送)
tunnel.on('speak', speak => console.log('收到 speak 消息:', speak));

// 打开信道
tunnel.open();
// 发送消息
tunnel.emit('speak', { word: "hello", who: { nickName: "techird" }});
// 关闭信道
tunnel.close();

信道服务同样需要业务服务器配合云端 SDK 支持,构造信道实例的时候需要提供业务服务器提供的信道服务地址。通过监听信道消息以及自定义消息来通过信道实现业务。

关于信道使用的更完整实例,建议参考客户端 Demo 中的三木聊天室应用源码

关于信道服务详细技术说明,请参考 Wiki

API

setLoginUrl

设置会话服务登录地址。

语法

qcloud.setLoginUrl(loginUrl);

参数

参数         类型 说明
loginUrl string 会话服务登录地址

login

登录,建立微信小程序会话。

语法

qcloud.login(options);

参数

参数         类型 说明
options     PlainObject   会话服务登录地址
options.success () => void 登录成功的回调
options.fail (error) => void 登录失败的回调

request

进行带会话的请求。

语法

qcloud.request(options);

参数

参数         类型 说明
options     PlainObject   会话服务登录地址
options.login bool         是否自动登录以获取会话,默认为 false
options.url   string       必填,要请求的地址
options.data string、object 可选,提交到服务器的数据,会透传到 wx.request 方法中
options.header PlainObject 请求头设置,不允许设置 Referer
options.method string     请求的方法,默认为 GET
options.success (response) => void 登录成功的回调。
  • response.statusCode:请求返回的状态码
  • response.data:请求返回的数据
options.fail (error) => void 登录失败的回调
options.complete () => void 登录完成后回调,无论成功还是失败

Tunnel

表示一个信道。由于小程序的限制,同一时间只能有一个打开的信道。

constructor

语法
var tunnel = new Tunnel(tunnelUrl);

参数

参数         类型 说明
tunnelUrl   String   会话服务登录地址

on

监听信道上的事件。信道上事件包括系统事件和服务器推送消息。

语法
tunnel.on(type, listener);
参数
参数         类型 说明
type       string     监听的事件类型
listener     (message?: any) => void 监听器,具体类型的事件发生时调用监听器。如果是消息,则会有消息内容。
事件
事件 说明
connect 信道连接成功后回调
close 信道关闭后回调
reconnecting 信道发生重连时回调
reconnected 信道重连成功后回调
error 信道发生错误后回调
[message]   信道服务器推送过来的消息类型,如果消息类型和上面内置的时间类型冲突,需要在监听的时候在消息类型前加 @
*           监听所有事件和消息,监听器第一个参数接收到时间或消息类型 

open

打开信道,建立连接。由于小程序的限制,同一时间只能有一个打开的信道。

语法
tunnel.open();

emit

向信道推送消息。

语法
tunnel.emit(type, content);
参数
参数         类型 说明
type       string       要推送的消息的类型
content any 要推送的消息的内容

close

关闭信道

语法
tunnel.close();

LICENSE

MIT

wafer-client-sdk's People

Contributors

kchanlee avatar miusuncle avatar techird avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wafer-client-sdk's Issues

既然因为自己萌新才选择wafer,那么请官方索性针对萌新多解释一下检查用户身份的流程

首先我说明,我已用wafer部署成功,qcloud.login和qcloud.request都OK,request也确实带了skey请求头,与服务器数据库所存一致。

现在假设我有个记日记的小程序。

那么我的问题是:

#第一大问题,检查有效登录

刚打开小程序首页的时候,需要get该用户的所有日记。此时,直接get有可能是登录态失效的。那么,我应当如何判断登录态才是最优实践?
首先我试用了一下wx.checkSession,这个API的原理我不清楚,假如我把wx.checkSession理解为“检查用户登录有效性”,那么,我发现这个API有时候准,有时候不准,也就是说,有时候打开小程序,wx.checkSession为success,但是qcloud.request发送的skey是错的。而有时候skey又是正确的。那么wx.checkSession不是检查用户登录有效性的方法么?
如果不是用wx.checkSession,又该怎么判断?难道永远假设用户没登录,每次都设上
qcloud.request({
login: true,

吗?这会带来额外的连接开销。

或者,是先尝试get一次,不成功则qcloud.login?

#第二大问题,id是什么

https://github.com/tencentyun/wafer/wiki/会话服务

上面有句话是:

业务服务器收到会话管理服务器的响应后,将 id 和 skey 返回给微信小程序客户端
微信小程序客户端将 id 和 skey 存入 storage 中供后续请求使用

我的问题是,qcloud.login的res中并没有什么“id”,qcloud.request的请求头里面也没有“id”,既然wafer是高度封装的,那么为什么不涉及“id”呢?以及“id”是干什么用的?

登录报错:ERR_LOGIN_MISSING_SESSION

报错日志:

LoginError {type: "ERR_LOGIN_MISSING_SESSION", message: "登录请求没有包含会话响应,请确保服务器处理 `https://tzp7nlys.qcloud.la/weapp/login` 的时候正确使用了 SDK 输出登录结果"}
message
:
"登录请求没有包含会话响应,请确保服务器处理 `https://tzp7nlys.qcloud.la/weapp/login` 的时候正确使用了 SDK 输出登录结果"
type
:
"ERR_LOGIN_MISSING_SESSION"

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.