应用程序在后台运行时进行本机深度链接
Posted
技术标签:
【中文标题】应用程序在后台运行时进行本机深度链接【英文标题】:react-native deep linking while app is running in the background 【发布时间】:2018-01-11 09:49:12 【问题描述】:我有我的 android 应用程序(基于 react-native)和深层链接,当我第一次运行它时应用程序没有在后台运行时效果很好,但是当应用程序在后台运行时我点击了深层- 链接它甚至没有打开应用程序......我什至不确定从哪里开始这个错误我在生命周期事件中尝试了几个console.logs
,但它们甚至没有运行。
请指导我应该在哪里查找问题以及如何解决它,谢谢!
【问题讨论】:
我面临同样的问题。您找到解决方法了吗? 你是否在 componentWillUnmount() 中添加了 Linking.removeEventListener("url", this.handleOpenURL), 函数?您可以删除 ti 并重试吗? 我面临同样的问题,您找到解决方案了吗? 请查看以下链接以获得简单的解决方案; ***.com/questions/62693760/… 【参考方案1】:即使应用程序位于 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
。
这对我很有效!试试看。这绝对应该有效。
提前致谢!
【讨论】:
谢谢。application continueUserActivity
为 ios 成功了【参考方案2】:
componentDidMount()
Linking.addEventListener('url', this._handleDeepLinkingURL);
this._handleDeepLinkingURL(); /* Invoking method manually on launching app very first time */
,
componentWillUnmount()
Linking.removeEventListener('url', this._handleDeepLinkingURL);
,
_handleDeepLinkingURL(event)
/*
console.log(event.url);
event.url will hold the url of the app if the app launched when its running in background
event param will be undefined when the app launched from kill state or first time
*/
Linking.getInitialURL()
.then(url =>
if (url && url.indexOf("?params=") !== -1)
const paramsString = url.substr(
url.indexOf("?params=") + 8
);
alert('paramsString is : ' + paramsString);
)
【讨论】:
请尝试添加一些关于您的代码的作用以及它如何解决问题的细节。它将在未来对其他人有所帮助。 请查看以下链接以获得简单的解决方案; ***.com/questions/62693760/…以上是关于应用程序在后台运行时进行本机深度链接的主要内容,如果未能解决你的问题,请参考以下文章
将移动浏览器深度链接到本机应用程序 - 未安装应用程序时的 Chrome 问题