生活物聯網平臺支持使用HTTP/HTTPS協議的POST方法,調用第三方云提供的URL接口,實現數據的實時推送。但該推送方式時延和性能都較低,因此設備上報的數據我們推薦使用HTTP2的方式進行推送。當前HTTP/HTTPS的推送僅支持用戶數據(如用戶綁定設備、解綁設備等),該推送方式為租戶下全量數據的推送,暫不區分項目或產品。

前提條件

配置URL地址(若為國際站需配置對應域的云端URL地址),詳細參見設置用戶數據同步

接入教程

  • HTTP POST方法推送的數據體內容
    • message:消息內容
    • appKey:對應環境Appkey,測試環境或線上環境
    • msgCode:消息名稱(第二部分消息的英文名稱)
    • sign:生成的簽名字符串
  • 加簽和驗簽

    為了保證推送數據的完整性,需要對數據進行加簽,簽名生成規則如下。

    • 參與生成簽名的參數

      在請求參數列表中,除去sign參數外,其他需要使用到的參數皆是要參與簽名的參數。于我們而言,參與簽名的參數是appKeymessagemsgCode

    • 生成待簽名字符串
      string[] parameters={
            "appKey=xxx",
            "message=xxx",
            "msgCode=xxx"
         };
      							

      對數組里的每一個參數值按照字典順序排序,若遇到相同首字母,則看第二個字母,以此類推。排序完成后,再把所有數組值以 & 字符連接起來。

      例如:appKey=xxx&message=xxx&msgCode=xxx。這串字符串便是待簽名的字符串。

    • 使用MD5生成簽名

      在MD5簽名時,需要appSecret參與簽名。其中appSecret需要與appKey是匹配的。當得到待簽名字符串后,需要把私鑰直接拼接到待簽名字符串后面,形成新的字符串,然后利用MD5的簽名函數對這個新的字符串進行簽名運算,從而得到32位簽名結果字符串。

      例如,私鑰為291GSDFSK9023842KJSDJFSDS23849JS,則sign=MD5(appKey=xxx&message=xxx&msgCode=xxx291GSDFSK9023842KJSDJFSDS23849JS)

    • 校驗簽名

      當收到請求后,需要把appSecret直接拼接到待簽名字符串后面,形成新的字符串。利用MD5的簽名函數對這個新的字符串進行簽名運算,從而得到32位簽名結果字符串。

      通過驗證該結果字符串需要與請求消息中的參數sign的值是否相等,來判斷簽名是否驗證通過。

  • URL接口返回值

    如果第三方云的URL接口正確收到推送的消息,平臺期望收到其應答,應答的數據格式如下。

    {"code":200,"message":"success","data":"OK"}  //HTTP CODE為200
  • 重試

    如果URL接口未正確返回數據格式或HTTP CODE返回非200,那么平臺會采用退避策略重新推送該消息,最多推送16次。

    具體重試策略如下。

    第幾次重試 與上次重試的間隔時間 第幾次重試 與上次重試的間隔時間
    1 10 秒 9 7 分鐘
    2 30 秒 10 8 分鐘
    3 1 分鐘 11 9 分鐘
    4 2 分鐘 12 10 分鐘
    5 3 分鐘 13 20 分鐘
    6 4 分鐘 14 30 分鐘
    7 5 分鐘 15 1 小時
    8 6 分鐘 16 2 小時

    如果消息重試16次后仍然失敗,消息將不再推送。

    按照上述重試時間間隔計算,某條消息在一直推送失敗的前提下,將會在接下來的4小時46分鐘(非嚴格計算)之內進行16次重試,超過這個時間范圍消息將不再重試推送。

數據類型和字段

目前平臺默認HTTP/HTTPS方式推送設備綁定關系變更消息(thing_user_bind_post),消息名稱和消息字段類型如下所示。

  • 消息字段說明
    參數 子參數 類型 含義
    iotId String 設備的唯一id
    bind Boolean 設備綁定關系變更觸發的原因:true-發生綁定;false-發生解綁
    identityInfos JSON 用戶列表:此時設備存在的用戶綁定關系
    identityId String 用戶賬號id:C端用戶賬號
    scopeId String 資源隔離id:對應于正式環境與測試環境
    tenantId String 租戶id:B端用戶賬號
    owned Int 用戶與設備的擁有關系標記:0-分享者;1-擁有者
  • 消息示例
    {
        "bind":true,
        "identityInfos":[
            {
                "identityId":"5034xxxx0470862060259",
                "scopeId":"",
                "tenantId":"1D89Bxxxx3D3413E82999AD4861678FF",
                "owned":1
            }
        ],
        "iotId":"4MvN9xxxxbiImQCV2mcc0010033801"
    }