Реагировать на родной Linking.getInitialUrl на Android называется всегда - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть приложение React-Native со следующим кодом (здесь App.js, точка входа в приложение), которое управляет глубокими ссылками на Android.

Linking.getInitialURL().then((deepLinkUrl) => {
  if (deepLinkUrl) {
    manageDeepLink(deepLinkUrl);
  } else {
    Navigation.startSingleScreenApp('rootScreen');
  }
});

Проблема здесь в том, что getInitialURL вызывается каждый раз, когда я запускаю свое приложение, либо из глубокой ссылки, либо из обычного режима, и каждый раз, когда оно содержит deepLinkUrl пустой параметр. Я зарегистрировался в AndroidManifest мои намерения следующим образом:

<application
    android:name=".MainApplication"
    android:allowBackup="true"
    android:launchMode="singleTask"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:windowSoftInputMode="adjustResize">
        <!-- deeplink -->
        <intent-filter android:label="@string/app_name">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="myapp" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

UPDATE Я использую встроенную навигацию для регистрации экранов, если это может быть полезно.

1 Ответ

0 голосов
/ 27 мая 2019

Кажется, что это не сработает, если вы зарегистрируете слушателя слишком рано в жизненном цикле приложения (например, непосредственно в каком-то файле .js, поэтому оно выполняется при загрузке приложения).

Если переместить его в componentDidMount() на корневом компоненте, все работает нормально.

    componentDidMount() {
        Linking.addEventListener('url', event => {
            console.warn('URL', event.url)
        })

        Linking.getInitialURL().then(url => {
            console.warn('INITIAL', url)
        })
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...