本文最后更新于 1013 天前,其中的信息可能已经有所发展或是发生改变。
最近有些比较有意思的需求,要模拟调用抖音扫码。常规的实现逻辑可能还是 用 模拟点击 实现类似的效果,调用扫一扫
或者进入到抖音主页去点击扫码按钮,但是这样都是一个比较常规的流程,有个很大的问题是,你怎么去扫码,每次的二维码都是不一样的。那怎么展现二维码给手机扫码。
到这里有些人可能就觉得做不了,或者说没思路了
1. 问题简化,探究本质
假设我们自己开发一个扫码功能,本质上二维码扫码出来还是一个 url
二维码的作用就是 方便传播,以及简单的加密让 url 的参数不直接暴露。
那我们是不是可以直接传 url 给抖音,让 抖音打开对应的 url
ok, 到这里问题已经简化了。
打开到 抖音的 扫码完成后的结果界面
adb shell dumpsys activity | grep mResum
得到结果如下:
com.ss.android.ugc.aweme/.crossplatform.activity.CrossPlatformActivity
查看 当前 activity 的名称,然后通过路由分析查看这个 activity 的路由信息(详情看我之前写的 抖音路由分析)
得到路由信息是
//ame/webview
2. 乘胜追击
进入这个 CrossPlatformActivity 类的源码界面,分析url的来源是通过 intent 的 获取,key 是 “url”( 这里省略了一些抖音逆向的解析)
到这里就很简单了,用 adb 根据 路由信息以及 intent 配置的 key 去打开对应的 url。
adb -s {self.device} shell am start -n com.ss.android.ugc.aweme/com.ss.android.ugc.aweme.app.DeepLinkHandlerActivity -d 'snssdk1128://ame/webview/?url=https://www.baidu.com'
发现可以正常打开传进去的 url ,那我们通过这种方式 打开的 url ,和 抖音手动扫一扫打开 url 是一样的么,会不会被抖音监控发现到
那就要 分析 扫码界面到 扫码结果界面是怎么一个跳转逻辑
我目前自己分析是没发现有问题的,可以放心使用
扫码界面是
com.ss.android.ugc.aweme/.qrcode.view.ScanQRCodeActivityV2
看看 代码就知道了
最后还是 通过一个 中间件的 service 将扫码结果 传递给 CrossPlatformActivity ,本质上是没有区别的