将 Api 的 openURL 与 iPad 中的模式 tel 错误链接
Posted
技术标签:
【中文标题】将 Api 的 openURL 与 iPad 中的模式 tel 错误链接【英文标题】:Linking Api's openURL with schema tel error in iPad 【发布时间】:2017-06-15 05:17:01 【问题描述】:我正在使用以下代码...
openPhoneDialler(mobile)
let url = 'tel:' + mobile;
Linking.canOpenURL(url).then(supported =>
if (!supported)
throw 'Cant open phone dialler';
else
return Linking.openURL(url);
).catch(err =>
Alert.alert('Error','Error occurred',[text: 'OK', onPress: () => ])
);
我在没有 SIM 卡功能(仅限 Wifi)的 iPad 上进行测试,canOpenURL 被解析并调用 Linking.openURL(url) 显示带有手机号码的警报和两个选项“取消”和“呼叫” .当我按下“呼叫”时,警报会关闭,并且没有任何预期发生,因为它是只有 Wifi 的 iPad。
但是当我按下“取消”时,应用程序崩溃并显示以下错误屏幕
JSON value '
code = EUNSPECIFIED;
domain = RCTErrorDomain;
framesToPop = 1;
nativeStackios = (
"0 workforce_mobile 0x00000001000d4d00 RCTJSErrorFromCodeMessageAndNSError + 152",
"1 workforce_mobile 0x0000000100053e4c __41-[RCTModuleMethod processMethodSignature]_block_invoke_2.224 + 192",
"2 workforce_mobile 0x000000010015e2f0 -[RCTLinkingManager openURL:resolve:reject:] + 352",
"3 CoreFoundation 0x000000018164ce80 <redacted> + 144",
"4 CoreFoundation 0x00000001815422b4 <redacted> + 292",
"5 CoreFoundation 0x0000000181546e7c <redacted> + 60",
"6 workforce_mobile 0x0000000100055098 -[RCTModuleMethod invokeWithBridge:module:arguments:] + 1704",
"7 workforce_mobile 0x00000001000aea54 -[RCTBatchedBridge callNativeModule:method:params:] + 568",
"8 workforce_mobile 0x00000001000addf4 __33-[RCTBatchedBridge handleBuffer:]_block_invoke.477 + 1276",
"9 libdispatch.dylib 0x00000001804fe9e0 <redacted> + 24",
"10 libdispatch.dylib 0x00000001804fe9a0 <redacted> + 16",
"11 libdispatch.dylib 0x000000018050cad4 <redacted> + 928",
"12 libdispatch.dylib 0x00000001805022cc <redacted> + 884",
"13 libdispatch.dylib 0x000000018050ea50 <redacted> + 540",
"14 libdispatch.dylib 0x000000018050e7d0 <redacted> + 124",
"15 libsystem_pthread.dylib 0x00000001807071d0 _pthread_wqthread + 1096",
"16 libsystem_pthread.dylib 0x0000000180706d7c start_wqthread + 4"
);
userInfo = "<null>";
' of type NSDictionary cannot be converted to NSString
注意:当您在没有任何按键的情况下将警报打开大约 10 秒时也会发生同样的崩溃。
测试于:iPad(仅限 Wifi 和物理设备)操作系统版本 10.3.1
这是 React-Native Linking Api 或上述代码中的错误。
【问题讨论】:
【参考方案1】:Linking.openUrl
返回一个承诺对象。通过按下 Cancel 按钮,您会导致 promise 被拒绝。只需添加一个捕获来吞下被拒绝的承诺。
Linking.openUrl().catch(() => null)
以下是相关文档:
https://facebook.github.io/react-native/docs/linking.html#openurl
【讨论】:
但我使用的是return Linking.openURL(url)
,它将承诺返回给外部捕获,它应该捕获正确。以上是关于将 Api 的 openURL 与 iPad 中的模式 tel 错误链接的主要内容,如果未能解决你的问题,请参考以下文章
作为UIApplication单例对象的方法 openURL方法的变化