我有一个适用于Android和iOS的flutter应用程序。该应用程序支持通用链接。当用户点击通过电子邮件收到的帐户激活链接时,它应该会打开该应用程序,该链接看起来像这样:https://my-domain.com/auth/create-password?token=authtoken
。在模拟器上一切都运行得很完美。如果用户从邮件或笔记应用点击链接,它在物理设备上也能正常工作。但是,当从safari或chrome浏览器点击链接时,链接会在该浏览器中打开,而不是在我的应用中打开。
我的aasa文件是从https://my-domain.com/.well-known/apple-app-site-association
提供的,看起来像这样:
{
"applinks": {
"details": [
{
"appIDs": [
"my_team_id.com.mydomain.app.name"
],
"components": [
{
"/": "/auth/create-password*",
"comment": "Password creation"
}
]
}
]
}
}
我已将关联的域授权添加到我的应用,Runner.entitlements
文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:my-domain.com</string>
</array>
</dict>
</plist>
在我的Info.plist
中也有这一行:
<key>FlutterDeepLinkingEnabled</key>
<true/>
当从浏览器激活时,通用链接是否可以正常工作?我也找不到任何可靠的信息。
1条答案
按热度按时间jq6vz3qz1#
从浏览器激活时,通用链接应正常工作。The documentation声明:
通过通用链接,用户在Safari和WKWebView中单击指向您网站的链接时,即可打开您的应用程序
但是,也有一些注意事项。首先,如果应用使用了文档中描述的某些方法,那么该链接将不会在应用中打开。文档中指出:
如果您的应用使用上述方法之一打开网站的通用链接,则该链接不会在您的应用中打开。
您可以参考文档页面上的方法列表,但在您的上下文中最重要的方法是
open(_:options:completionHandler:)
这很可能不是你的情况。
第二个警告是,如果你和通用链接在同一个域名上(可能是浏览你的网站),并从那里点击一个链接,通用链接将不会被触发。
当用户在Safari中浏览您的网站并点击同一域中的通用链接时,系统将在Safari中打开该链接,并考虑用户最有可能在浏览器中继续的意图。如果用户点击不同域中的通用链接,系统将在您的应用中打开该链接。
您可以很容易地确定这是否是导致您的案例出现问题的原因。
最后,如果你打开了一个通用链接,系统会记住你的行为,系统会启动你的应用程序,然后你使用状态栏中的"返回野生动物园"按钮,那么下次系统不会触发该通用链接。
这在the old documentation中提到过,但我认为它仍然是相关和准确的。(旧的)文档声明:
当用户点击你处理的通用链接时,iOS还会检查用户最近的选择,以确定是打开你的应用还是打开你的网站。例如,点击通用链接打开你的应用的用户以后可以选择通过点击状态栏中的面包屑按钮在Safari中打开你的网站。用户做出此选择后,iOS会继续在Safari中打开您的网站,直到用户选择通过轻按网页上智能应用程序横幅中的"打开"来打开您的应用程序。
希望这对你有帮助。