生活物联网平台中支持使用内置账号体系,也支持集成您自己的账号体系。您可以基于用户账号体系实现自有App开发中的注册、登录、忘记密码、登出、修改用户信息等功能。同一个项目创建多个自有品牌App时,App的账号体系相通。

内置账号体系

内置账号体系为平台提供的服务和能力,客户端集成平台账号及用户SDK即可使用。账号及用户SDK支持唤起登录页面,包括账号注册、登录、登出、忘记密码、多语言切换、修改头像、修改昵称、注销账号等功能,并支持在此页面基础上修改UI风格。详细请参见Android账号及用户SDKiOS账号及用户SDK

说明 如果您的App需发行到海外,建议您在App中实现以下内容。
  • 邮箱注册:邮箱注册更符合海外用户使用习惯。
  • 多语言切换:当前平台支持多种语言,并持续添加中。
  • 注销账号:由于海外严格的合规要求(如GDPR),App中需要提供注销用户的功能,注销时需要删除用户的所有数据。

自有账号体系

当您拥有自己的账号体系,可以将您自己的账号体系和平台关联,实现设备绑定关系、设备分享、设备消息推送等功能。您自己账户体系中的用户信息不会保留在平台上,保障您的用户隐私信息。

自有账号体系对接基于Oauth2.0 API协议(代理用户访问的授权开放网络标准协议,详细请参见RFC定义参考文档),请您按照以下步骤配置和开发自有账号对接功能。

  1. 进入自有品牌App的用户账号配置页面。
  2. 选择自有账号体系,并单击设置
    配置自有账号参数
  3. 配置自有账号体系,并单击确认保存。
    其中访问/刷新URLGetuserinfoURL需厂商提供URL。
  4. 开发自有账号体系。

    根据以下流程图完成开发工作。

    流程图

    详细流程如下。

    1. 实现App登录,并从App认证服务中获取当前登录用户的AuthCode,并将AuthCode传递给SDK(使用SDK的方法请参见账号及用户SDK(Android)账号及用户SDK(iOS)中的“三方自有账号”内容)。
      说明 App向App认证服务(一般包含认证登录、颁发AuthCode、验证AuthCode、颁发Token、验证Token等)获取AuthCode,该部分您自行实现。一般实现中建议使用安全随机数生成随机字符串,并将申请的client_id(AppKey)与登录账号相关联,保证流程2中申请access_token时携带的AuthCode能且仅能使用一次。
    2. 生活物联网平台通过HTTP POST方式,向您的App认证服务中发送请求来获取token,请求中含有client_id(AppKey)AuthCodeclient_secret(AppSecret)
      说明 生活物联网生活平台账号互联的所有HTTP请求中,请求响应内容Content-Type需为application/json
      • AuthCode换取access_token请求

        此处为OAuth2.0标准token换取请求,以访问/刷新URL配置为https://test.net/api/users/oauth/token为例,示例如下。

        POST /api/users/oauth/token?grant_type=authorization_code&client_id=testxxx&client_secret=testxxxxx&code=test222224tD2fVtexxxxojFZL6&redirect_uri=none HTTP/1.1
        Host: test.net
        Content-Type: application/x-www-form-urlencoded
        字段说明 类型 描述
        grant_type String 授权类型,固定为字符串 authorization_code
        client_id String appKey
        client_secret String appSecret
        code String 第一步返回的authCode

        成功返回示例如下。

        HTTP/1.1 200 OK
        Content-Type: application/json;charset=UTF-8
        Cache-Control: no-store
        Pragma: no-cache
        
        {
           "result_code":"0",
           "access_token":"2YotnxxxxMWpAA",
           "token_type":"Bearer",
           "expires_in":3600,
           "openid":"cjtexxxx8test",
           "refresh_token":"tGzvxxxx2TlKWIA",
           "example_parameter":"example_value"
        }
        字段说明 类型 描述
        access_token String 授权令牌,Access_Token。
        expires_in String 该access token的有效期,单位为秒。
        refresh_token String 在授权自动续期步骤中,获取新的Access_Token时需要提供的参数。
        openid String 用户唯一标识
        result_code String
        • 0:成功
        • 100000:client_id或者client_secert无效
        • 100002:AuthCode换取AccessToken失败
        • 100007:无效的授权码
        • 110000:系统通用错误代码
        message String 响应结果描述
      • 刷新access_token请求
        POST /api/users/oauth/token?grant_type=refresh_token&client_id=testxx&client_secret=test2222&refresh_token=test222testaaaL6 HTTP/1.1
        Host: test.net
        Content-Type: application/x-www-form-urlencoded
        字段说明 类型 描述
        grant_type String 授权类型,固定为字符串 refresh_token
        client_id String appKey
        client_secret String appSecret
        refresh_token String 获取accessToken返回的refresh_token

        成功返回示例如下。

        HTTP/1.1 200 OK
        Content-Type: application/json;charset=UTF-8
        Cache-Control: no-store
        Pragma: no-cache
        
        {
          "result_code":"0",
          "access_token":"2YotnFxxxxsicMWpAA",
          "token_type":"Bearer",
          "expires_in":3600,
          "refresh_token":"tGzv3Jxxxx2TlKWIA",
          "example_parameter":"example_value"
        }
        字段说明 类型 描述
        access_token String 授权令牌,Access_Token。
        expires_in String 该access token的有效期,单位为秒。
        refresh_token String 在授权自动续期步骤中,获取新的Access_Token时需要提供的参数。
        result_code String
        • 0:成功
        • 100000:client_id或者client_secert无效
        • 100003:RefreshToken已经过期或失效
        • 110000:系统通用错误代码
        message String 响应结果描述
    3. 通过流程2中获取到的access_token,生活物联网平台向App用户服务OpenId获取用户信息。

      App用户服务即为App自有账号体系内自己的账号体系管理服务,一般包含基本的账户注册、账户信息管理(此处须实现一个HTTP请求,通过OAuth token验证鉴权获取用户基础信息)。

      URL示例为:https://thrid.com/sns/userinfo,请求方法为POST。

      请求示例如下。

      POST /api/users/oauth/userinfo?access_token=testaaaatest222a779537c6687c3 HTTP/1.1
      Host: testxx.net
      Content-Type: application/x-www-form-urlencoded
      字段说明 类型 描述
      access_token String 第二步获取的access token

      响应示例如下。

      HTTP/1.1 200 OK
      Content-Type: application/json;charset=UTF-8
      Cache-Control: no-store
      Pragma: no-cache
      
      {
         "result_code": "0",
         "message": "成功",
         "openid":" OPENID", 
         "nick_name": "NICKNAME",
         "avatar_url": "image.com/xxxx.png",
         "gender": "1"
      }
      字段说明 类型 描述
      result_code String
      • 0:成功
      • 100000:client_id或者client_secert无效
      • 100001:AccessToken 过期
      • 100002:AuthCode换取AccessToken失败
      • 100003:RefreshToken已经过期或失效
      • 100004:用户修改密码或者解除授权导致AccessToken失效
      • 100005:AccessToken非法
      • 100006:无效的OpenId
      • 100007:无效的授权码
      • 110000:系统通用错误代码
      openid String 用户唯一标识
      nick_name String 昵称
      avatar_url String 头像URL
      gender String 性别
      • 0:未知
      • 1: 男性
      • 2:女性