最近调用支付宝时因业务需求,需要判断支付宝是走网页支付还是走手机app支付,网上一搜一堆说的同样的方法,用判断scheme是否跳转的方式,代码如下:
NSURL * myURL_APP_A = [NSURL URLWithString:@"alipay:"];
if (![[UIApplication sharedApplication] canOpenURL:myURL_APP_A]) {
//如果没有安装支付宝客户端那么需要安装
UIAlertView *message = [[UIAlertView alloc]initWithTitle:@"提示信息" message:@"点击确定安装支付宝钱包!" delegate:self cancelButtonTitle:@"确定" otherButtonTitles: nil];
[message show];
return;
}
可是本人亲测,此法没用。无论手机是否安装支付宝app,他都会跳转到canOpenURL = Yes的状态。
于是分析如果没安装支付宝时,支付宝弹出来网页,它是在支付的vc中加了一个WebView,找到源头,就可以判断如果有这个WebView,就说明是跳转的网页支付,如果没有,就是手机app支付。
代码如下:
AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
UIViewController *topVC = [delegate topViewController];
if([topVC isKindOfClass:[self class]])
{
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
for(UIView *sbView in keyWindow.subviews)
{
for(UIView *sv in sbView.subviews)
{
if([sv isKindOfClass:[UIWebView class]])
{
for(UIView *subV in sv.subviews)
{
// APH5ProgressView
if([subV isKindOfClass:NSClassFromString(@"APH5ProgressView")])
{
//支付宝网页付款进度条
return;
}
}
}
}
}
}