有没有办法在不分离的情况下将 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.json
和 apple-app-site-association
都可以自动生成。否则,只需将这些文件放在您域的根目录下即可。
3。创建 Firebase 动态 link
我认为这一步大部分是不言自明的,但只是一些注意事项:
- 设置您的短片URL link:最后您将/发送给您的用户
- 设置您的动态 Link:在这里定义您的 deelink(您希望您的应用程序处理的 link)
- 定义 iOS 的 link 行为:您很可能想从列表中单击 'Open the deep link in your iOS App' 和 select 您的应用程序(如果您还没有,为项目中的每个平台创建一个应用程序)
- 为 Android 定义 link 行为:与之前相同,但比 select
多了几个选项
- 配置(或不配置)活动跟踪,您就完成了。
请记住,您始终应该通过单击而不是直接在浏览器中输入来测试您的深度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 的解决方案有效!部分...
解释:
- 您必须不要在 intentFilters 和 associatedDomains 中添加您的动态 link 域,因为它会使应用程序直接在应用程序中打开 link,因此,动态 link 未被处理,您无权访问动态 link.
生成的 link
- 部分原因在于:动态 link 需要在应用程序中打开之前由浏览器(chrome 或 safari)打开。
示例:在浏览器中打开 "<your-domain>.page.link/XLSj"
,浏览器将直接生成 link: "<your-domain>.com/params/54"
到配置的深度 link.
我不知道在托管工作流中通过 expo 'read' 动态 link 的任何其他方式。
有没有办法在不分离的情况下将 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.json
和 apple-app-site-association
都可以自动生成。否则,只需将这些文件放在您域的根目录下即可。
3。创建 Firebase 动态 link
我认为这一步大部分是不言自明的,但只是一些注意事项:
- 设置您的短片URL link:最后您将/发送给您的用户
- 设置您的动态 Link:在这里定义您的 deelink(您希望您的应用程序处理的 link)
- 定义 iOS 的 link 行为:您很可能想从列表中单击 'Open the deep link in your iOS App' 和 select 您的应用程序(如果您还没有,为项目中的每个平台创建一个应用程序)
- 为 Android 定义 link 行为:与之前相同,但比 select 多了几个选项
- 配置(或不配置)活动跟踪,您就完成了。
请记住,您始终应该通过单击而不是直接在浏览器中输入来测试您的深度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 的解决方案有效!部分...
解释:
- 您必须不要在 intentFilters 和 associatedDomains 中添加您的动态 link 域,因为它会使应用程序直接在应用程序中打开 link,因此,动态 link 未被处理,您无权访问动态 link. 生成的 link
- 部分原因在于:动态 link 需要在应用程序中打开之前由浏览器(chrome 或 safari)打开。
示例:在浏览器中打开 "<your-domain>.page.link/XLSj"
,浏览器将直接生成 link: "<your-domain>.com/params/54"
到配置的深度 link.
我不知道在托管工作流中通过 expo 'read' 动态 link 的任何其他方式。