判断支付宝是网页支付还是app支付

最近调用支付宝时因业务需求,需要判断支付宝是走网页支付还是走手机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;
                        }
                        
                    }
                }
                
            }
        }
        
    }

你可能感兴趣的:(判断支付宝是网页支付还是app支付)