我想在具有自定义域的iOS(Flutter)应用中使用Firebase电子邮件链接身份验证:
该应用程序请求Firebase Auth后端向用户发送电子邮件。 -有效
用户单击电子邮件中的链接,然后带回到应用程序。 -有效
该应用处理该链接的有效负载以执行登录。-不起作用
Firebase动态链接通常可以正常工作,但特定Firebase自动生成的电子邮件中的链接却无法正常工作。从技术上讲,该应用程序处于前台状态,但未触发Firebase动态链接onLink
回调。我将其追踪到电子邮件的链接URL中缺少的一个小斜杠:
https://link.mydomain.com?link=https://app.mydomain.com/__/auth/action?apiKey=... (not working)
https://link.mydomain.com/?link=https://app.mydomain.com/__/auth/action?apiKey=... (works)
-------------------------^
要解决此问题,我尝试将路径后缀添加到我的域中,但这得到了相同的结果:
https://link.mydomain.com/app?link=https://app.mydomain.com/__/auth/action?apiKey=... (not working)
https://link.mydomain.com/app/?link=https://app.mydomain.com/__/auth/action?apiKey=... (works)
-----------------------------^
造成这种差异的最糟糕的部分是,如果您在iOS上复制该链接或长按该链接以查看预览,则斜杠只会在正确的位置被静默添加!您可以将链接粘贴到notes应用程序,单击它,然后它就可以使用!
只有在查看电子邮件的源代码时,您才能看到它实际上不存在:
请求链接时,我呼叫了FirebaseAuth.instance.sendSignInWithEmailLink
,并设置了以下参数:
url: 'https://app.mydomain.com',
dynamicLinkDomain: 'link.mydomain.com',
dynamicLinkDomain
参数不接受协议或路径。
有人知道如何...
或
onLink
回调对没有斜杠的单击链接做出反应吗?供参考
我的Info.plist包含以下密钥:
<key>FirebaseDynamicLinksCustomDomains</key>
<array>
<string>https://link.mydomain.com</string>
</array>
我的权利文件包含以下密钥:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:link.mydomain.com</string>
</array>
apple-app-site-association(https://link.mydomain.com/apple-app-site-association):
{
"applinks": {
"apps": [],
"details": [{
"appID": "XYZ.com.mydomain.app",
"paths": [
"NOT /_/*",
"/*"
]
}]
}
}
答案 0 :(得分:3)
带有自定义域的链接在 Apple Mail 中运行良好,但在其他电子邮件客户端中不起作用。
作为临时解决方案,您可以使用 Google 提供的域(例如 projectname.page.link)来生成登录链接。
您可以跟踪它here。
答案 1 :(得分:1)
在调试了Firebase Dynamic Links的iOS实现之后,事实证明丢失的斜杠是明确的required in code(尽管我不确定为什么)。它在电子邮件链接中的缺失似乎是一个错误,应该在Firebase后端中进行修复。我对此提交了一个错误报告。 Firebase控制台没有选项来配置要用于自动生成的登录链接的动态链接域(而不是从已配置域的列表中首先获取,但是以某种方式没有路径),因此我希望将来可以对其进行配置。
我只是更改了code(在我的Flutter项目中它位于Pods/FirebaseDynamicLinks/FIRDynamicLinks.m
中),并删除了斜杠的校验。但是我必须在更新依赖项时重复一遍,而且我不知道为什么检查显式存在,否则可能导致其他问题。
将链接复制到浏览器的地址栏中,并添加&d=1
以获取调试视图。它在图表上方的大红色框中显示错误-如果有的话。
将这两行临时添加到didFinishLaunchingWithOptions
中的AppDelegate.m
中:
[FIRApp configure];
[FIRDynamicLinks performDiagnosticsWithCompletion:nil];
(您可能必须@import Firebase;
)
在Xcode中运行项目,以在调试控制台中查看如下报告:
---- Firebase Dynamic Links diagnostic output start ----
Firebase Dynamic Links framework version 4.0.8
System information: OS iOS, OS version 14.0.1, model iPhone
Current date 2020-10-02 05:02:39 +0000
Device locale en-US (raw en_US), timezone Europe/Berlin
Specified custom URL scheme is com.domain and Info.plist contains such scheme in CFBundleURLTypes key.
AppID Prefix: XXXXXXXX, Team ID: XXXXXXXX, AppId Prefix equal to Team ID: YES
performDiagnostic completed successfully! No errors found.
---- Firebase Dynamic Links diagnostic output end ----
答案 2 :(得分:0)
dynamicLinkDomain: 'link.mydomain.com',
url: 'https://app.mydomain.com',
dynamicLinkDomain: 'link.mydomain.com'
添加dynamicLinkDomain: 'link.mydomain.com'