了解用于身份验证的 Firebase 动态链接中的状态
Understanding states in Firebase Dynamic links for Authentication
很抱歉,我在理解 Firebase Dynamic 时遇到了很多问题 links.
我的用例是:用户想从移动应用程序重置密码(或发送电子邮件验证)。
- 使用带有自定义处理程序的 Firebase 身份验证发出请求(自定义域:https://example.com/auth)
ActionCodeSettings
看起来像:
final ActionCodeSettings codeSettings = ActionCodeSettings(
url: 'https://links.example.com/auth?email=$email',
iOSBundleId: Constants.iosBundleID,
androidPackageName: Constants.androidBundleID,
androidInstallApp: true,
dynamicLinkDomain: "links.example.com",
);
- 用户点击他通过电子邮件收到的 link 并被重定向到网站(由 Firebase Hosting 托管在:example.com)
- 当用户完成重设密码后,我希望通过“启动”
continueUrl
将他重定向回移动应用程序。 continueUrl
: 'https://links.example.com/auth?email=$email'
但是这不起作用,所以我猜我在某处做错了。
- 在我的 iOS 配置中,我将
Associated Domains
添加为:applinks:links.example.com
.
在 Info.plist
文件中我添加了:
<key>FirebaseDynamicLinksCustomDomains</key>
<array>
<string>https://links.example.com/auth</string>
</array>
(也尝试过:<string>https://links.example.com</string>
)
- 在我的 Android 配置中,我已将此添加到我的
AndroidManifest.xml
:
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="links.example.com" android:scheme="https"/>
</intent-filter>
有趣的是,在 Android 完成上述步骤后(在智能手机的网站上),如果我启动 continueUrl
它会提示用户是重定向回应用程序还是停留在浏览器上打开 URL.
我当然在 Firebase Dynamic links 控制台中创建了一个子域:links.example.com
作为 URL 前缀。
这是我的问题:
continueUrl
是否应该重定向回应用程序?
- 在
ActionCodeSettings
continueUrl
上面描述的是否正确?我在文档中看到总是使用 example.com
作为 continueUrl
,但它会与用于托管的自定义域冲突吗?所以我将 links.example.com
作为 continueUrl
并且自定义 Firebase 身份验证处理程序是 example.com/auth
以确实重定向到我网站中的正确网页。
- 这种情况下的托管
firebase.json
配置是什么?
- 最后的 link 看起来像这样:
https://example.com/auth?mode=resetPassword&oobCode=T0qn8aj_p7TJBWyE5eUh7_7ZwIqwtJ7Q-i8LDf4QrIsAAAF_u6Bi6Q&apiKey=AIzaSyAzPqhZFKAyfQDeN4DGGjI9VCTEBe_mLc4&continueUrl=https%3A%2F%2Flinks.example.com%3Flink%3Dhttps%3A%2F%2Flinks.example.com%2Fauth%3Femail%253Dtestmail12%40gmail.com%26apn%3Dcom.example.android%26amv%26ibi%3Dcom.example.ios%26ifl%3Dhttps%3A%2F%2Flinks.example.com%2Fauth%3Femail%253Dtestmail12%40gmail.com&lang=fr
- 你看到有什么不对或遗漏的吗?操作完成后会阻止移动应用程序重定向的内容?
- 我应该如何处理
continueUrl
参数才能重定向到应用程序?它是在某个事件后自动完成的,还是开发人员应该编写代码来“推送”一个包含此 link 的新网页,它会自动看到这不是要在网页中处理的 link,从而重定向到移动应用程序?
非常感谢您对它如何工作的任何解释!
我终于明白这是怎么回事了:
continueUrl
必须是用于在移动应用程序中返回的那个,所以如果您使用:
url: 'https://links.example.com/auth?email=$email',
这意味着您必须在 firebase 控制台中创建一个 dynamic link
前缀 URL : https://links.example.com/auth
。
您还必须按照问题所述将其添加到您的 iOS Info.plist
文件中。
此外,当您使用自定义域时,您需要按照文档中的说明确保 URL 前缀和域不同,例如:
https://link.example.com/?link=https://example.com/my-resource
而不是:
https://example.com/?link=https://example.com/my-resource
这意味着通过使用https://links.example.com/auth
作为URL前缀,您需要使用另一个域来处理link。
就我而言,我是这样构建 url 的:
https://links.example.com/?link=https://redirect.example.com/auth
并添加 https://redirect.example.com/auth
作为 URL 前缀。
这可以防止 example.com
在托管级别和 links.example.com
之间的冲突使 link 域名和 Url 前缀相同。
此外,不要忘记在 Firebase 控制台的 Firebase 身份验证 Sign-In 方法中添加新的动态 links 域作为 whitelisted
域,否则您将获得 domain-denied
错误。
希望这会帮助其他人更好地理解它是如何工作的。
很抱歉,我在理解 Firebase Dynamic 时遇到了很多问题 links.
我的用例是:用户想从移动应用程序重置密码(或发送电子邮件验证)。
- 使用带有自定义处理程序的 Firebase 身份验证发出请求(自定义域:https://example.com/auth)
ActionCodeSettings
看起来像:
final ActionCodeSettings codeSettings = ActionCodeSettings(
url: 'https://links.example.com/auth?email=$email',
iOSBundleId: Constants.iosBundleID,
androidPackageName: Constants.androidBundleID,
androidInstallApp: true,
dynamicLinkDomain: "links.example.com",
);
- 用户点击他通过电子邮件收到的 link 并被重定向到网站(由 Firebase Hosting 托管在:example.com)
- 当用户完成重设密码后,我希望通过“启动”
continueUrl
将他重定向回移动应用程序。continueUrl
: 'https://links.example.com/auth?email=$email'
但是这不起作用,所以我猜我在某处做错了。
- 在我的 iOS 配置中,我将
Associated Domains
添加为:applinks:links.example.com
.
在Info.plist
文件中我添加了:
<key>FirebaseDynamicLinksCustomDomains</key>
<array>
<string>https://links.example.com/auth</string>
</array>
(也尝试过:<string>https://links.example.com</string>
)
- 在我的 Android 配置中,我已将此添加到我的
AndroidManifest.xml
:
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="links.example.com" android:scheme="https"/>
</intent-filter>
有趣的是,在 Android 完成上述步骤后(在智能手机的网站上),如果我启动 continueUrl
它会提示用户是重定向回应用程序还是停留在浏览器上打开 URL.
我当然在 Firebase Dynamic links 控制台中创建了一个子域:links.example.com
作为 URL 前缀。
这是我的问题:
continueUrl
是否应该重定向回应用程序?- 在
ActionCodeSettings
continueUrl
上面描述的是否正确?我在文档中看到总是使用example.com
作为continueUrl
,但它会与用于托管的自定义域冲突吗?所以我将links.example.com
作为continueUrl
并且自定义 Firebase 身份验证处理程序是example.com/auth
以确实重定向到我网站中的正确网页。 - 这种情况下的托管
firebase.json
配置是什么? - 最后的 link 看起来像这样:
https://example.com/auth?mode=resetPassword&oobCode=T0qn8aj_p7TJBWyE5eUh7_7ZwIqwtJ7Q-i8LDf4QrIsAAAF_u6Bi6Q&apiKey=AIzaSyAzPqhZFKAyfQDeN4DGGjI9VCTEBe_mLc4&continueUrl=https%3A%2F%2Flinks.example.com%3Flink%3Dhttps%3A%2F%2Flinks.example.com%2Fauth%3Femail%253Dtestmail12%40gmail.com%26apn%3Dcom.example.android%26amv%26ibi%3Dcom.example.ios%26ifl%3Dhttps%3A%2F%2Flinks.example.com%2Fauth%3Femail%253Dtestmail12%40gmail.com&lang=fr
- 你看到有什么不对或遗漏的吗?操作完成后会阻止移动应用程序重定向的内容?
- 我应该如何处理
continueUrl
参数才能重定向到应用程序?它是在某个事件后自动完成的,还是开发人员应该编写代码来“推送”一个包含此 link 的新网页,它会自动看到这不是要在网页中处理的 link,从而重定向到移动应用程序?
非常感谢您对它如何工作的任何解释!
我终于明白这是怎么回事了:
continueUrl
必须是用于在移动应用程序中返回的那个,所以如果您使用:
url: 'https://links.example.com/auth?email=$email',
这意味着您必须在 firebase 控制台中创建一个 dynamic link
前缀 URL : https://links.example.com/auth
。
您还必须按照问题所述将其添加到您的 iOS Info.plist
文件中。
此外,当您使用自定义域时,您需要按照文档中的说明确保 URL 前缀和域不同,例如:
https://link.example.com/?link=https://example.com/my-resource
而不是:
https://example.com/?link=https://example.com/my-resource
这意味着通过使用https://links.example.com/auth
作为URL前缀,您需要使用另一个域来处理link。
就我而言,我是这样构建 url 的:
https://links.example.com/?link=https://redirect.example.com/auth
并添加 https://redirect.example.com/auth
作为 URL 前缀。
这可以防止 example.com
在托管级别和 links.example.com
之间的冲突使 link 域名和 Url 前缀相同。
此外,不要忘记在 Firebase 控制台的 Firebase 身份验证 Sign-In 方法中添加新的动态 links 域作为 whitelisted
域,否则您将获得 domain-denied
错误。
希望这会帮助其他人更好地理解它是如何工作的。