在 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 模拟器上询问用户权限