簡體   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