首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态链接通过扫描二维码打开应用程序,然后不会导航到不同的屏幕

动态链接通过扫描二维码打开应用程序,然后不会导航到不同的屏幕
EN

Stack Overflow用户
提问于 2021-10-15 15:24:10
回答 1查看 374关注 0票数 0

我的应用程序是使用React Native创建的,需要使用默认的相机应用程序扫描二维码,然后在应用程序中打开特定的屏幕,为了实现这一点,我还使用了React Native Firebase库来设置Firebase动态链接。

设置非常简单,一个使用Firebase提供的域的动态链接,该链接还包含url格式的https://example.page.link/abc-xyz深层链接。

在应用程序扫描QR之后,它使用深度链接url来提取abc-xyz部分并导航到不同的屏幕,这是我的实现。

代码语言:javascript
复制
// App.js
const handleDynamicLink = link => {
  const linkCheck = new RegExp('^https://example.page.link/.*$');
  let title;

  if (linkCheck.test(link.url)) {
    title = link.url.substring(link.url.lastIndexOf('/') + 1).split('-');

    RootNavigation.navigate(Screens.offer, { title: title });
  }
};

...

React.useEffect(() => {
  // Handler for background/quit events
  dynamicLinks().getInitialLink().then(link => {
    handleDynamicLink(link);
  });
  
  // Handler for foreground events
  const unsubscribe = dynamicLinks().onLink(handleDynamicLink);
  return () => unsubscribe();
}, []);

// RootNavigation.js
import * as React from 'react';

export const navigationRef = React.createRef();

export function navigate(name, params) {
  navigationRef.current?.navigate(name, params);
}

所有必要的设置都已经为iOS和安卓配置,通过扫描二维码在安卓设备上进行测试,它可以识别链接并导航到预期的屏幕,但不适用于iOS,即使它理解链接并且它只打开初始屏幕然后停止。

奇怪的是,如果我直接在设备浏览器中打开链接,它将打开预览页面,然后如果我单击“打开”按钮,它将打开应用程序并导航到目标屏幕。

我想知道这是否与iOS原生端中的导航内容有关?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-16 11:22:09

原来我需要为iOS更新AppDelegate.m并添加链接处理程序。

AppDelegate.m中的@end行上添加了下面的代码。

代码语言:javascript
复制
// AppDelegate.m

- (BOOL)application:(UIApplication *)application
   openURL:(NSURL *)url
   options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
  return [RCTLinkingManager application:application openURL:url options:options];
}

- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
 restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
{
 return [RCTLinkingManager application:application
                  continueUserActivity:userActivity
                    restorationHandler:restorationHandler];
}

当应用程序处于前台状态或已打开时进行处理。

代码语言:javascript
复制
// App.js

if (Platform.OS === 'ios') {
  Linking.addEventListener('url', handleDynamicLink);
}

应用程序完全关闭/动态链接启动时的处理。

代码语言:javascript
复制
// App.js

if (Platform.OS === 'ios') {
  Linking.getInitialURL()
    .then(link => {
      handleDynamicLink({ url: link });
    })
    .catch(error => {
      // Error handling
    });
} else {
  // This part for Android
  dynamicLinks().getInitialLink().then(link => {
    handleDynamicLink(link);
  });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69587088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档