【发布时间】:2020-06-16 18:17:01
【问题描述】:
有没有办法在不分离的情况下将 Expo 应用与 Firebase 动态链接集成。
【问题讨论】:
-
任何尝试创建通用链接的人 - germavinsmoke.hashnode.dev/…
标签: firebase react-native expo firebase-dynamic-links
有没有办法在不分离的情况下将 Expo 应用与 Firebase 动态链接集成。
【问题讨论】:
标签: firebase react-native expo firebase-dynamic-links
如果您需要动态创建新的动态链接,您可以使用REST API 来完成。在更可能的情况下,您只需要您的应用打开 Firebase 的动态链接,除了配置您的 Expo 应用来处理通用链接(即:使用 http/ 的深层链接)之外,您不需要做任何事情https)。
清单是这样的:
对于 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>"]
}
如果您从特定位置提供配置文件,Android 和 iOS 将允许您的应用从您的域打开链接:
安卓: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": [ "*" ]
}
]
}
}
要获取应用签名证书的 SHA256 指纹,您可以使用 keytool:
keytool -list -v -keystore <your-key-file>
在您输入密钥库密码后,它将打印许多密钥库信息,包括 SHA256 指纹。
如果您的网站托管在 Firebase 上,如果您在 Firebase 的项目中创建应用程序,则可以自动生成 assetlinks.json 和 apple-app-site-association。否则,只需将这些文件放在域的根目录中即可。
我认为这一步主要是不言自明的,但只是一些注意事项:
请记住,您始终应该通过点击而不是直接在浏览器上输入来测试您的深层链接。例如,您可以在 WhatsApp 上将链接发送给自己或放在一些笔记应用程序上。
其他可能有用的资源:
【讨论】:
除了佩德罗·安德拉德的指示:
1.) Firebase 需要在您的应用>项目设置下提供以下详细信息才能使动态链接正常工作。
Android:SHA 256(应用签名密钥证书指纹)- 可以通过play store > your app > App Integrity > SHA 256检索
iOS:应用 ID 前缀(团队 ID):developer.apple.com > Certificates, Identifiers & Profiles > your app id > App ID Prefix
令人惊讶的是,文档中几乎没有提到这些,但在使用谷歌搜索调试预览链接导致的错误时,确实会出现在 stackoverflow 结果和其他答案中:
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 样式域,app.json 中的 associatedDomain/intentFilter 域仍然应该是您的实际域
即,如果您正在生成 my-app.page.link 短链接,它们是指向 my-app.com 的动态链接,您应该在 app.json 中使用 my-app.com
【讨论】:
mydomain.com 还是将处理链接的子域,即links.mydomain.com?就我而言,我的网站托管在其他地方,我想保持这种状态。为了处理动态链接,我添加了一个子域,即托管在 Firebase 上的 links。所以,我不确定我需要将哪个用于域。目前,我不断收到 401 错误,我正在尝试查看域是否可能是问题的一部分。
Pedro Andrade 的解决方案有效!部分...
解释:
示例:在浏览器中打开"<your-domain>.page.link/XLSj",浏览器将指向生成的链接:"<your-domain>.com/params/54" 指向配置的深层链接。
我不知道在托管工作流中通过 expo“读取”动态链接的任何其他方式。
【讨论】: