从后台打开 React Native 深层链接应用程序
Posted
技术标签:
【中文标题】从后台打开 React Native 深层链接应用程序【英文标题】:React Native deep link app opening from background 【发布时间】:2018-02-09 19:47:26 【问题描述】:我启用了深度链接,当应用程序打开时一切正常。当我使用 url moderatorapp://hello 从关闭状态打开应用程序时,它会记录正确的 url,但是当应用程序在从后台状态打开时深度链接时它不起作用。我的代码如下:
componentDidMount()
// Storage.clear();
Storage.getItem('data_moderator')
.then(_data =>
if (_data && _data.tokens)
this.autoLogin(_data.tokens);
else
Actions.loginForm();
);
Linking.getInitialURL()
.then(url =>
console.log('Initial Url then ', url);
if (url)
console.log('Initial Url ', url);
)
.catch(error => console.log(error));
Linking.addEventListener('url', this.handleOpenURL);
这显然是因为此时没有调用 componentDidMount 方法。
我尝试过的:
我试图将链接代码包装在一个事件中,该事件检测到应用程序进入活动状态并且它不起作用,它记录了与应用程序关闭时的初始尝试相同的 URL。当我尝试使用 url moderatorapp://goodbye 从后台状态深度链接到应用程序时,它会记录 moderatorapp://hello。所以它不知何故没有更新。
AppState.addEventListener('change', (state) =>
if (state === 'active')
console.log('state active');
Linking.getInitialURL()
.then(url =>
console.log('Initial Url then ', url);
if (url)
console.log('Initial Url ', url);
)
.catch(error => console.log(error));
if(state === 'background')
console.log('background');
);
我是 React Native 的新手,非常感谢任何帮助。
谢谢。
【问题讨论】:
【参考方案1】:https://facebook.github.io/react-native/docs/linking.html 具体:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
return [RCTLinkingManager application:application openURL:url options:options];
Apple 更改了用于链接的 api,因此如果您的目标是 ios 9 或更高版本,则需要在 AppDelegate.m 文件中使用此代码。
【讨论】:
谢谢。我想我应该为了他人的利益回答这个问题。我在 React Native 文档中找到了相同的信息。 facebook.github.io/react-native/docs/linking.html#getinitialurl @Aaron 感谢您的帮助!你拯救了我的一天。 getInitialURL() 确实是需要使用的。 如果您使用 expo,请参阅 github.com/expo/expo/issues/2063【参考方案2】:即使应用程序位于 background
中,深层链接也能按预期工作。请检查以下规格。
节点版本:v12.18.x 或更高 NPM 版本:v6.14.x 或更高版本 反应原生-cli:2.0.1 react-native : 0.63.x 或更大
请检查您是否在AppDelegate.m
中添加了以下行。
#import
必须在#ifdef FB_SONARKIT_ENABLED
行上方添加。在此行下方添加它会导致在存档发布时构建失败。
请检查您是否在负责深度链接的AppDelegate.m
中添加了以下代码。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 选项:(NSDictionary
*)选项 返回 [RCTLinkingManager 应用程序:应用程序 openURL:url 选项:选项];
它适用于应用程序冷启动,但如果您的应用程序位于background
中,它将不起作用。为此,您需要在AppDelegate.m
中添加以下代码
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restoreHandler:(nonnull void (^)(NSArray
*_Nullable))restorationHandler 返回 [RCTLinkingManager 应用程序:应用程序 继续用户活动:用户活动 恢复处理程序:恢复处理程序];
无论您的 AppState 是什么,这都应该有效:active **OR** background
。
这对我很有效!试试看。这绝对应该有效。
提前致谢!
【讨论】:
以上是关于从后台打开 React Native 深层链接应用程序的主要内容,如果未能解决你的问题,请参考以下文章
使用 react-native 在 iOs 上处理同一个应用程序的多个环境的深层链接
如何在 React Native 中分享社交网络上的深层链接
xml 使用Linker的React Native深层链接的AndroidManifest.xml
使用 React Native 在 Firebase 中使用动态链接设置带有查询参数的动态深层链接