boyaq / react-native-unionpay

15 stars 10 forks source link

unionpay 和 支付宝冲突 #4

Open WilongChen opened 7 years ago

WilongChen commented 7 years ago

所有的外链APP回掉都会走 RCTOpenURLNotification 这个通知,而在CFBundleURLTypes 你无法判断CFBundleURLName 具体是在 CFBundleURLTypes 里第几个位置 建议改成支付宝的判断方法 做如下修改 NSArray urlTypes = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleURLTypes"]; for (NSDictionary item in urlTypes) { NSString name = item[@"CFBundleURLName"]; if ([name isEqualToString:@"upay"]) { NSArray schemes = item[@"CFBundleURLSchemes"]; if (schemes.count > 0) { self.schemeStr = schemes[0]; break; } } } 否则

NSArray *urlTypes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"];
NSArray *urlSchemes = [[urlTypes objectAtIndex:3] objectForKey:@"CFBundleURLSchemes"];
if(urlSchemes.count > 0) {
    self.schemeStr = [urlSchemes firstObject];
}

这个方法无论哪个在firstObject 你都会取到 CFBundleURLSchemes 它不一定是unionpay 而 canOpen = [aURLString hasPrefix:scheme]; 返回YES
[body setObject:code forKey:@"code"];
[self sendEventWithName:@"UnionPay_Resp" body: body]; 这里可能会导致崩溃

当然 你也可以把 他放进 if(data != nil) { } 这样更安全

boyaq commented 7 years ago

你能不能发个PR啊