二维码授权登录

更新时间:2024-06-26 05:49:19下载pdf

二维码授权登录功能适用于 App 扫码授权另一台设备登录相同账号。设备可以是中控设备、TV、平板设备等。

流程说明

以下流程 中控设备 的 App,需要添加白名单才能使用,否则会报错。例如,如果您使用 智能生活 App 来扫描后台创建的 SDK 的二维码那么会报错,Session 失效。

二维码授权登录

图中标注的关键步骤解释:

图序号 步骤目的 说明 接口
获取 Token 设备请求接口获取授权流程使用的 Token getQRCodeToken
生成二维码 将获取到的 Token,使用特定格式生成二维码。
  • 格式:tuyaSmart--qrLogin?token=xxxxxxx
  • 示例:tuyaSmart--qrLogin?token=AZc72de000-ec00-4000-9e51-b610fc300000
  • 使用:生成二维码后,将上面字符串生成二维码展示在设备的屏幕中。
    二维码授权登录
-
获取登录状态 向服务端轮询获取是否授权成功,如果授权成功后将返回用户信息,跳转进入应用主页,进入后续操作。注意: 轮询间隔时间不能低于2s/次。 QRCodeLogin
扫描二维码 App 扫描设备上的二维码,将二维码中 Token 解析出来,进行授权操作。 -
授权登录 将解析出的二维码发送到云端,完成授权动作。 QRcodeAuth

用户获取 Token

void getQRCodeToken(String countryCode, IGetQRCodeTokenCallback callback);

参数说明

参数 说明
countryCode 国家或地区的区号,例如 86
callback 回调

示例代码

ThingHomeSdk.getUserInstance().getQRCodeToken("86", new IGetQRCodeTokenCallback() {
    @Override
    public void onSuccess(String token) {

    }

    @Override
    public void onError(String code, String error) {

    }
});

查询登录状态

void QRCodeLogin(String countryCode, String token, ILoginCallback callback);

参数说明

参数 说明
countryCode 国家或地区的区号,例如 86
token 登录的 token
callback 回调

示例代码

ThingHomeSdk.getUserInstance().QRCodeLogin("86", "xxxx", new ILoginCallback() {
    @Override
    public void onSuccess(User user) {
        if (user != null && !TextUtils.isEmpty(user.getSid())){
            ThingHomeSdk.getUserInstance().loginSuccess(user);
            //获取 homeId
            Object homeId = user.getExtras().get("homeId");

            gotoHomePage();
        }
    }

    @Override
    public void onError(String code, String error) {

    }
});

二维码授权

该接口适用于中控设备。当 App 扫描中控设备上的二维码时,可授权登录。

接口说明

void QRcodeAuth(String countryCode, long homeId, String token, IBooleanCallback callback);

参数说明

参数 说明
countryCode 国家或地区的区号,例如 86
homeId 家庭 ID,请参考 家庭管理 相关章节获取
token 登录的 token
callback 回调

示例代码

ThingHomeSdk.getUserInstance().QRcodeAuth("86", mHomeId, getActivityToken(), new IBooleanCallback() {
    @Override
    public void onSuccess() {

    }

    @Override
    public void onError(String code, String error) {

    }
});