iOS利用runtime给NSURL 添加方法交换检测url是否为空,导致影响第三方的分享和支付调用失败

之前在应用里为了检测NSURL 链接为空的情况,在NSURL的分类里添加了一个检测url为nil的方法,并用runtime替换掉了系统的方法,之前调分享或支付的时候并没有问题,自从升级的友盟的sdk后,再调分享就总报错,白名单设置了:

-canOpenURL: failed for URL: "(null)" - error: "Invalid input URL"

Share fail with error Error Domain=UMSocialPlatformErrorDomain Code=2008 "(null)" UserInfo={message=应用未安装}

破玩意整了好几天,一度给我整崩溃。今天心平气和的坐下来,就仔细瞅着这个错误苦思冥想,到底哪里会有和 URL: "(null)" 相关联的地方,突然就想到了NSURL 方法交换检测url为nil的这里,然后抱着试一试心态,把这个该死的方法注释调,结果已运行果真他娘的可以了。真是狠狠的给我一个叫教训!

问题原因:之前在判断url的时候,先根据url里是否包含http为关键词判断是否为一个有效的url链接,然而在调起第三方app这个链接并不是常规的http开头的链接,比如再调qq分享时打开qq的url是这样的:

mqq://

这种url自然不是平常那种http开头的地址,所以导致在检测url时返回了nil,进入引起如上错误。真是tmd自己挖了个大坑!

+(instancetype)loadUrLWithString:(NSString *)strUrl{
    if ([strUrl rangeOfString:@"http"].location == NSNotFound) {
        return nil;
    }
    NSURL * url = [NSURL loadUrLWithString:strUrl];
    if (url == nil) {
        [self showToast:@"Url是空的!"];
    }
    return url;
    }

runtime 替换系统方法要慎用!

runtime 替换系统方法要慎用!

runtime 替换系统方法要慎用!

你可能感兴趣的:(iOS利用runtime给NSURL 添加方法交换检测url是否为空,导致影响第三方的分享和支付调用失败)