有没有办法在不分离的情况下将 Expo 应用程序与 firebase 动态链接集成?

Is there a way to integrate an Expo app with firebase dynamic links without detaching?

有没有办法在不分离的情况下将 Expo 应用程序与 firebase 动态链接集成。

如果您需要即时创建 新的动态 link,您可以使用 REST API 来完成。在更可能的情况下,您只需要您的应用程序 open Firebase 的动态 links,除了配置您的 Expo 应用程序以处理通用links(即:深度 links 使用 http/https)。

清单是这样的:

1。配置您的 app.json

对于 Android,将 intentFilters 属性 添加到您的 android 属性:

"android": {
  "intentFilters": [
    {
      "action": "VIEW",
      "data": [
        {
          "scheme": "https",
          "host": "<your-domain>",
          "pathPrefix": "/"
        },
      ],
      "category": [
        "BROWSABLE",
        "DEFAULT"
      ]
    }
  }
]

对于 iOS,将 associatedDomains 属性 添加到 ios:

"ios": {
  "associatedDomains": ["applinks:<your-domain>"]
}

2。配置您的域以允许来自它的 links 由应用程序处理

如果您从特定位置提供配置文件,

Android 和 iOS 将允许您的应用从您的域打开 links:

Android: https://<your-domain>/.well-known/assetlinks.json

iOS: https://<your-domain>/.well-known/apple-app-site-association

assetlinks.json 看起来像这样:

[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "<android-package-name>",
    "sha256_cert_fingerprints":
    ["<your-sha256-certificate-fingerprints>"]
  }
}]

apple-app-site-association 是这样的:

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "<your-team-id>.<ios-bundle-identifier>",
                "paths": [ "*" ]
            }
        ]
    }
}

您可以阅读有关这些文件的更多信息here and here

要获取应用程序签名证书的 SHA256 指纹,您可以使用密钥工具:

keytool -list -v -keystore <your-key-file>

输入密钥库密码后,它会打印出许多密钥库信息,包括 SHA256 指纹。

如果您的网站托管在 Firebase 上,那么如果您在 Firebase 的项目上创建应用程序,则 assetlinks.jsonapple-app-site-association 都可以自动生成。否则,只需将这些文件放在您域的根目录下即可。

3。创建 Firebase 动态 link

我认为这一步大部分是不言自明的,但只是一些注意事项:

  1. 设置您的短片URL link:最后您将/发送给您的用户
  2. 设置您的动态 Link:在这里定义您的 deelink(您希望您的应用程序处理的 link)
  3. 定义 iOS 的 link 行为:您很可能想从列表中单击 'Open the deep link in your iOS App' 和 select 您的应用程序(如果您还没有,为项目中的每个平台创建一个应用程序)
  4. 为 Android 定义 link 行为:与之前相同,但比 select
  5. 多了几个选项
  6. 配置(或不配置)活动跟踪,您就完成了。

请记住,您始终应该通过单击而不是直接在浏览器中输入来测试您的深度links。例如,您可以在 WhatsApp 上将 link 发送给自己或放置一些笔记应用程序。

其他可能有用的资源:

除了佩德罗·安德拉德的指示外:

1.) Firebase 需要您的 app > 项目设置 下的以下详细信息才能使动态链接正常工作。

  • Android:SHA 256(应用程序签名密钥证书指纹)- 这可以通过 play store > your app > App Integrity > SHA 256

    检索
  • iOS:App ID前缀(团队ID):developer.apple.com > Certificates, Identifiers & Profiles > your app id > App ID Prefix

令人惊讶的是,这些在文档中几乎没有提到,但在调试预览链接导致的谷歌搜索错误时确实出现在 Whosebug 结果和其他答案中:

Android app '<bundle id>' lacks SHA256. AppLinks is not enabled for the app. Learn more.
iOS app '<bundle id>' lacks App ID Prefix. UniversalLinks is not enabled for the app. Learn more.

您可以通过将 ?d=1 添加到您的动态链接来查看调试预览链接。

https://firebase.google.com/docs/dynamic-links/debug

2.) 即使您使用 firebase 为您的动态链接提供的 page.link 样式域,您的 associatedDomain/intentFilter 域在 app.json 应该仍然是您的实际域

即,如果您要生成 my-app.page.link 短链接,即指向 my-app.com 的动态链接,您应该在 app.json

中使用 my-app.com

Pedro Andrade 的解决方案有效!部分...

解释:

  1. 您必须不要在 intentFilters 和 associatedDomains 中添加您的动态 link 域,因为它会使应用程序直接在应用程序中打开 link,因此,动态 link 未被处理,您无权访问动态 link.
  2. 生成的 link
  3. 部分原因在于:动态 link 需要在应用程序中打开之前由浏览器(chrome 或 safari)打开。

示例:在浏览器中打开 "<your-domain>.page.link/XLSj",浏览器将直接生成 link: "<your-domain>.com/params/54" 到配置的深度 link.

我不知道在托管工作流中通过 expo 'read' 动态 link 的任何其他方式。