实现多个APP一键签到-前篇
参考文献
支付宝app链接实例:https://docs.open.alipay.com/10691/bv8s88
支付宝API跳转说明:https://docs.alipay.com/mini/framework/app (page参数是误导人的)
iOS12 捷径专栏:https://www.jianshu.com/p/fb2573f0f100
iOS 12 刚推出的「捷径」怎么用?从零开始教你快速上手 :https://sspai.com/post/47225
URL Schemes 使用详解:https://sspai.com/post/31500
用到的js函数
- encodeURIComponent()
参考工具:http://www.w3school.com.cn/jsref/jsref_encodeURIComponent.asp
转化工具:http://www.w3school.com.cn/tiy/t.asp?f=jseg_text
用到的工具
- thor - ios抓包神器
工具获取:https://yiweifen.com/v-1-336612.html
如何抓包:https://www.jianshu.com/p/bb8231f48a07
- 捷径
聊两句
最近也是刚接触捷径这款应用,用下来体验很棒扩展性可玩性很高,我就突然心血来潮产生了用捷径来完成生活APP里的签到任务。于是笼统的学习了捷径的快速上手与规则开发,也在网上发现很多人也有和我相同的想法,实现用捷径一键完成各个APP的签到。但因技术问题,和APP开发公司的接口开放性不如人意,很多人空有想法,难以实践。
但我曾有编程的经验,还是没有放弃去寻找实现方法,花了一天时间,亲自跳进各种坑中,查阅相关文献,官方文档,寻求帮助。最终辛苦没有白费,让我寻找到了实现一键签到的初步方向。
此篇为捷径的实践与拓展经验分享,适合老手阅读,不明白的请先阅读开头的几篇捷径文献。废话不多说开始分享实现功能的过程。
首先我用到了URL Schemes
众所周知URL Schemes是苹果沙盒机制赋予每个app的独立url协议,可以通过url打开指定的应用。但是国内app官方文档的不全面,对URL Schemes的不重视,导致如今大多数的app只有一个Schemes 应用协议标识,如微信的URL Schemes —— wechat://
现在国内app URL Schemes的开发做的较好的很少,支付宝属于做的较好的,通过appid来识别各个应用内的栏目如:alipays://platformapi/startapp?appId=20000160
如何获取应用的URL,以及简单抓包分析app内每个页面的识别id、参数,已经有作者详细的写出,这里不再赘述。(请参阅:https://www.jianshu.com/p/3c05aec073a1)
针对支付宝app我也做过简单的抓包,但抓到的信息中并没有包含支付宝app的所有页面,比如蚂蚁会员‘领取积分’的页面,很多小程序页面等等,那么如何获取到这些页面的url呢,简单抓包就很难实现了,需要用到一款工具 thor 它是一款手机信息嗅探监控、http全局抓包工具。
接着用thor进行精确抓包
这里不做如何抓包的赘述(请参阅:https://www.jianshu.com/p/bb8231f48a07)然后进行打开支付宝进入‘领取积分’页面,抓取出打开领取积分页面这一操作向服务器提交了哪些信息,以及服务器返回了哪些信息,这些信息包括xml、json、url、cookie等等,从这些信息中分析出‘领取积分’页面的id或者是具体url位置。
下图为我抓取到的信息截图
从抓取出的信息中,
我们可以分析出支付宝会员在应用内的地址是:https://20000160.h5app.alipay.com/www/index.htm
而领取积分页面的地址是:https://20000160.h5app.alipay.com/www/myPoints.htm
可以看出这两个页面公用了一个appid,只是分为了两个文件名。
而我们要的是‘领积分’页面的URL Schemes,但现在只知道‘支付宝会员的’URL Schemes
——alipays://platformapi/startapp?appId=20000160
为什么一个appid却能指向两个甚至更多的网页,说明这个URL他是可以带参数的,而支付宝会员页面的URL它缺省了参数,应用打开的是默认位置index.htm,则我们只要知道缺省的参数是什么然后替换成‘领积分’页面的参数就能达到我们的目的了。
这是一个寻找官方开发文档的过程,可以去参阅开头分享的官方文档实例。有很多我也没有找到,希望找到的朋友底下留言或私信给我与大家分享出来。
- 最终我找到了缺省参数是:
alipays://platformapi/startapp?appId='xxx'&url='x/y/z'
那么已经很简单了,参数url后面值就是我们要改的东西,但是看了下官方文档说url参数需要转译一下,我们利用js语句里的encodeURIComponent() 函数进行转译,如下:
document.write(encodeURIComponent('/www/myPoints.html'))
输出 =》 %2Fwww%2FmyPoints.html
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
- 得出我们需要的URL Schemes =》
lipays://platformapi/startapp?appId=20000160&url=%2Fwww%2FmyPoints.html
测试效果图:
试运行了之后非常成功,而且发现捷径和safari会对url自动转译,无需自己转译,也就是说对alipays://platformapi/startapp?appId=20000160&url=/www/myPoints.html,也是识别的。不过对于一些ios app开发者来说写程序的时候还是需要转译的这个过程,以免出现错误。
小结:
到这里我抓取并实现跳转到自己想要的页面这个目的已经全部达到了,整个过程的分析和实现对于捷径老手来说理解起来没问题,就是先简单抓包ipa>拆包分析plist>获取初步URL Schemes>深度抓包>详细分析>参考官方文档>得出解决方案。
后续我对支付宝别的页面进行深度抓包分析,发现有些是更换id就能实现,有些带上参数也能实现跳转,但还有很多页面还是无法跳转,或者是参数不够或者是官方未开放接口,也没相关文档造成的,难以寻找解决方案。
本文很多解决方法并不成熟,全是我摸索出来,关于URL Schemes-捷径的应用篇我应该还会更新后篇,毕竟是发表一个实现一键签到捷径的专题报告,后续可以继续关注我的更新。也希望有网友读者能反馈分享更好的方法和实现途径,或分享更详细的官方开发文档,让捷径变得更灵活方便全能。