QQ SDK 分析,基于 QQ SDK 3.5.1 和 QQ 8.5.0。
记录
分享
TextMessage
初次
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=2 &file_data=6YKj5LmI77yMIOW4puedgOi/meS6m+mXrumimO+8jOaIkeS7rOadpeWuoeinhuS4gOS4i0JVU+OAgiDlj6/mmK/vvIzljbPkvb/mmK/ov5nmoLfvvIxCVVPnmoTlh7rnjrDku43nhLbku6PooajkuobkuIDlrprnmoTmhI/kuYnjgIIgQlVT55qE5Y+R55Sf77yM5Yiw5bqV6ZyA6KaB5aaC5L2V5YGa5Yiw77yM5LiNQlVT55qE5Y+R55Sf77yM5Y+I5Lya5aaC5L2V5Lqn55Sf44CCIOeUn+a0u+S4re+8jOiLpUJVU+WHuueOsOS6hu+8jOaIkeS7rOWwseS4jeW+l+S4jeiAg+iZkeWug+WHuueOsOS6hueahOS6i+WunuOAgiDnu4/ov4fkuIrov7DorqjorrrvvIwg6YKj5LmI77yMIOaXoueEtuWmguS9le+8jCDnjrDlnKjvvIzop6PlhrNCVVPnmoTpl67popjvvIzmmK/pnZ7luLjpnZ7luLjph43opoHnmoTjgIIg5omA5Lul77yMIOaIkeS7rOmDveefpemBk++8jOWPquimgeacieaEj+S5ie+8jOmCo+S5iOWwseW/hemhu+aFjumHjeiAg+iZkeOAgiDov5nnp43kuovlrp7lr7nmnKzkurrmnaXor7TmhI/kuYnph43lpKfvvIznm7jkv6Hlr7nov5nkuKrkuJbnlYzkuZ/mmK/mnInkuIDlrprmhI/kuYnnmoTjgIIg5bq35b635pu+57uP5o+Q5Yiw6L+H77yM5pei54S25oiR5bey57uP6LiP5LiK6L+Z5p2h6YGT6Lev77yM6YKj5LmI77yM5Lu75L2V5Lic6KW/6YO95LiN5bqU5aao56KN5oiR5rK/552A6L+Z5p2h6Lev6LWw5LiL5Y6744CC6L+Z5Ly85LmO6Kej562U5LqG5oiR55qE55aR5oOR44CC &file_type=text &generalpastboard=1 &sdkv=3.5.1 &shareType=0 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &version=1
|
校验
1 2 3
| https://mock.bus.nuomi1.com/qq_conn/1110603370/com.nuomi1.bus.mock/mqqsignapp ?appsign_extrainfo=ewogICJhcHBzaWduX3JlZGlyZWN0X3Bhc3RlYm9hcmQiIDogIiIsCiAgImFwcHNpZ25fcmVkaXJlY3QiIDogIm1xcWFwaTpcL1wvc2hhcmVcL3RvX2ZyaT9hcHBzaWduX3R4aWQ9UVE0MjMyNzY2QSZidW5kbGVpZD1ZMjl0TG01MWIyMXBNUzVpZFhNdWJXOWphdz09JmNhbGxiYWNrX25hbWU9UVE0MjMyNzY2QSZjYWxsYmFja190eXBlPXNjaGVtZSZjZmxhZz0yJmZpbGVfZGF0YT02WUtqNUxtSTc3eU1JT1c0cHVlZGdPaVwvbWVTNm0rbVhydW1pbU8rOGpPYUlrZVM3ck9hZHBlV3VvZWluaHVTNGdPUzRpMEpWVStPQWdpRGxqNlwvbW1LXC92dkl6bGpiUGt2YlwvbW1LXC9vdjVubW9MZnZ2SXhDVlZQbm1vVGxoN3JuanJEa3U0M25oTGJrdTZQb29hamt1b2JrdUlEbHJwcm5tb1RtaElcL2t1WW5qZ0lJZ1FsVlQ1NXFFNVkrUjU1U2Y3N3lNNVlpdzVicVY2WnlBNkthQjVhYUM1TDJWNVlHYTVZaXc3N3lNNUxpTlFsVlQ1NXFFNVkrUjU1U2Y3N3lNNVkrSTVMeWE1YWFDNUwyVjVMcW41NVNmNDRDQ0lPZVVuK2EwdStTNHJlKzhqT2lMcFVKVlUrV0h1dWVPc09TNmh1KzhqT2FJa2VTN3JPV3dzZVM0amVXK2wrUzRqZWlBZytpWmtlV3VnK1dIdXVlT3NPUzZodWVhaE9TNmkrV3VudU9BZ2lEbnU0XC9vdjRma3VJcm92N0RvcnFqb3JycnZ2SXdnNllLajVMbUk3N3lNSU9hWG91ZUV0dVdtZ3VTOWxlKzhqQ0RuanJEbG5LanZ2SXpvcDZQbGhyTkNWVlBubW9UcGw2N3BvcGp2dkl6bW1LXC9wblo3bHVManBuWjdsdUxqcGg0M29wb0hubW9UamdJSWc1b21BNUx1bDc3eU1JT2FJa2VTN3JPbUR2ZWVmcGVtQmsrKzhqT1dQcXVpbWdlYWNpZWFFaitTNWllKzhqT21DbytTNWlPV3dzZVdcL2hlbWh1K2FGanVtSGplaUFnK2laa2VPQWdpRG92NW5ucDQza3VvdmxycDdscjdubW5Lemt1cnJtbmFYb3I3VG1oSVwva3VZbnBoNDNscEtmdnZJem5tN2prdjZIbHI3bm92NW5rdUtya3VKYm5sWXprdVpcL21tS1wvbW5Jbmt1SURscnBybWhJXC9rdVlubm1vVGpnSUlnNWJxMzViNjM1cHUrNTd1UDVvK1E1WWl3NkwrSDc3eU01cGVpNTRTMjVvaVI1YmV5NTd1UDZMaVA1TGlLNkwrWjVwMmg2WUdUNkxldjc3eU02WUtqNUxtSTc3eU01THU3NUwyVjVMaWM2S1dcLzZZTzk1TGlONWJxVTVhYW81NktONW9pUjVyS1wvNTUyQTZMK1o1cDJoNkxldjZMV3c1TGlMNVk2NzQ0Q0M2TCtaNUx5ODVMbU82S2VqNTYyVTVMcUc1b2lSNTVxRTU1YVI1b09SNDRDQyZmaWxlX3R5cGU9dGV4dCZnZW5lcmFscGFzdGJvYXJkPTEmc2Rrdj0zLjUuMSZzaGFyZVR5cGU9MCZzcmNfdHlwZT1hcHAmdGhpcmRBcHBEaXNwbGF5TmFtZT1RblZ6VFc5amF3PT0mdmVyc2lvbj0xIiwKICAiYXBwc2lnbl9yZXRjb2RlIiA6ICIyNTEwNSIsCiAgImFwcHNpZ25fdG9rZW4iIDogIjZjNzg0MjMyNzY2YTI4ODEyMmRmNWZlZThmMTZmYzM4IiwKICAiYXBwc2lnbl9idW5kbGVudWxsIiA6ICIyIgp9 &generalpastboard=1
|
二次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_token=6c784232766a288122df5fee8f16fc38 &appsign_txid=QQ4232766A &appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=2 &file_data=6YKj5LmI77yMIOW4puedgOi/meS6m+mXrumimO+8jOaIkeS7rOadpeWuoeinhuS4gOS4i0JVU+OAgiDlj6/mmK/vvIzljbPkvb/mmK/ov5nmoLfvvIxCVVPnmoTlh7rnjrDku43nhLbku6PooajkuobkuIDlrprnmoTmhI/kuYnjgIIgQlVT55qE5Y+R55Sf77yM5Yiw5bqV6ZyA6KaB5aaC5L2V5YGa5Yiw77yM5LiNQlVT55qE5Y+R55Sf77yM5Y+I5Lya5aaC5L2V5Lqn55Sf44CCIOeUn+a0u+S4re+8jOiLpUJVU+WHuueOsOS6hu+8jOaIkeS7rOWwseS4jeW+l+S4jeiAg+iZkeWug+WHuueOsOS6hueahOS6i+WunuOAgiDnu4/ov4fkuIrov7DorqjorrrvvIwg6YKj5LmI77yMIOaXoueEtuWmguS9le+8jCDnjrDlnKjvvIzop6PlhrNCVVPnmoTpl67popjvvIzmmK/pnZ7luLjpnZ7luLjph43opoHnmoTjgIIg5omA5Lul77yMIOaIkeS7rOmDveefpemBk++8jOWPquimgeacieaEj+S5ie+8jOmCo+S5iOWwseW/hemhu+aFjumHjeiAg+iZkeOAgiDov5nnp43kuovlrp7lr7nmnKzkurrmnaXor7TmhI/kuYnph43lpKfvvIznm7jkv6Hlr7nov5nkuKrkuJbnlYzkuZ/mmK/mnInkuIDlrprmhI/kuYnnmoTjgIIg5bq35b635pu+57uP5o+Q5Yiw6L+H77yM5pei54S25oiR5bey57uP6LiP5LiK6L+Z5p2h6YGT6Lev77yM6YKj5LmI77yM5Lu75L2V5Lic6KW/6YO95LiN5bqU5aao56KN5oiR5rK/552A6L+Z5p2h6Lev6LWw5LiL5Y6744CC6L+Z5Ly85LmO6Kej562U5LqG5oiR55qE55aR5oOR44CC &file_type=text &generalpastboard=1 &openredirect=1 &sdkv=3.5.1 &shareType=0 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &version=1
|
三次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_token=6c784232766a288122df5fee8f16fc38 &appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=2 &file_data=6YKj5LmI77yMIOW4puedgOi/meS6m+mXrumimO+8jOaIkeS7rOadpeWuoeinhuS4gOS4i0JVU+OAgiDlj6/mmK/vvIzljbPkvb/mmK/ov5nmoLfvvIxCVVPnmoTlh7rnjrDku43nhLbku6PooajkuobkuIDlrprnmoTmhI/kuYnjgIIgQlVT55qE5Y+R55Sf77yM5Yiw5bqV6ZyA6KaB5aaC5L2V5YGa5Yiw77yM5LiNQlVT55qE5Y+R55Sf77yM5Y+I5Lya5aaC5L2V5Lqn55Sf44CCIOeUn+a0u+S4re+8jOiLpUJVU+WHuueOsOS6hu+8jOaIkeS7rOWwseS4jeW+l+S4jeiAg+iZkeWug+WHuueOsOS6hueahOS6i+WunuOAgiDnu4/ov4fkuIrov7DorqjorrrvvIwg6YKj5LmI77yMIOaXoueEtuWmguS9le+8jCDnjrDlnKjvvIzop6PlhrNCVVPnmoTpl67popjvvIzmmK/pnZ7luLjpnZ7luLjph43opoHnmoTjgIIg5omA5Lul77yMIOaIkeS7rOmDveefpemBk++8jOWPquimgeacieaEj+S5ie+8jOmCo+S5iOWwseW/hemhu+aFjumHjeiAg+iZkeOAgiDov5nnp43kuovlrp7lr7nmnKzkurrmnaXor7TmhI/kuYnph43lpKfvvIznm7jkv6Hlr7nov5nkuKrkuJbnlYzkuZ/mmK/mnInkuIDlrprmhI/kuYnnmoTjgIIg5bq35b635pu+57uP5o+Q5Yiw6L+H77yM5pei54S25oiR5bey57uP6LiP5LiK6L+Z5p2h6YGT6Lev77yM6YKj5LmI77yM5Lu75L2V5Lic6KW/6YO95LiN5bqU5aao56KN5oiR5rK/552A6L+Z5p2h6Lev6LWw5LiL5Y6744CC6L+Z5Ly85LmO6Kej562U5LqG5oiR55qE55aR5oOR44CC &file_type=text &generalpastboard=1 &sdkv=3.5.1 &shareType=0 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &version=1
|
成功
1 2
| https://mock.bus.nuomi1.com/qq_conn/1110603370/com.nuomi1.bus.mock ?sdkactioninfo=ewogICJzZGtfYWN0aW9uX3F1ZXJ5IiA6ICJhcHBzaWduX2J1bmRsZW51bGw9MiZzb3VyY2U9cXEmc291cmNlX3NjaGVtZT1tcXFhcGkmZXJyb3I9MCZ2ZXJzaW9uPTEiLAogICJzZGtfYWN0aW9uX3BhdGgiIDogIiIsCiAgInNka19hY3Rpb25fc2hlbWUiIDogInRlbmNlbnQxMTEwNjAzMzcwIiwKICAic2RrX2FjdGlvbl9ob3N0IiA6ICJyZXNwb25zZV9mcm9tX3FxIgp9
|
1 2 3 4 5 6 7
| tencent1110603370://response_from_qq ?appsign_bundlenull=2 &appsign_token=6c784232766a288122df5fee8f16fc38 &error=0 &source=qq &source_scheme=mqqapi &version=1
|
取消
1 2
| https://mock.bus.nuomi1.com/qq_conn/1110603370/com.nuomi1.bus.mock ?sdkactioninfo=ewogICJzZGtfYWN0aW9uX3F1ZXJ5IiA6ICJlcnJvcl9kZXNjcmlwdGlvbj1kR2hsSUhWelpYSWdaMmwyWlNCMWNDQjBhR1VnWTNWeWNtVnVkQ0J2Y0dWeVlYUnBiMjQ9JmFwcHNpZ25fYnVuZGxlbnVsbD0yJnNvdXJjZT1xcSZzb3VyY2Vfc2NoZW1lPW1xcWFwaSZlcnJvcj0tNCZ2ZXJzaW9uPTEiLAogICJzZGtfYWN0aW9uX3BhdGgiIDogIiIsCiAgInNka19hY3Rpb25fc2hlbWUiIDogInRlbmNlbnQxMTEwNjAzMzcwIiwKICAic2RrX2FjdGlvbl9ob3N0IiA6ICJyZXNwb25zZV9mcm9tX3FxIgp9
|
1 2 3 4 5 6 7 8
| tencent1110603370://response_from_qq ?appsign_bundlenull=2 &appsign_token=6c784232766a288122df5fee8f16fc38 &error=-4 &error_description=dGhlIHVzZXIgZ2l2ZSB1cCB0aGUgY3VycmVudCBvcGVyYXRpb24= &source=qq &source_scheme=mqqapi &version=1
|
清空剪切板
1
| [["[Data-Keyed] com.tencent.mqq.api.apiLargeData, {\n}"]]
|
设置剪切板
1
| [["[Data-Keyed] com.tencent.mqq.api.apiLargeData, {\n \"pasted_string\" = NBus;\n}"]]
|
QQ 空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=0 &file_data=6YKj5LmI77yMIOW4puedgOi/meS6m+mXrumimO+8jOaIkeS7rOadpeWuoeinhuS4gOS4i0JVU+OAgiDlj6/mmK/vvIzljbPkvb/mmK/ov5nmoLfvvIxCVVPnmoTlh7rnjrDku43nhLbku6PooajkuobkuIDlrprnmoTmhI/kuYnjgIIgQlVT55qE5Y+R55Sf77yM5Yiw5bqV6ZyA6KaB5aaC5L2V5YGa5Yiw77yM5LiNQlVT55qE5Y+R55Sf77yM5Y+I5Lya5aaC5L2V5Lqn55Sf44CCIOeUn+a0u+S4re+8jOiLpUJVU+WHuueOsOS6hu+8jOaIkeS7rOWwseS4jeW+l+S4jeiAg+iZkeWug+WHuueOsOS6hueahOS6i+WunuOAgiDnu4/ov4fkuIrov7DorqjorrrvvIwg6YKj5LmI77yMIOaXoueEtuWmguS9le+8jCDnjrDlnKjvvIzop6PlhrNCVVPnmoTpl67popjvvIzmmK/pnZ7luLjpnZ7luLjph43opoHnmoTjgIIg5omA5Lul77yMIOaIkeS7rOmDveefpemBk++8jOWPquimgeacieaEj+S5ie+8jOmCo+S5iOWwseW/hemhu+aFjumHjeiAg+iZkeOAgiDov5nnp43kuovlrp7lr7nmnKzkurrmnaXor7TmhI/kuYnph43lpKfvvIznm7jkv6Hlr7nov5nkuKrkuJbnlYzkuZ/mmK/mnInkuIDlrprmhI/kuYnnmoTjgIIg5bq35b635pu+57uP5o+Q5Yiw6L+H77yM5pei54S25oiR5bey57uP6LiP5LiK6L+Z5p2h6YGT6Lev77yM6YKj5LmI77yM5Lu75L2V5Lic6KW/6YO95LiN5bqU5aao56KN5oiR5rK/552A6L+Z5p2h6Lev6LWw5LiL5Y6744CC6L+Z5Ly85LmO6Kej562U5LqG5oiR55qE55aR5oOR44CC &file_type=text &generalpastboard=1 &sdkv=3.5.1 &shareType=0 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &version=1
|
ImageMessage
初次
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=2 &file_type=img &generalpastboard=1 &objectlocation=pasteboard &sdkv=3.5.1 &shareType=0 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &version=1
|
剪切板
1
| [["[Data-Keyed] com.tencent.mqq.api.apiLargeData, {\n \"file_data\" = {length = 1814667, bytes = 0x47494638 39612c01 a900f700 0082afc1 ... 1420568b 8000003b };\n}"]]
|
设置缩略图
1
| [["[Data-Keyed] com.tencent.mqq.api.apiLargeData, {\n \"file_data\" = {length = 1814667, bytes = 0x47494638 39612c01 a900f700 0082afc1 ... 1420568b 8000003b };\n previewimagedata = {length = 4827, bytes = 0xffd8ffe0 00104a46 49460001 01000048 ... 7aa27fbd 401fffd9 };\n}"]]
|
校验
1
| [["[Data-Keyed] com.tencent.tencent1110603370, {\n \"appsign_bundlenull\" = 2;\n \"appsign_redirect\" = \"mqqapi://share/to_fri?thirdAppDisplayName=QnVzTW9jaw==&shareType=0&objectlocation=pasteboard&file_type=img&callback_name=QQ4232766A&src_type=app&version=1&cflag=2&callback_type=scheme&generalpastboard=1&sdkv=3.5.1&bundleid=Y29tLm51b21pMS5idXMubW9jaw==&appsign_txid=QQ4232766A\";\n \"appsign_redirect_pasteboard\" = {\n \"file_data\" = {length = 1814667, bytes = 0x47494638 39612c01 a900f700 0082afc1 ... 1420568b 8000003b };\n previewimagedata = {length = 4827, bytes = 0xffd8ffe0 00104a46 49460001 01000048 ... 7aa27fbd 401fffd9 };\n };\n \"appsign_retcode\" = 25105;\n \"appsign_token\" = 6c784232766a288122df5fee8f16fc38;\n}"]]
|
QQ 空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=0 &file_type=img &generalpastboard=1 &objectlocation=pasteboard &sdkv=3.5.1 &shareType=0 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &version=1
|
AudioMessage
初次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=2 &description=6YCD6LeR6K6h5YiS &file_type=audio &flashurl=aHR0cHM6Ly9tdXNpYy4xNjMuY29tL3NvbmcvbWVkaWEvb3V0ZXIvdXJsP2lkPTI1NzA2Mjg0Lm1wMw== &generalpastboard=1 &objectlocation=pasteboard &sdkv=3.5.1 &shareType=0 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &title=Q2hlbWljYWwgQnVz &url=aHR0cHM6Ly9tdXNpYy4xNjMuY29tLyMvc29uZz9pZD0yNTcwNjI4NA== &version=1
|
剪切板
1
| [["[Data-Keyed] com.tencent.mqq.api.apiLargeData, {\n}"]]
|
QQ 空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=0 &description=6YCD6LeR6K6h5YiS &file_type=audio &flashurl=aHR0cHM6Ly9tdXNpYy4xNjMuY29tL3NvbmcvbWVkaWEvb3V0ZXIvdXJsP2lkPTI1NzA2Mjg0Lm1wMw== &generalpastboard=1 &objectlocation=pasteboard &sdkv=3.5.1 &shareType=1 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &title=Q2hlbWljYWwgQnVz &url=aHR0cHM6Ly9tdXNpYy4xNjMuY29tLyMvc29uZz9pZD0yNTcwNjI4NA== &version=1
|
VideoMessage
初次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=2 &description=TW90aW9uZ2FydGVu &file_type=video &generalpastboard=1 &objectlocation=pasteboard &sdkv=3.5.1 &shareType=0 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &title=QW5pbWF0aW9uIERhbmNpbmc= &url=aHR0cHM6Ly9naXBoeS5jb20vZ2lmcy9hbmltYXRpb24tZGFuY2luZy1jdXRlLWwwRXhoZ0RZbXNlcmtGYWJt &version=1
|
剪切板
1
| [["[Data-Keyed] com.tencent.mqq.api.apiLargeData, {\n}"]]
|
QQ 空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=0 &description=TW90aW9uZ2FydGVu &file_type=video &generalpastboard=1 &objectlocation=pasteboard &sdkv=3.5.1 &shareType=1 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &title=QW5pbWF0aW9uIERhbmNpbmc= &url=aHR0cHM6Ly9naXBoeS5jb20vZ2lmcy9hbmltYXRpb24tZGFuY2luZy1jdXRlLWwwRXhoZ0RZbXNlcmtGYWJt &version=1
|
WebPageMessage
初次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=2 &description=QXBwbGU= &file_type=news &generalpastboard=1 &objectlocation=url &pasteboard= &sdkv=3.5.1 &shareType=0 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &title=aVBob25l &url=aHR0cHM6Ly93d3cuYXBwbGUuY29tLmNuL2lwaG9uZS8= &version=1
|
剪切板
QQ 空间
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=0 &description=QXBwbGU= &file_type=news &generalpastboard=1 &objectlocation=url &pasteboard= &sdkv=3.5.1 &shareType=1 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &title=aVBob25l &url=aHR0cHM6Ly93d3cuYXBwbGUuY29tLmNuL2lwaG9uZS8= &version=1
|
FileMessage
初次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=18 &fileName=J1ZajKJKzD0PK.gif &file_type=localFile &generalpastboard=1 &objectlocation=pasteboard &sdkv=3.5.1 &shareType=0 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &version=1
|
剪切板
1
| [["[Data-Keyed] com.tencent.mqq.api.apiLargeData, {\n \"file_data\" = {length = 1814667, bytes = 0x47494638 39612c01 a900f700 0082afc1 ... 1420568b 8000003b };\n}"]]
|
MiniProgramMessage
初次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| https://qm.qq.com/opensdkul/mqqapi/share/to_fri ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &callback_name=QQ4232766A &callback_type=scheme &cflag=64 &description=5o6o6I2Q5L2g5L2/55So6L+Z5Liq5bCP56iL5bqP &file_type=news &generalpastboard=1 &mini_appid=1108108864 &mini_code64=1 &mini_path=L3BhZ2VzL2NvbXBvbmVudC9wYWdlcy9sYXVuY2hBcHA4MTMvbGF1bmNoQXBwODEzP2E9YWFhJmI9YmJiJmM9Y2Nj &mini_type=3 &mini_weburl=aHR0cHM6Ly93d3cuYXBwbGUuY29tLmNuL2lwaG9uZS8= &objectlocation=url &pasteboard= &sdkv=3.5.1 &shareType=0 &src_type=app &thirdAppDisplayName=QnVzTW9jaw== &title=aHR0cHM6Ly93d3cuYXBwbGUuY29tLmNuL2lwaG9uZS8= &url=aHR0cHM6Ly93d3cuYXBwbGUuY29tLmNuL2lwaG9uZS8= &version=1
|
剪切板
登录
初次
1 2 3 4 5 6
| https://qm.qq.com/opensdkul/mqqOpensdkSSoLogin/SSoLogin/tencent1110603370 ?appsign_txid=QQ4232766A &bundleid=Y29tLm51b21pMS5idXMubW9jaw== &objectlocation=url &pasteboard=YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGvEB0LDC0uLzAxMjM0NTY3ODk6Ozw9Pj9DS0xNTk9QUVUkbnVsbNMNDg8QHixXTlMua2V5c1pOUy5vYmplY3RzViRjbGFzc60REhMUFRYXGBkaGxwdgAKAA4AEgAWABoAHgAiACYAKgAuADIANgA6tHyAhIiMkJSYnKCkfK4APgBCAEYASgBOAFIAWgBeAGIAZgBqAD4AbgBxWYXBwX2lkVHNka3BdcmVzcG9uc2VfdHlwZVhhcHBfbmFtZV1hcHBzaWduX3Rva2VuVXNjb3BlWGJ1bmRsZWlkXnN0YXR1c192ZXJzaW9uVHNka3Zec3RhdHVzX21hY2hpbmVZc3RhdHVzX29zWWNsaWVudF9pZF8QEHJlZlVuaXZlcnNhbGxpbmtaMTExMDYwMzM3MFFpVXRva2VuV0J1c01vY2tQ0g9AQUJZTlMuc3RyaW5ngBVdZ2V0X3VzZXJfaW5mb9JERUZHWiRjbGFzc25hbWVYJGNsYXNzZXNfEA9OU011dGFibGVTdHJpbmejSElKXxAPTlNNdXRhYmxlU3RyaW5nWE5TU3RyaW5nWE5TT2JqZWN0XxATY29tLm51b21pMS5idXMubW9ja1IxNFozLjUuMV9saXRlWmlQaG9uZTEyLDFUMTQuM18QL2h0dHBzOi8vbW9jay5idXMubnVvbWkxLmNvbS9xcV9jb25uLzExMTA2MDMzNzAv0kRFUlNfEBNOU011dGFibGVEaWN0aW9uYXJ5o1JUSlxOU0RpY3Rpb25hcnkACAARABoAJAApADIANwBJAEwAUQBTAHMAeQCAAIgAkwCaAKgAqgCsAK4AsACyALQAtgC4ALoAvAC+AMAAwgDQANIA1ADWANgA2gDcAN4A4ADiAOQA5gDoAOoA7ADzAPgBBgEPAR0BIwEsATsBQAFPAVkBYwF2AYEBgwGJAZEBkgGXAaEBowGxAbYBwQHKAdwB4AHyAfsCBAIaAh0CKAIzAjgCagJvAoUCiQAAAAAAAAIBAAAAAAAAAFUAAAAAAAAAAAAAAAAAAAKW &sdkv=3.5.1
|
成功
1 2
| https://mock.bus.nuomi1.com/qq_conn/1110603370/com.nuomi1.bus.mock ?sdkactioninfo=ewogICJzZGtfYWN0aW9uX3F1ZXJ5IiA6ICJvYmplY3Rsb2NhdGlvbj11cmwmcGFzdGVib2FyZD1ZbkJzYVhOME1ERFVBUUlEQkFVR0J3cFlKSFpsY25OcGIyNVpKR0Z5WTJocGRtVnlWQ1IwYjNCWUpHOWlhbVZqZEhNU0FBR0dvRjhRRDA1VFMyVjVaV1JCY21Ob2FYWmxjdEVJQ1ZSeWIyOTBnQUd2RUJ3TERDc3NMUzR2TURFeU16UTFOamM0T1RvN1BrVkdSMGhKU2t0TVZTUnVkV3hzMHcwT0R4QWRLbGRPVXk1clpYbHpXazVUTG05aWFtVmpkSE5XSkdOc1lYTnpyQkVTRXhRVkZoY1lHUm9iSElBQ2dBT0FCSUFGZ0FhQUI0QUlnQW1BQ29BTGdBeUFEYXdlSHlBaElpTWtKU1luS0NtQURvQVBnQkNBRVlBU2dCU0FGWUFXZ0JlQUdJQVpnQnFBRzFwbGVIQnBjbVZ6WDJsdVh4QVNZWEJ3YzJsbmJsOWlkVzVrYkdWdWRXeHNXbVZ1WTNKNWRHOXJaVzVUY21WMFhIQmhjM05FWVhSaFVtVnpjRlp2Y0dWdWFXUlNjR1plZFhObGNsOWpZVzVqWld4c1pXUlZjR1pyWlhsWmNHRjVYM1J2YTJWdVUyMXpaMXhoWTJObGMzTmZkRzlyWlc0U0FIYW5BRkV5WHhBZ05tSTVZVEJqTkRGa1ptVmxPR0ZoWldJMU1qWTVZell5WlRnME56UTFaR1lRQU5JT0R6dzlvSUFUMGo5QVFVSmFKR05zWVhOemJtRnRaVmdrWTJ4aGMzTmxjMTVPVTAxMWRHRmliR1ZCY25KaGVhTkJRMFJYVGxOQmNuSmhlVmhPVTA5aWFtVmpkRjhRSUVNM01UWTVNRGcyTVVZeU9USXpOREl6T0VGQ01rWXpSRGswTlRCRFJEa3dYbTl3Wlc1dGIySnBiR1ZmYVc5elVrNVBYeEFnWXprNU1qa3daR1JpT1RObVlUWTNaVE15TXpGalpUVTNNakJrTmprek1qbGZFQ0JFUlRJek4wVTVSak5HTWtJNU5FTkVNekl3UmtFeFJURXlNREU0TWpBeVFsQmZFQ0F5TnpNeU5rVkNPVVJCT0RrNE5qQXpPREV3TXpFME5FTkRRVFZFTXpsQlJkSVwvUUUxT1h4QVRUbE5OZFhSaFlteGxSR2xqZEdsdmJtRnllYU5OVDBSY1RsTkVhV04wYVc5dVlYSjVBQWdBRVFBYUFDUUFLUUF5QURjQVNRQk1BRkVBVXdCeUFIZ0Fmd0NIQUpJQW1RQ21BS2dBcWdDc0FLNEFzQUN5QUxRQXRnQzRBTG9BdkFDK0FNc0F6UURQQU5FQTB3RFZBTmNBMlFEYkFOMEEzd0RoQU9NQTVRRHdBUVVCRUFFVUFTRUJLQUVyQVRvQlFBRktBVTRCV3dGZ0FXSUJoUUdIQVl3QmpRR1BBWlFCbndHb0FiY0J1d0hEQWN3Qjd3SCtBZ0VDSkFKSEFrZ0Nhd0p3QW9ZQ2lnQUFBQUFBQUFJQkFBQUFBQUFBQUZBQUFBQUFBQUFBQUFBQUFBQUFBQUtYIiwKICAic2RrX2FjdGlvbl9wYXRoIiA6ICJcL21xem9uZVwvMCIsCiAgInNka19hY3Rpb25fc2hlbWUiIDogInRlbmNlbnQxMTEwNjAzMzcwIiwKICAic2RrX2FjdGlvbl9ob3N0IiA6ICJxemFwcCIKfQ==
|
1 2 3
| tencent1110603370://qzapp/mqzone/0 ?objectlocation=url &pasteboard=YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGvEBwLDCssLS4vMDEyMzQ1Njc4OTo7PkVGR0hJSktMVSRudWxs0w0ODxAdKldOUy5rZXlzWk5TLm9iamVjdHNWJGNsYXNzrBESExQVFhcYGRobHIACgAOABIAFgAaAB4AIgAmACoALgAyADaweHyAhIiMkJSYnKCmADoAPgBCAEYASgBSAFYAWgBeAGIAZgBqAG1pleHBpcmVzX2luXxASYXBwc2lnbl9idW5kbGVudWxsWmVuY3J5dG9rZW5TcmV0XHBhc3NEYXRhUmVzcFZvcGVuaWRScGZedXNlcl9jYW5jZWxsZWRVcGZrZXlZcGF5X3Rva2VuU21zZ1xhY2Nlc3NfdG9rZW4SAHanAFEyXxAgNmI5YTBjNDFkZmVlOGFhZWI1MjY5YzYyZTg0NzQ1ZGYQANIODzw9oIAT0j9AQUJaJGNsYXNzbmFtZVgkY2xhc3Nlc15OU011dGFibGVBcnJheaNBQ0RXTlNBcnJheVhOU09iamVjdF8QIEM3MTY5MDg2MUYyOTIzNDIzOEFCMkYzRDk0NTBDRDkwXm9wZW5tb2JpbGVfaW9zUk5PXxAgM2RmODE2YzU3MTY3NDIwZjRkN2QzODkzYTk2N2ExZjVfECA2RjQyRURBNEY1RjM0NzM3ODQ4NDQ4M0MyREYzRTM4OFBfECAyNzMyNkVCOURBODk4NjAzODEwMzE0NENDQTVEMzlBRdI/QE1OXxATTlNNdXRhYmxlRGljdGlvbmFyeaNNT0RcTlNEaWN0aW9uYXJ5AAgAEQAaACQAKQAyADcASQBMAFEAUwByAHgAfwCHAJIAmQCmAKgAqgCsAK4AsACyALQAtgC4ALoAvAC+AMsAzQDPANEA0wDVANcA2QDbAN0A3wDhAOMA5QDwAQUBEAEUASEBKAErAToBQAFKAU4BWwFgAWIBhQGHAYwBjQGPAZQBnwGoAbcBuwHDAcwB7wH+AgECJAJHAkgCawJwAoYCigAAAAAAAAIBAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAKX
|
取消
1 2 3
| tencent1110603370://qzapp/mqzone/0 ?objectlocation=url &pasteboard=YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGlCwwVFhdVJG51bGzTDQ4PEBIUV05TLmtleXNaTlMub2JqZWN0c1YkY2xhc3OhEYACoROAA4AEXnVzZXJfY2FuY2VsbGVkU1lFU9IYGRobWiRjbGFzc25hbWVYJGNsYXNzZXNcTlNEaWN0aW9uYXJ5ohocWE5TT2JqZWN0CBEaJCkyN0lMUVNZX2ZueYCChIaIipmdoq22w8YAAAAAAAABAQAAAAAAAAAdAAAAAAAAAAAAAAAAAAAAzw==
|
分析
分享
基础信息
appID
为 tencent1110603370
appName
为 BusMock
appNumber
为 1110603370
bundleID
为 com.nuomi1.bus.mock
qqUniversalLink
为 https://qm.qq.com/opensdkul/
universalLink
为 https://mock.bus.nuomi1.com/qq_conn/1110603370/
urlScheme
为 tencent1110603370://
公共部分
从记录到的 URL,我们可以看到 Universal Link 的公共部分:
appsign_txid
为 QQ + HEX(${appNumber})
bundleid
为 encodeBase64(${bundleID})
callback_name
为 ${appsign_txid}
callback_type
为 scheme
cflag
表示控制标记,将在下文进行说明
description
为 encodeBase64(${description})
,部分 MessageType
不存在此项
generalpastboard
为 1
,表示通过 UIPasteboard.general
传递数据
sdkv
为 3.5.1
,表示 SDK 版本
shareType
为 Endpoint
,0
表示 QQ 好友,1
表示 QQ 空间,将在下文进行说明
src_type
为 app
,表示拉起 QQ 的来源
thirdAppDisplayName
为 encodeBase64(${appName})
title
为 encodeBase64(${title})
,部分 MessageType
不存在此项
version
为 1
,表示 API 版本
初次
当 App 初次分享到 QQ 时,调用 https://qm.qq.com/opensdkul/mqqapi/share/to_fri
拉起 QQ,URL 匹配 {qqUniversalLink}/mqqapi/share/to_fri
。
校验
此时需要进行 Universal Link 校验,调用 https://mock.bus.nuomi1.com/qq_conn/1110603370/com.nuomi1.bus.mock/mqqsignapp
返回 App,URL 匹配 ${universalLink}/${bundleID}/mqqsignapp
,数据从 appsign_extrainfo
获取。
decodeBase64
之后,发现格式为 json
:
1 2 3 4 5 6 7
| { "appsign_redirect_pasteboard": "", "appsign_redirect": "mqqapi://share/to_fri?appsign_txid=QQ4232766A&bundleid=Y29tLm51b21pMS5idXMubW9jaw==&callback_name=QQ4232766A&callback_type=scheme&cflag=2&file_data=6YKj5LmI77yMIOW4puedgOi/meS6m+mXrumimO+8jOaIkeS7rOadpeWuoeinhuS4gOS4i0JVU+OAgiDlj6/mmK/vvIzljbPkvb/mmK/ov5nmoLfvvIxCVVPnmoTlh7rnjrDku43nhLbku6PooajkuobkuIDlrprnmoTmhI/kuYnjgIIgQlVT55qE5Y+R55Sf77yM5Yiw5bqV6ZyA6KaB5aaC5L2V5YGa5Yiw77yM5LiNQlVT55qE5Y+R55Sf77yM5Y+I5Lya5aaC5L2V5Lqn55Sf44CCIOeUn+a0u+S4re+8jOiLpUJVU+WHuueOsOS6hu+8jOaIkeS7rOWwseS4jeW+l+S4jeiAg+iZkeWug+WHuueOsOS6hueahOS6i+WunuOAgiDnu4/ov4fkuIrov7DorqjorrrvvIwg6YKj5LmI77yMIOaXoueEtuWmguS9le+8jCDnjrDlnKjvvIzop6PlhrNCVVPnmoTpl67popjvvIzmmK/pnZ7luLjpnZ7luLjph43opoHnmoTjgIIg5omA5Lul77yMIOaIkeS7rOmDveefpemBk++8jOWPquimgeacieaEj+S5ie+8jOmCo+S5iOWwseW/hemhu+aFjumHjeiAg+iZkeOAgiDov5nnp43kuovlrp7lr7nmnKzkurrmnaXor7TmhI/kuYnph43lpKfvvIznm7jkv6Hlr7nov5nkuKrkuJbnlYzkuZ/mmK/mnInkuIDlrprmhI/kuYnnmoTjgIIg5bq35b635pu+57uP5o+Q5Yiw6L+H77yM5pei54S25oiR5bey57uP6LiP5LiK6L+Z5p2h6YGT6Lev77yM6YKj5LmI77yM5Lu75L2V5Lic6KW/6YO95LiN5bqU5aao56KN5oiR5rK/552A6L+Z5p2h6Lev6LWw5LiL5Y6744CC6L+Z5Ly85LmO6Kej562U5LqG5oiR55qE55aR5oOR44CC&file_type=text&generalpastboard=1&sdkv=3.5.1&shareType=0&src_type=app&thirdAppDisplayName=QnVzTW9jaw==&version=1", "appsign_retcode": "25105", "appsign_token": "6c784232766a288122df5fee8f16fc38", "appsign_bundlenull": "2" }
|
如果 appsign_extrainfo
没有数据,可以从剪切板 pasteboardType = com.tencent.${appID}
获取数据。
格式为 archivedData
:
1 2 3 4 5 6 7 8 9 10
| { "appsign_bundlenull" = 2; "appsign_redirect" = "mqqapi://share/to_fri?thirdAppDisplayName=QnVzTW9jaw==&shareType=0&objectlocation=pasteboard&file_type=img&callback_name=QQ4232766A&src_type=app&version=1&cflag=2&callback_type=scheme&generalpastboard=1&sdkv=3.5.1&bundleid=Y29tLm51b21pMS5idXMubW9jaw==&appsign_txid=QQ4232766A"; "appsign_redirect_pasteboard" = { "file_data" = {length = 1814667, bytes = 0x47494638 39612c01 a900f700 0082afc1 ... 1420568b 8000003b }; previewimagedata = {length = 4827, bytes = 0xffd8ffe0 00104a46 49460001 01000048 ... 7aa27fbd 401fffd9 }; }; "appsign_retcode" = 25105; "appsign_token" = 6c784232766a288122df5fee8f16fc38; }
|
我们可以看到:
appsign_bundlenull
不明
appsign_redirect
表示重定向 URL,但该 URL 属于 URL Scheme 格式,需要转换为 Universal Link 格式
appsign_redirect_pasteboard
表示剪切板数据
appsign_retcode
表示返回代码
appsign_token
表示分享 token
二次
拿到 token 之后,进行第二次分享,此时 URL 比初次多了 appsign_token
/ openredirect = 1
,并且 appsign_txid
重复了一次,应该是 BUG?
三次
进行第三次分享时,openredirect
没有了,重复的 appsign_txid
也变回了一个。
成功
分享成功时,调用 https://mock.bus.nuomi1.com/qq_conn/1110603370/com.nuomi1.bus.mock
返回 App,URL 匹配 ${universalLink}/${bundleID}
,注意没有额外的 path
,数据从 sdkactioninfo
获取。
decodeBase64
之后,发现格式为 json
:
1 2 3 4 5 6
| { "sdk_action_query": "appsign_bundlenull=2&source=qq&source_scheme=mqqapi&error=0&version=1", "sdk_action_path": "", "sdk_action_sheme": "tencent1110603370", "sdk_action_host": "response_from_qq" }
|
我们可以看到,用这些数据拼接成 URL 后,与通过 URL Scheme 返回时调用的 URL 一致,URL 匹配 ${appID}://response_from_qq
,注意没有 path
。
取消
取消分享与分享成功的处理流程一致,只不过返回数据略有不同:
1 2 3 4 5 6
| { "sdk_action_query": "error_description=dGhlIHVzZXIgZ2l2ZSB1cCB0aGUgY3VycmVudCBvcGVyYXRpb24=&appsign_bundlenull=2&source=qq&source_scheme=mqqapi&error=-4&version=1", "sdk_action_path": "", "sdk_action_sheme": "tencent1110603370", "sdk_action_host": "response_from_qq" }
|
我们可以看到:
error
为错误标记,0
表示成功,-4
表示用户取消
error_description
为 encodeBase64("the user give up the current operation")
source
为 qq
,可能表示从 QQ 返回
source_scheme
为 mqqapi
,不明
剪切板
QQ SDK 大多数情况下通过 URL 传递数据,涉及大文件时通过剪切板 pasteboardType = com.tencent.mqq.api.apiLargeData
传递数据。数据格式是 [String: Any]
键值对,再使用 NSKeyedArchiver
转换为 Data
进行传递。
file_data
为大文件,将在下文进行说明
pasted_string
为剪切板已拷贝的字符串
previewimagedata
为预览图
TextMessage
我们可以看到:
file_data
为 encodeBase64(${text})
,注意没有使用剪切板进行传递
file_type
为 text
ImageMessage
我们可以看到:
file_type
为 img
objectlocation
为 pasteboard
,表示通过剪切板进行传递
同时使用剪切板设置 file_data
/ previewimagedata
。
AudioMessage
我们可以看到:
file_type
为 audio
flashurl
为 encodeBase64(${dataLink})
,表示音频文件的 URL
objectlocation
为 pasteboard
,实际上不需要设置
url
为 encodeBase64(${link})
VideoMessage
我们可以看到:
file_type
为 video
objectlocation
为 pasteboard
,实际上不需要设置
url
为 encodeBase64(${link})
WebPageMessage
我们可以看到:
file_type
为 news
objectlocation
为 url
,实际上不需要设置
pasteboard
为空,可能是 BUG
url
为 encodeBase64(${link})
FileMessage
我们可以看到:
fileName
为 text(${fullName})
,注意没有使用 base64 进行编码
file_type
为 localFile
objectlocation
为 pasteboard
同时使用剪切板设置 file_data
。
MiniProgramMessage
我们可以看到:
file_type
为 news
mini_appid
为 text(${miniProgramID})
mini_code64
为 1
,不明
mini_path
为 encodeBase64(${path})
mini_type
为 MiniProgramType
,1
表示 preview
预览,3
表示 online
正式,4
表示 test
测试
mini_weburl
为 encodeBase64(${link})
,表示兼容旧版的网页 URL
objectlocation
为 url
pasteboard
为空
QQ 的小程序分享需要关联一个 AudioMessage
/ VideoMessage
/ WebPageMessage
,这里选择了 WebPageMessage
,因此部分数据与 WebPageMessage
相同。
cflag
这个控制标记受分享行为与分享类型影响:
2
表示 qqapiCtrlFlagQZoneShareForbid
屏蔽好友选择器上的空间入口
16
表示 qqapiCtrlFlagQQShareDataline
数据线 ,FileMessage
需要设置此项
64
表示 kQQAPICtrlFlagQQShareEnableMiniProgram
小程序 ,MiniProgramMessage
需要设置此项
cflag
属于 OptionSet
,通过位运算声明支持一种或多种特性。
shareType
大多数情况下把 shareType
改为 1
即可分享到 QQ 空间。但是 TextMessage
/ ImageMessage
不支持直接分享到 QQ 空间,因此需要把 shareType
改为 0
且 cflag
改为 0
从好友选择器里选择 QQ 空间进行分享。同时 FileMessage
/ MiniProgramMessage
不支持分享到 QQ 空间。
登录
当 App 使用 QQ 登录时,调用 https://qm.qq.com/opensdkul/mqqOpensdkSSoLogin/SSoLogin/tencent1110603370
打开 QQ,URL 匹配 ${qqUniversalLink}/mqqOpensdkSSoLogin/SSoLogin/${appID}
,数据从 pasteboard
获取。
decodeBase64
之后,发现格式为 archivedData
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| { "app_id" = 1110603370; "app_name" = BusMock; "appsign_token" = ""; bundleid = "com.nuomi1.bus.mock"; "client_id" = 1110603370; refUniversallink = "https://mock.bus.nuomi1.com/qq_conn/1110603370/"; "response_type" = token; scope = "get_user_info"; sdkp = i; sdkv = "3.5.1_lite"; "status_machine" = "iPhone12,1"; "status_os" = "14.3"; "status_version" = 14; }
|
我们可以看到:
app_id
为 ${appNumber}
app_name
为 ${appName}
appsign_token
为空
bundleid
为 ${bundleID}
client_id
为 ${appNumber}
refUniversallink
为 {universalLink}
response_type
为 token
,可能表示需要返回登录 token
scope
为权限范围,get_user_info
表示 kOPEN_PERMISSION_GET_USER_INFO
获取用户信息
sdkp
为 i
,可能表示系统 iOS
sdkv
为 3.5.1_lite
,表示 SDK 详细版本
status_machine
为 iPhone12,1
,表示设备型号
status_os
为 14.3
,表示系统版本
status_version
为 14
,可能表示系统主要版本
成功
登录成功时,调用 https://mock.bus.nuomi1.com/qq_conn/1110603370/com.nuomi1.bus.mock
返回 App,URL 匹配 ${universalLink}/${bundleID}
,没有 path
,数据从 sdkactioninfo
获取。
decodeBase64
之后,发现格式为 json
:
1 2 3 4 5 6
| { "sdk_action_query": "objectlocation=url&pasteboard=YnBsaXN0MDDUAQIDBAUGBwpYJHZlcnNpb25ZJGFyY2hpdmVyVCR0b3BYJG9iamVjdHMSAAGGoF8QD05TS2V5ZWRBcmNoaXZlctEICVRyb290gAGvEBwLDCssLS4vMDEyMzQ1Njc4OTo7PkVGR0hJSktMVSRudWxs0w0ODxAdKldOUy5rZXlzWk5TLm9iamVjdHNWJGNsYXNzrBESExQVFhcYGRobHIACgAOABIAFgAaAB4AIgAmACoALgAyADaweHyAhIiMkJSYnKCmADoAPgBCAEYASgBSAFYAWgBeAGIAZgBqAG1pleHBpcmVzX2luXxASYXBwc2lnbl9idW5kbGVudWxsWmVuY3J5dG9rZW5TcmV0XHBhc3NEYXRhUmVzcFZvcGVuaWRScGZedXNlcl9jYW5jZWxsZWRVcGZrZXlZcGF5X3Rva2VuU21zZ1xhY2Nlc3NfdG9rZW4SAHanAFEyXxAgNmI5YTBjNDFkZmVlOGFhZWI1MjY5YzYyZTg0NzQ1ZGYQANIODzw9oIAT0j9AQUJaJGNsYXNzbmFtZVgkY2xhc3Nlc15OU011dGFibGVBcnJheaNBQ0RXTlNBcnJheVhOU09iamVjdF8QIEM3MTY5MDg2MUYyOTIzNDIzOEFCMkYzRDk0NTBDRDkwXm9wZW5tb2JpbGVfaW9zUk5PXxAgYzk5MjkwZGRiOTNmYTY3ZTMyMzFjZTU3MjBkNjkzMjlfECBERTIzN0U5RjNGMkI5NENEMzIwRkExRTEyMDE4MjAyQlBfECAyNzMyNkVCOURBODk4NjAzODEwMzE0NENDQTVEMzlBRdI/QE1OXxATTlNNdXRhYmxlRGljdGlvbmFyeaNNT0RcTlNEaWN0aW9uYXJ5AAgAEQAaACQAKQAyADcASQBMAFEAUwByAHgAfwCHAJIAmQCmAKgAqgCsAK4AsACyALQAtgC4ALoAvAC+AMsAzQDPANEA0wDVANcA2QDbAN0A3wDhAOMA5QDwAQUBEAEUASEBKAErAToBQAFKAU4BWwFgAWIBhQGHAYwBjQGPAZQBnwGoAbcBuwHDAcwB7wH+AgECJAJHAkgCawJwAoYCigAAAAAAAAIBAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAKX", "sdk_action_path": "/mqzone/0", "sdk_action_sheme": "tencent1110603370", "sdk_action_host": "qzapp" }
|
与分享回调一样,拼接成 URL 后进行处理,URL 匹配 ${appID}://qzapp/mqzone/0
,数据从 pasteboard
获取。
decodeBase64
之后,发现格式为 archivedData
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| { "access_token" = 27326EB9DA8986038103144CCA5D39AE; "appsign_bundlenull" = 2; encrytoken = 6b9a0c41dfee8aaeb5269c62e84745df; "expires_in" = 7776000; msg = ""; openid = C71690861F29234238AB2F3D9450CD90; passDataResp = ( ); "pay_token" = DE237E9F3F2B94CD320FA1E12018202B; pf = "openmobile_ios"; pfkey = c99290ddb93fa67e3231ce5720d69329; ret = 0; "user_cancelled" = NO; }
|
我们可以看到:
access_token
为登录 token
encrytoken
不明
expires_in
为过期时间间隔
msg
不明
openid
为开放 ID
passDataResp
不明
pay_token
可能为支付 token
pf
可能为平台标记 platform
ret
可能为返回代码 result
user_cancelled
为 NO
,表示成功
取消
取消登录时,调用 tencent1110603370://qzapp/mqzone/0
返回 App,URL 匹配 ${appID}://qzapp/mqzone/0
,数据从 pasteboard
获取。
decodeBase64
之后,发现格式为 archivedData
:
1 2 3
| { "user_cancelled" = YES; }
|
我们可以看到:
user_cancelled
为 YES
,表示用户取消
总结
本文通过记录和分析 QQ SDK 的行为,厘清了 QQ 分享和登录的流程。传递数据主要靠 URL,大文件则使用剪切板。但可能是历史原因,QQ 在处理数据使用了多种方式,pure URL query / json in URL query / data in pasteboard / data in URL query。URL query 的命名也是五花八门。
还有一个可能是 BUG 的问题,在 App 支持 Universal Link 的情况下,取消登录返回 App 时 QQ 使用 URL Scheme 进行回调,而不是 Universal Link,但其他的操作都是 Universal Link。
完整代码实现请参考来源。
参考
- NBus - QQHandler