美文网首页程序员iOS DeveloperiOS开发技术分享
未安装支付宝APP时不能跳转H5支付的问题

未安装支付宝APP时不能跳转H5支付的问题

作者: asdfeng | 来源:发表于2016-04-18 18:59 被阅读2427次

    最近在做支付宝支付时发现在未安装支付宝客户端的情况下,并不能跳转到H5支付页面进行支付,只是状态栏闪烁了一下后,状态栏信息由白色字体变成了黑色字体。后来发现原来是因为我在AppDelegate的代理方法中,用代码创建了一个window并设置为了keyWindow,但是却没有将Project ->Targets ->General ->MainInterface的main.storyboard入口置为空,导致APP出现了两个window从而把支付宝的H5页面个覆盖了。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        [self.window makeKeyAndVisible];
    }
    
    E3B760E0-4A9A-4095-BA1A-EEB488C9194D.png

    有两种方法可以解决这个问题:

    1. 我们只需要将Project ->Targets ->General ->MainInterface的main.storyboard入口置为空即可。

      E3513712-4E94-4F80-BB77-2895F5197BA6.png
    2. 就是在调用支付API之前获取第一个window并设置其显示,然后在回调的block里再设置其隐藏(这种方法并不推荐)。代码如下:

    // 获取底层的window
    UIWindow *firstWindow = [[UIApplication sharedApplication] windows][0];
            // 判断是否安装了支付宝客户端
            NSURL * alipay_app_url = [NSURL URLWithString:@"alipay:"];
            if (![[UIApplication sharedApplication] canOpenURL:alipay_app_url]) {
                // 显示最底层window
                firstWindow.hidden = NO;
            }
    // 调起阿里支付
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic){
                /**回调成功后隐藏这个window*/
                firstWindow.hidden = YES;
    }
    

    之所以不推荐这个方法,是因为它会导致我们APP主窗口的所有视图消失,变成黑色或者其他设置的颜色。
    备注
    还有一种可能就是像简友 6cb68282a5ce一样,项目里面集成了shareSDK,而shareSDK和支付宝的SDK冲突了, 把shareSDK换成最新的就可以了。在此感谢简友6cb68282a5ce所提供的问题和解决办法。

    相关文章

      网友评论

        本文标题:未安装支付宝APP时不能跳转H5支付的问题

        本文链接:https://www.haomeiwen.com/subject/htsalttx.html