React Native deep link 应用从后台打开
React Native deep link app opening from background
我启用了深度 linking,应用程序打开时一切正常。当我使用 url moderatorapp://hello 从关闭状态打开应用程序时,它会记录正确的 url,但是当应用程序在打开时处于深度 linked 时它不起作用从背景状态。我的代码如下:
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 从后台状态深入 link 应用程序时,它会记录 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 的新手,如有任何帮助,我们将不胜感激。
谢谢。
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 文件中添加此代码。
即使应用程序在 background
中,深层链接也按我的预期工作。请检查以下规格。
Node Version : v12.18.x OR Greater
NPM Version : v6.14.x OR Greater
react-native-cli : 2.0.1
react-native : 0.63.x OR Greater
请检查您是否在 AppDelegate.m
中添加了以下行。
#import <React/RCTLinkingManager.h>
必须添加到 #ifdef FB_SONARKIT_ENABLED
行上方。将其添加到此行下方将导致在存档以供发布时构建失败。
请检查您是否在 AppDelegate.m
中添加了以下代码,该代码负责深度链接。
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
return [RCTLinkingManager application:application openURL:url options:options];
}
它适用于应用程序冷启动,但如果您的应用程序处于 background
,则它将不起作用。为此,您需要在 AppDelegate.m
中添加以下代码
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id> *_Nullable))restorationHandler {
return [RCTLinkingManager application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}
无论您的 AppState 如何,这都应该有效:active **OR** background
。
这对我来说如预期的那样有效!试试看。这绝对有效。
提前致谢!
我启用了深度 linking,应用程序打开时一切正常。当我使用 url moderatorapp://hello 从关闭状态打开应用程序时,它会记录正确的 url,但是当应用程序在打开时处于深度 linked 时它不起作用从背景状态。我的代码如下:
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 从后台状态深入 link 应用程序时,它会记录 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 的新手,如有任何帮助,我们将不胜感激。
谢谢。
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 文件中添加此代码。
即使应用程序在 background
中,深层链接也按我的预期工作。请检查以下规格。
Node Version : v12.18.x OR Greater NPM Version : v6.14.x OR Greater react-native-cli : 2.0.1 react-native : 0.63.x OR Greater
请检查您是否在 AppDelegate.m
中添加了以下行。
#import <React/RCTLinkingManager.h>
必须添加到 #ifdef FB_SONARKIT_ENABLED
行上方。将其添加到此行下方将导致在存档以供发布时构建失败。
请检查您是否在 AppDelegate.m
中添加了以下代码,该代码负责深度链接。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { return [RCTLinkingManager application:application openURL:url options:options]; }
它适用于应用程序冷启动,但如果您的应用程序处于 background
,则它将不起作用。为此,您需要在 AppDelegate.m
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id> *_Nullable))restorationHandler { return [RCTLinkingManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; }
无论您的 AppState 如何,这都应该有效:active **OR** background
。
这对我来说如预期的那样有效!试试看。这绝对有效。
提前致谢!