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

最近在做支付宝支付时发现在未安装支付宝客户端的情况下,并不能跳转到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];
}
未安装支付宝APP时不能跳转H5支付的问题_第1张图片
E3B760E0-4A9A-4095-BA1A-EEB488C9194D.png

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

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

    未安装支付宝APP时不能跳转H5支付的问题_第2张图片
    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支付的问题)