Weibo SDK 分析,基于 Weibo SDK 3.3.0 和微博 11.1.1。
记录
分享
TextMessage
初次
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Data-Keyed] (1/2) app { aid = "01A0tAyBhBRcxbuKyhgO3YHALNnaItFocWvdk3o9pNKtpBnf4."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (2/2) sdkVersion 003233000
https://open.weibo.com/weibosdk/request ?checkLink=https://mock.bus.nuomi1.com/weibo/2967526297/ &newVersion=3.3 &objId=D3F0EC56-E29F-4260-9C79-8E23597A183F
|
校验
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Data-Keyed] (1/2) app { aid = "01A0tAyBhBRcxbuKyhgO3YHALNnaItFocWvdk3o9pNKtpBnf4."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (2/2) sdkVersion 003233000
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?checkLink=https://open.weibo.com/weibosdk &checkStatus=1 &id=D3F0EC56-E29F-4260-9C79-8E23597A183F
|
二次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| [Data-Keyed] (1/4) transferObject { "__class" = WBSendMessageToWeiboRequest; message = { "__class" = WBMessageObject; text = "\U90a3\U4e48\Uff0c \U5e26\U7740\U8fd9\U4e9b\U95ee\U9898\Uff0c\U6211\U4eec\U6765\U5ba1\U89c6\U4e00\U4e0bBUS\U3002 \U53ef\U662f\Uff0c\U5373\U4f7f\U662f\U8fd9\U6837\Uff0cBUS\U7684\U51fa\U73b0\U4ecd\U7136\U4ee3\U8868\U4e86\U4e00\U5b9a\U7684\U610f\U4e49\U3002 BUS\U7684\U53d1\U751f\Uff0c\U5230\U5e95\U9700\U8981\U5982\U4f55\U505a\U5230\Uff0c\U4e0dBUS\U7684\U53d1\U751f\Uff0c\U53c8\U4f1a\U5982\U4f55\U4ea7\U751f\U3002 \U751f\U6d3b\U4e2d\Uff0c\U82e5BUS\U51fa\U73b0\U4e86\Uff0c\U6211\U4eec\U5c31\U4e0d\U5f97\U4e0d\U8003\U8651\U5b83\U51fa\U73b0\U4e86\U7684\U4e8b\U5b9e\U3002 \U7ecf\U8fc7\U4e0a\U8ff0\U8ba8\U8bba\Uff0c \U90a3\U4e48\Uff0c \U65e2\U7136\U5982\U4f55\Uff0c \U73b0\U5728\Uff0c\U89e3\U51b3BUS\U7684\U95ee\U9898\Uff0c\U662f\U975e\U5e38\U975e\U5e38\U91cd\U8981\U7684\U3002 \U6240\U4ee5\Uff0c \U6211\U4eec\U90fd\U77e5\U9053\Uff0c\U53ea\U8981\U6709\U610f\U4e49\Uff0c\U90a3\U4e48\U5c31\U5fc5\U987b\U614e\U91cd\U8003\U8651\U3002 \U8fd9\U79cd\U4e8b\U5b9e\U5bf9\U672c\U4eba\U6765\U8bf4\U610f\U4e49\U91cd\U5927\Uff0c\U76f8\U4fe1\U5bf9\U8fd9\U4e2a\U4e16\U754c\U4e5f\U662f\U6709\U4e00\U5b9a\U610f\U4e49\U7684\U3002 \U5eb7\U5fb7\U66fe\U7ecf\U63d0\U5230\U8fc7\Uff0c\U65e2\U7136\U6211\U5df2\U7ecf\U8e0f\U4e0a\U8fd9\U6761\U9053\U8def\Uff0c\U90a3\U4e48\Uff0c\U4efb\U4f55\U4e1c\U897f\U90fd\U4e0d\U5e94\U59a8\U788d\U6211\U6cbf\U7740\U8fd9\U6761\U8def\U8d70\U4e0b\U53bb\U3002\U8fd9\U4f3c\U4e4e\U89e3\U7b54\U4e86\U6211\U7684\U7591\U60d1\U3002"; }; requestID = "537EEDEA-2E2D-4BA4-950A-FFFB9681EC69"; }
[Data-Keyed] (2/4) userInfo { startTime = "2021-01-20 23:20:10:199"; }
[Data-Keyed] (3/4) app { aid = "01A0tAyBhBRcxbuKyhgO3YHALNnaItFocWvdk3o9pNKtpBnf4."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (4/4) sdkVersion 003233000
https://open.weibo.com/weibosdk/request ?lfid=com.nuomi1.bus.mock &luicode=10000360 &newVersion=3.3 &objId=537EEDEA-2E2D-4BA4-950A-FFFB9681EC69 &sdkversion=003233000 &urltype=link
|
取消
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [Data-Keyed] (1/3) transferObject { "__class" = WBSendMessageToWeiboResponse; requestID = "537EEDEA-2E2D-4BA4-950A-FFFB9681EC69"; responseID = "4F5017C9-477C-4DDE-9228-95010FA338B6"; statusCode = "-1"; }
[Data-Keyed] (2/3) app { aid = "01A0tAyBhBRcxbuKyhgO3YHALNnaItFocWvdk3o9pNKtpBnf4."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; }
[Data-String] (3/3) sdkVersion 2.5
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?id=4F5017C9-477C-4DDE-9228-95010FA338B6 &sdkversion=2.5
|
成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [Data-Keyed] (1/4) transferObject { "__class" = WBSendMessageToWeiboResponse; requestID = "03FC11CF-F00C-473F-932D-5184D8251938"; responseID = "6A1737DC-DF9F-47B9-8285-C8D971AC39C4"; statusCode = 0; }
[Data-Keyed] (2/4) userInfo { startTime = "2021-01-20 23:20:20:616"; }
[Data-Keyed] (3/4) app { aid = "01A0tAyBhBRcxbuKyhgO3YHALNnaItFocWvdk3o9pNKtpBnf4."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; }
[Data-String] (4/4) sdkVersion 2.5
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?id=6A1737DC-DF9F-47B9-8285-C8D971AC39C4 &sdkversion=2.5
|
ImageMessage
初次
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Data-Keyed] (1/2) app { aid = "01A1AKMJk8iRqsjcMCEwxDO7FmB1xuiGtSH8BHQNXR08ez_dQ."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (2/2) sdkVersion 003233000
https://open.weibo.com/weibosdk/request ?checkLink=https://mock.bus.nuomi1.com/weibo/2967526297/ &newVersion=3.3 &objId=207A4681-43BA-4B2C-9CC8-F11C4AE80E3C
|
校验
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Data-Keyed] (1/2) app { aid = "01A1AKMJk8iRqsjcMCEwxDO7FmB1xuiGtSH8BHQNXR08ez_dQ."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (2/2) sdkVersion 003233000
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?checkLink=https://open.weibo.com/weibosdk &checkStatus=1 &id=207A4681-43BA-4B2C-9CC8-F11C4AE80E3C
|
二次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| [Data-Keyed] (1/4) transferObject { "__class" = WBSendMessageToWeiboRequest; message = { "__class" = WBMessageObject; imageObject = { imageData = {length = 7366205, bytes = 0xffd8ffe0 00104a46 49460001 01000048 ... 007eef97 697fffd9 }; }; }; requestID = "0F5CBFC1-3EF3-4AFB-8793-44BA3FC74892"; }
[Data-Keyed] (2/4) userInfo { startTime = "2021-01-20 23:25:29:581"; }
[Data-Keyed] (3/4) app { aid = "01A1AKMJk8iRqsjcMCEwxDO7FmB1xuiGtSH8BHQNXR08ez_dQ."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (4/4) sdkVersion 003233000
https://open.weibo.com/weibosdk/request ?lfid=com.nuomi1.bus.mock &luicode=10000360 &newVersion=3.3 &objId=0F5CBFC1-3EF3-4AFB-8793-44BA3FC74892 &sdkversion=003233000 &urltype=link
|
取消
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [Data-Keyed] (1/3) transferObject { "__class" = WBSendMessageToWeiboResponse; requestID = "0F5CBFC1-3EF3-4AFB-8793-44BA3FC74892"; responseID = "8EF9CF3E-4DCE-490F-9B78-06FFCA4C7AD9"; statusCode = "-1"; }
[Data-Keyed] (2/3) app { aid = "01A1AKMJk8iRqsjcMCEwxDO7FmB1xuiGtSH8BHQNXR08ez_dQ."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; }
[Data-String] (3/3) sdkVersion 2.5
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?id=8EF9CF3E-4DCE-490F-9B78-06FFCA4C7AD9 &sdkversion=2.5
|
成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [Data-Keyed] (1/4) transferObject { "__class" = WBSendMessageToWeiboResponse; requestID = "C4E6FB1B-47D1-4E38-A029-2611AB7452E2"; responseID = "A0084B4C-4660-4C2A-B58A-8982ACF390BE"; statusCode = 0; }
[Data-Keyed] (2/4) userInfo { startTime = "2021-01-20 23:25:43:438"; }
[Data-Keyed] (3/4) app { aid = "01A1AKMJk8iRqsjcMCEwxDO7FmB1xuiGtSH8BHQNXR08ez_dQ."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; }
[Data-String] (4/4) sdkVersion 2.5
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?id=A0084B4C-4660-4C2A-B58A-8982ACF390BE &sdkversion=2.5
|
WebPageMessage
初次
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Data-Keyed] (1/2) app { aid = "01AxlLuRJfAXDK4PJd5fEj81C7RYHTMgJT-_Ucr45PZ-hsW5A."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (2/2) sdkVersion 003233000
https://open.weibo.com/weibosdk/request ?checkLink=https://mock.bus.nuomi1.com/weibo/2967526297/ &newVersion=3.3 &objId=E09389AA-C38A-4972-8E9F-7AA997179319
|
校验
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Data-Keyed] (1/2) app { aid = "01AxlLuRJfAXDK4PJd5fEj81C7RYHTMgJT-_Ucr45PZ-hsW5A."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (2/2) sdkVersion 003233000
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?checkLink=https://open.weibo.com/weibosdk &checkStatus=1 &id=E09389AA-C38A-4972-8E9F-7AA997179319
|
二次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| [Data-Keyed] (1/4) transferObject { "__class" = WBSendMessageToWeiboRequest; message = { "__class" = WBMessageObject; mediaObject = { "__class" = WBWebpageObject; description = Apple; objectID = "36FDD77B-9DCE-4749-B21C-816912DD1FAA"; thumbnailData = {length = 4827, bytes = 0xffd8ffe0 00104a46 49460001 01000048 ... 7aa27fbd 401fffd9 }; title = iPhone; webpageUrl = "https://www.apple.com.cn/iphone/"; }; }; requestID = "BDCC97E7-D95B-4729-BA96-F69AA1C9E5D7"; }
[Data-Keyed] (2/4) userInfo { startTime = "2021-01-20 23:29:23:201"; }
[Data-Keyed] (3/4) app { aid = "01AxlLuRJfAXDK4PJd5fEj81C7RYHTMgJT-_Ucr45PZ-hsW5A."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (4/4) sdkVersion 003233000
https://open.weibo.com/weibosdk/request ?lfid=com.nuomi1.bus.mock &luicode=10000360 &newVersion=3.3 &objId=BDCC97E7-D95B-4729-BA96-F69AA1C9E5D7 &sdkversion=003233000 &urltype=link
|
取消
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [Data-Keyed] (1/3) transferObject { "__class" = WBSendMessageToWeiboResponse; requestID = "BDCC97E7-D95B-4729-BA96-F69AA1C9E5D7"; responseID = "B74EA5B6-598C-4D37-913D-6E4AE84AD444"; statusCode = "-1"; }
[Data-Keyed] (2/3) app { aid = "01AxlLuRJfAXDK4PJd5fEj81C7RYHTMgJT-_Ucr45PZ-hsW5A."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; }
[Data-String] (3/3) sdkVersion 2.5
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?id=B74EA5B6-598C-4D37-913D-6E4AE84AD444 &sdkversion=2.5
|
成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| [Data-Keyed] (1/4) transferObject { "__class" = WBSendMessageToWeiboResponse; requestID = "85BF2074-9D78-4CE6-9B30-8EDB2ABE52BE"; responseID = "14493865-3729-4794-876E-CC8CFC9E5866"; statusCode = 0; }
[Data-Keyed] (2/4) userInfo { startTime = "2021-01-20 23:29:36:128"; }
[Data-Keyed] (3/4) app { aid = "01AxlLuRJfAXDK4PJd5fEj81C7RYHTMgJT-_Ucr45PZ-hsW5A."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; }
[Data-String] (4/4) sdkVersion 2.5
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?id=14493865-3729-4794-876E-CC8CFC9E5866 &sdkversion=2.5
|
登录
初次
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Data-Keyed] (1/2) app { aid = "01A23X7F7pElp3M5h4BfDFNwhTcJZ2K90Zbum0_Nw18NhhSMU."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (2/2) sdkVersion 003233000
https://open.weibo.com/weibosdk/request ?checkLink=https://mock.bus.nuomi1.com/weibo/2967526297/ &newVersion=3.3 &objId=3A90A4A6-4233-49CB-B539-E7BF2190DAE6
|
校验
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Data-Keyed] (1/2) app { aid = "01A23X7F7pElp3M5h4BfDFNwhTcJZ2K90Zbum0_Nw18NhhSMU."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (2/2) sdkVersion 003233000
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?checkLink=https://open.weibo.com/weibosdk &checkStatus=1 &id=3A90A4A6-4233-49CB-B539-E7BF2190DAE6
|
二次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| [Data-Keyed] (1/4) transferObject { "__class" = WBAuthorizeRequest; redirectURI = "https://api.weibo.com/oauth2/default.html"; requestID = "01594E66-FED2-4CC8-A1F8-189193787357"; }
[Data-Keyed] (2/4) userInfo { startTime = "2021-01-20 23:30:24:220"; }
[Data-Keyed] (3/4) app { aid = "01A23X7F7pElp3M5h4BfDFNwhTcJZ2K90Zbum0_Nw18NhhSMU."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; universalLink = "https://mock.bus.nuomi1.com/weibo/2967526297/"; }
[Data-String] (4/4) sdkVersion 003233000
https://open.weibo.com/weibosdk/request ?lfid=com.nuomi1.bus.mock &luicode=10000360 &newVersion=3.3 &objId=01594E66-FED2-4CC8-A1F8-189193787357 &sdkversion=003233000 &urltype=link
|
取消
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| [Data-Keyed] (1/4) transferObject { "__class" = WBAuthorizeResponse; requestID = "01594E66-FED2-4CC8-A1F8-189193787357"; responseID = "1391E37A-A9D4-4361-9507-83EEABBF69F1"; statusCode = "-1"; }
[Data-Keyed] (2/4) userInfo { "sso_error_user_cancelled" = t; "user_cancelled" = t; }
[Data-Keyed] (3/4) app { aid = "01A23X7F7pElp3M5h4BfDFNwhTcJZ2K90Zbum0_Nw18NhhSMU."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; }
[Data-String] (4/4) sdkVersion 2.5
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?id=1391E37A-A9D4-4361-9507-83EEABBF69F1 &sdkversion=2.5
|
成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| [Data-Keyed] (1/4) transferObject { "__class" = WBAuthorizeResponse; accessToken = "2.00TGGCmB4J8pOD2c226b4bd9Wrw4bC"; expirationDate = "2026-01-19 15:30:23 +0000"; refreshToken = "2.00TGGCmB4J8pOD14f73f1e16pzyh4D"; requestID = "B6026D5A-6BED-4AD2-9C6F-9FF7E98FC47F"; responseID = "93A6E97F-A002-42E5-A550-F3649D630CA6"; statusCode = 0; userID = 1625897081; }
[Data-Keyed] (2/4) userInfo { "access_token" = "2.00TGGCmB4J8pOD2c226b4bd9Wrw4bC"; app = { logo = "http://timg.sjs.sinajs.cn/miniblog2style/images/developer/default_50.gif"; name = "\U672a\U901a\U8fc7\U5ba1\U6838\U5e94\U7528"; }; "expires_in" = 157679999; isRealName = true; "refresh_token" = "2.00TGGCmB4J8pOD14f73f1e16pzyh4D"; "remind_in" = 157679999; scope = ""; uid = 1625897081; }
[Data-Keyed] (3/4) app { aid = "01A23X7F7pElp3M5h4BfDFNwhTcJZ2K90Zbum0_Nw18NhhSMU."; appKey = 2967526297; bundleID = "com.nuomi1.bus.mock"; }
[Data-String] (4/4) sdkVersion 2.5
https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response ?id=93A6E97F-A002-42E5-A550-F3649D630CA6 &sdkversion=2.5
|
分析
分享
基础信息
appID
为 wb2967526297
appName
为 BusMock
appNumber
为 2967526297
bundleID
为 com.nuomi1.bus.mock
universalLink
为 https://mock.bus.nuomi1.com/weibo/2967526297/
weiboUniversalLink
为 https://open.weibo.com/weibosdk/
redirectLink
为 https://api.weibo.com/oauth2/default.html
公共部分
从记录到的 URL 和剪切板,我们可以看到初次和校验的步骤并不是必须的,因为返回内容没有 signToken
,仅为检测是否支持 Universal Link。
所以二次的步骤才是真正有用的,其中 Universal Link 除了 objId
其余都一样,主要的区别在剪切板。
Universal Link 的公共部分:
lfid
为 ${bundleID}
luicode
为 10000360
,不明
newVersion
为 3.3
,表示 SDK 版本
objId
为 ${UUID}
,表示请求 ID
sdkversion
为 003233000
,表示 SDK 版本
urltype
为 link
,表示 Universal Link
剪切板的公共部分:
transferObject
为主要内容
userInfo
为附加内容
app
为基础信息
sdkVersion
为 003233000
,表示 SDK 版本
transferObject
我们可以看到:
__class
为 WBSendMessageToWeiboRequest
,表示分享请求
message
为具体内容,其中 __class
为 WBMessageObject
,剩余内容因分享内容而变,将在下文进行说明
requestID
为 ${UUID}
,表示请求 ID,与 Universal Link 中的 objId
相对应
userInfo
我们可以看到:
startTime
为 ${Date}
,实际上不需要设置
app
我们可以看到:
aid
表示 _用于广告的与设备信息相关的标识符_,保存在 UserDefaults
,清除后重新获取会得到新值,实际上不需要设置
appKey
为 ${appNumber}
bundleID
为 ${bundleID}
universalLink
为 ${universalLink}
回调
分享成功或失败时,调用 https://mock.bus.nuomi1.com/weibo/2967526297/weibosdk/response
返回 App,URL 匹配 ${universalLink}/weibosdk/response
,数据从剪切板 pasteboardType = transferObject
获取。
我们可以看到:
__class
为 WBSendMessageToWeiboResponse
,表示分享响应
requestID
为 ${UUID}
,与 request 中的相对应
responseID
为 ${UUID}
,表示响应 ID
statusCode
为状态码,0
表示成功,-1
表示用户取消
userInfo
/ app
/ sdkVersion
与请求时一样,但用户取消时没有 userInfo
。
TextMessage
修改 transferObject.message.text
值,我们可以看到:
text
为 ${text}
ImageMessage
修改 transferObject.message.imageObject
字典,我们可以看到:
imageData
为 ${image}
WebPageMessage
修改 transferObject.message.mediaObject
字典,我们可以看到:
__class
为 WBWebpageObject
description
为 ${description}
objectID
为 ${UUID}
,与 requestID
没有关系
thumbnailData
为 ${image}
title
为 ${title}
webpageUrl
为 ${link}
登录
请求
Universal Link 部分与分享相同,剪切板部分与分享大致相同,区别在于 transferObject
。
我们可以看到:
__class
为 WBAuthorizeRequest
表示登录请求
redirectURI
为 ${redirectLink}
requestID
为 ${UUID}
,表示请求 ID
成功
与分享不同,登录除了返回的 transferObject
不同,userInfo
也多了额外的数据。
transferObject
我们可以看到:
__class
为 WBAuthorizeResponse
,表示登录响应
accessToken
为登录 token
expirationDate
为过期时间
refreshToken
为刷新 token
requestID
为请求 ID
responseID
为响应 ID
statusCode
为状态码
userID
为用户 ID
userInfo
我们可以看到:
access_token
为登录 token
app.logl
为 App logo 链接
app.name
为 App 名称
expires_in
为过期时间间隔
isRealName
可能为是否实名状态
refresh_token
为刷新 token
remind_in
为刷新时间间隔
scope
为权限范围
uid
为用户 ID
可以看到 transferObject
中的信息在 userInfo
都有,但是名称不一样,而且 expirationDate
是计算得出。
取消
数据都在 userInfo
,而 transferObject
相同。
我们可以看到:
sso_error_user_cancelled
为登录时用户取消
user_cancelled
为用户取消
总结
本文通过记录和分析 Weibo SDK 的行为,厘清了微博分享和登录的流程。传递数据主要靠剪切板,分享和登录的请求或响应的 Universal Link 都是一致的。
比较奇怪的地方有两处,一是分享和登录都不需要 signToken
校验,仍然会走一次校验流程;二是 aid
设备标识符在清空 UserDefaults
后会得到新值,一般的标识符应该是尽量不变以达到追踪的效果。
完整代码实现请参考来源。
参考
- NBus - WeiboHandler