React Native深层链接应用程序从后台打开

时间:2018-02-09 19:47:26

标签: javascript react-native react-native-ios

我启用了深层链接,当应用程序打开时,一切都很有效。当我使用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,非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分: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文件中使用此代码。

答案 1 :(得分:0)

即使应用程序在 background 中,深层链接也按预期工作。请检查以下规格。

<块引用>

节点版本:v12.18.x 或更大 NPM 版本:v6.14.x 或更大 反应原生cli:2.0.1 react-native : 0.63.x OR 更大

请检查您是否在 AppDelegate.m 中添加了以下行。

<块引用>

#import

它必须添加到 #ifdef FB_SONARKIT_ENABLED 行上方。在此行下方添加它会导致在存档以供发布时构建失败。

请检查您是否在负责深层链接的 AppDelegate.m 中添加了以下代码。

<块引用>

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 选项:(NSDictionary *)options { 返回 [RCTLinkingManager application:application openURL:url options:options]; }

它适用于应用冷启动,但如果您的应用在 background 中,它将不起作用。为此,您需要在 AppDelegate.m

中添加以下代码 <块引用>

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restoreHandler:(nonnull void (^)(NSArray *_Nullable))restorationHandler { 返回 [RCTLinkingManager 应用程序:应用程序 继续用户活动:用户活动 恢复处理程序:恢复处理程序]; }

无论您的 AppState 如何,这都应该有效:active **OR** background

这符合我的预期!试试看。这绝对是可行的。

提前致谢!