为什么IOS和Android之间的Linking.getInitialUrl和addEventListener结果不同?

时间:2018-11-23 07:52:11

标签: react-native react-native-linking

我尝试发送网址以启动应用。

我已经设置了链接环境。

在android中,我在AndroidManifest.xml中设置了代码:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="mychat" android:host="mychat" />
</intent-filter>

在IOS中,我在AppDelegate.m中设置代码:

// Add this above the `@end`:
// iOS 9.x or newer
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
  return [RCTLinkingManager application:application openURL:url options:options];
}

并设置URL类型: enter image description here

在我的关于链接的React Native代码中:

  componentDidMount () {
    Linking.getInitialURL().then(url => {
      if (url) {
        console.log('Initial url is:', url);
      }
    }).catch(err => console.log('error is:', err));

    Linking.addEventListener('url', this._handleOpenURL);
  }

  componentWillUnmount() {
    Linking.removeEventListener('url', this._handleOpenURL);
  }

  _handleOpenURL(event) {
    console.log(event.url);
  }

IOS上的情况

我键入命令xcrun simctl openurl booted mychat://chat

获取的结果是来自mychat://chat方法的_handleOpenUrl

Android上的情况

我键入命令adb shell am start -W -a android.intent.action.VIEW -d "mychat://mychat/chat" com.testan3

得到的结果是Initial url is: mychat://mychat/chat的{​​{1}}

那么为什么Linking.getInitialURL()仅在Android上有效,而Linking.getInitialURL()仅在IOS上有效?

我不知道为什么会有所不同。任何帮助将不胜感激。

0 个答案:

没有答案