为了方便用户充值,产品提出了一个新的需求,引导用户在App Store绑定支付宝或者微信,除了图文的教程外还需要做一个跳转,点击按钮跳转至App Store的账户设置页面,方便用户操作,并给出了知乎App中的一个具体案例:
图一
图二
点击图一的“去绑定支付宝”跳转至图二,这样看似一个很简单的需求却遇到了坑(写这个主要是没有在网上找到相应的资料,让看到的人少走一些弯路,也记录下自己解决问题的过程)。
最开始想到的是能不能通过像打开设置页面一样,通过类似于:
NSString * urlScheme = @"App-Prefs:root=Bluetooth";// 蓝牙
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlScheme] options:@{} completionHandler:nil];
通过一个特定的URL Scheme跳转至账户设置页,但是通过实践,发现在iOS11下甚至连上面例子中的蓝牙页面都跳不了,只能跳转至设置页面,这中方案肯定行不通。
这个方案失败后在网上疯狂Google并查看文档,切换各种关键字和中英文,结果都没有找到解决方案,心理有点小失落,知乎不会是去苹果开通了什么VIP服务跳过去的吧(开玩笑)。。
后面通过询问,发现有不少App都实现了这个跳转,这种大家都能做的需求,肯定有比较方便的解决方案,对比几个App的跳转,和直接跳转App Store的行为有些类似,我猜测应该是一段类似于跳转App Store的URL,但是这段URL是什么呢?网上也搜不到一点头绪,于是使用Charles对支付宝App的跳转进行了抓包(抓知乎的没有得到有效信息),终于有了收获(O(∩_∩)O哈哈~):
图三
图四
我拦截了支付宝跳转时调用的链接,把返回的html代码从上往下看了一遍,发现了图四中的一段URL,非常有可能是跳转到账户设置页的URL,于是在自己的项目中进行测试:
NSURL *accountUrl = [NSURL URLWithString:@"https://finance-app.itunes.apple.com/account/edit?mt=8"];
if ([[UIApplication sharedApplication] canOpenURL:accountUrl]) {
if (([[UIDevice currentDevice].systemVersion doubleValue] >= 10.0)) {
[[UIApplication sharedApplication] openURL:accountUrl options:@{} completionHandler:nil];
} else {
[[UIApplication sharedApplication] openURL:accountUrl];
}
}
最终成功实现了跳转,虽然只是个简单的功能,但最终能通过自己的思考和行动去解决问题还是挺开心的。
网友评论