繁体   English   中英

Firebase 动态链接未导航到 iOS 上的深层链接

[英]Firebase Dynamic Links doesn't navigate to deep link on iOS

托管工作流中使用Firebase 动态链接Expo 应用程序指向 Android 上应用程序中的正确深层链接,但在 iOS 上仅在上次打开的任何页面或主页中打开应用程序。

app.config.js

ios: {
    associatedDomains: [
      'applinks:*.myapp.web.app',
      'applinks:myapp.web.app',
      'applinks:*.myapp.page.link',
      'applinks:myapp.page.link',
    ],
},

AppNavigation.js

  const linking = {
    prefixes: [
      prefix,
      'https://myapp.web.app',
      'https://*.myapp.web.app',
    ],

存储在 myapp.web.app 上的 apple-app-site-association 文件

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "1234567890.com.my.app",
                "paths": [ "*" ]
            } 
        ]
    }
}

动态链接是使用 REST API 和以下负载生成的:

    const payload = {
      dynamicLinkInfo: {
        domainUriPrefix: 'https://myapp.page.link',
        link: `https://myapp.web.app/${deepLink}`,
        androidInfo: {
          androidPackageName: com.my.app,
        },
        iosInfo: {
          iosBundleId: com.my.app,
          iosAppStoreId: 1234567890,
        },

生成的动态链接打开应用程序并按预期指向 Android 上的${deepLink} ,但不是 iOS 上的。这已在使用 EAS 构建的应用程序中进行了测试。

最后自己解决了这个问题。 动态链接在 Android 上自动解析(从短链接转换为完整链接),但在 iOS 上必须使用dynamicLinks().resolveLink(url);

解析后,链接会被 React Native Navigation 获取,并像普通的深层链接一样工作。

动态链接的完整代码:

  const linking = {
    prefixes: [
      'https://myapp.page.link',
      'https://myapp.web.app',
    ],

    async getInitialURL() {
      // If the app was opened with a Firebase Dynamic Link
      const dynamicLink = await dynamicLinks().getInitialLink();
      if (dynamicLink) {
        const { url } = dynamicLink;
        const resolvedLink = await dynamicLinks().resolveLink(url);
        return resolvedLink.url;
      }

      // If the app was opened with any other link (sometimes the Dynamic Link also ends up here, so it needs to be resolved
      const initialUrl = await Linking.getInitialURL();
      if (initialUrl) {
        const resolvedLink = await dynamicLinks().resolveLink(initialUrl);
        return (resolvedLink) ? resolvedLink.url : initialUrl;
      }
    },

    subscribe(listener) {
      const handleDynamicLink = (dynamicLink) => {
        listener(dynamicLink.url);
      };

      // Listen to incoming links from deep linking
      const unsubscribeToDynamicLinks = dynamicLinks().onLink(handleDynamicLink);

      return () => {
        // Clean up the event listeners
        unsubscribeToDynamicLinks();
      };
    },
  };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM