在 Android 上反应原生 Linking.getInitialUrl 总是调用

Posted

技术标签:

【中文标题】在 Android 上反应原生 Linking.getInitialUrl 总是调用【英文标题】:React native Linking.getInitialUrl on Android called always 【发布时间】:2019-02-11 22:42:02 【问题描述】:

我有一个带有以下代码的 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>

更新 我正在使用 react-native 导航来注册屏幕,如果这有用的话。

【问题讨论】:

我也遇到了这个问题,你找到解决办法了吗? 你找到解决办法了吗? 【参考方案1】:

如果您在应用生命周期中过早注册监听器似乎不起作用(例如直接在某些 .js 文件中,因此在加载应用时执行)。

如果你把它移到根组件上的componentDidMount(),一切正常。

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

        Linking.getInitialURL().then(url => 
            console.warn('INITIAL', url)
        )
    

【讨论】:

【参考方案2】:

因为您在 AndroidManifest.xml 中添加了 android:launchMode="singleTask"。请修改为android:launchMode="singleTop",您的问题就解决了。

【讨论】:

以上是关于在 Android 上反应原生 Linking.getInitialUrl 总是调用的主要内容,如果未能解决你的问题,请参考以下文章

应用程序冻结在白色屏幕上,反应原生android apk

反应原生 - SQLite - Android

对原生地理位置做出反应,而不是在 android 模拟器上询问用户权限

在 localhost 反应原生 android 连接后端服务

在 Google Play 的独立版本上反应原生地图崩溃

自动填充 otp web 视图反应原生 android