【问题标题】:Linking Api's openURL with schema tel error in iPad将 Api 的 openURL 与 iPad 中的模式 tel 错误链接
【发布时间】: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 或上述代码中的错误。

【问题讨论】:

    标签: ipad react-native react-native-ios


    【解决方案1】:

    Linking.openUrl 返回一个承诺对象。通过按下 Cancel 按钮,您会导致 promise 被拒绝。只需添加一个捕获来吞下被拒绝的承诺。

    Linking.openUrl().catch(() =&gt; null)

    以下是相关文档:

    https://facebook.github.io/react-native/docs/linking.html#openurl

    【讨论】:

    • 但我使用的是return Linking.openURL(url),它将承诺返回给外部捕获,它应该捕获正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多