已迁移平台:segmentfault,搜索 erma0
换平台了,简书发什么都锁定,广告一堆,趁早倒闭吧。
温馨提示:先看文末<a href="#总结">总结</a>或先看(3)WEB端
<a href="#第一段的锚点名称">第一段标题</a>
<a name="第一段的锚点名称">第一段标题</a>
什么是APP URL scheme
玩手机经常会碰到浏览器里提示即将跳转到某APP,或者微信里提醒即将打开某APP,这其中的原理,一般就是通过URL scheme实现的。
具体可以看一下这篇文章的详细介绍:传送门
如何查找某一APP的URL scheme
(1) iPhone
- 将下载下来的ipa文件(可以用爱思助手下载)直接解压
- 以抖音为例,进入目录
\抖音短视频_7.7.0(正版)\Payload\Aweme.app\
- 打开
Info.plist
文件 - 搜索
CFBundleURLName
,其中<string>
里就是对应的scheme,比如抖音的就是snssdk1128://
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>com.ss.iphone.ugc.Aweme</string>
<key>CFBundleURLSchemes</key>
<array>
<string>snssdk1128</string>
</array>
</dict>
(2)安卓
- 反编译apk
- 打开
AndroidManifest.xml
,搜索scheme
或者android.intent.action.VIEW
- 根据对应的Activity名称
aweme
,可以定位到:
<activity android:launchMode="singleTask" android:name="com.ss.android.ugc.aweme.app.DeepLinkHandlerActivity" android:noHistory="true" android:screenOrientation="portrait" android:theme="@style/t">
<intent-filter>
<action android:name="com.ss.android.sdk.snssdk1128"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="snssdk1128"/>
</intent-filter>
</activity>
- 这里已经知道scheme是
snssdk1128://
了,就在反编译的内容里搜一下这个就能搜到所有的URL scheme了(带参数的哦)
(3)WEB端
最简单、粗暴的方法就是,拿到你发现的会提示“即将打开某APP”的页面(一般就是个普通URL),检查页面源代码,里面就有scheme://,比如下面找抖音的一下URL scheme。
- 打开分享页面
-
设置手机端UA,,勾选Preserve log(保留日志),再点击【关注】
- 可以看到,Network栏出现了一个红色的请求,这个就是URL scheme的请求,是要打开抖音APP并且关注该用户
- 点进去看,得到全部URL是
snssdk1128://user/profile/98726798113?refer=web&gd_label=click_wap_profile_follow&type=need_follow&needlaunchlog=1
- 然后就可以搜索这个URL了,先在左侧点击一下那个红色URL,然后Ctrl+F,搜一下
snssdk1128://
(不能搜整条URL,因为URL里参数都是前端处理之后加上去的) - 搜到两个结果,第一个是之前看到的红色URL,那应该就是另一个,双击进入
- 点一下花括号
{ }
进行格式化,再点一下右侧代码区,才能Ctrl+F,一样的搜索snssdk1128://
-
结果如图:
<a name="总结">总结</a>
总的来说,要找一个APP的URL scheme,可以按一下顺序尝试:
- 先看有没有什么分享链接是会唤起App的,如果有,直接参照(3)来查找暴露的scheme(一般都会带拼接好的参数);
- 如果没有WEB端,就参考(2)进行反编译来查找scheme(参数要自己拼凑尝试了)
- 如果上面两步没有成功,只能通过iOS端进行查找scheme(只要一个开头,也就是只能唤醒APP)
补充
- 隐式启动APP
- intent记录APP
- Intent拦截者APP
原理是通过xposed框架查找intent及参数,未测试。