单击链接后,Firebase电子邮件身份验证无法打开iOS应用

时间:2019-08-09 01:56:41

标签: ios firebase firebase-authentication

我在我的应用程序中使用Firebase身份验证(电子邮件,无密码),并尝试遵循these directions

其中有几个特别令人困惑的部分:

  1. 部分代码为actionCodeSettings.url = URL(string: "https://www.example.com")-此URL应该是什么?对于iOS应用程序,为什么我希望用户点击其iPhone上的链接并启动该应用程序,这为何如此?
  2. 它提到the App Store ID and the Apple Developer Team ID also need to be specified-如果我的应用程序不在应用商店中,而是仅通过TestFlight分发,该怎么办?
  3. 它对You will also need to configure your email action handler domain as an Associated Domain in your application capabilities. By default, the email action handler is hosted on a domain like the following example: APP_ID.firebaseapp.com说:APP_ID是什么,它与上一步中的Apple ID相同吗?什么是电子邮件操作处理程序域,如何添加一个?
  4. 我尝试将application:openURL:options:方法添加为seen in the example,但从未真正调用它。
  5. 该流程到底是什么样的?例如。在完美的实现中,是否需要启动Safari?我的应用应该能够处理哪些链接?
  6. 如何验证我是否正确实施了所有操作,并且不仅仅是重定向到我的应用/身份验证不正确?
  7. 当我使用GoogleSignIn时,必须在应用开始时调用signInSilently方法,以知道已经登录了哪个用户。这是一个异步方法,这意味着我可能需要显示一个微调器。此验证方法是否有类似要求?或者我怎么知道谁登录?

1 个答案:

答案 0 :(得分:0)

1。 actionCodeSettings.url

这必须是控制台>开发>身份验证>登录方法>授权域中列出的域。否则,您会收到未经授权的域错误。

这实际上是在确定用户点击桌面上的链接时发生的情况。例如。您可能需要将他们带到404页面,或一个解释如何在其iPhone上打开链接的页面。

如果没有其他可使用的内容,则可以随时获取该部分中列出的foo-xxxx.firebaseapp.com或foo-xxxx.web.app网址,这将显示“找不到网站”页面。 / p>

2。仅限TestFlight

这将起作用!您可以从iTunes Connect网站获取您的App ID。

3。电子邮件操作处理程序

不确定该步骤到底是什么。 APP_ID最有可能是指Firebase控制台中在步骤1中可以找到的foo-xxxx值。

但是,您可能不想使用建议的APP_ID.firebaseapp.com值。相反,您要遵循dynamic links instructions,并在Xcode中项目的设置下,将看到“功能”>“关联的域”选项卡。您将需要在其中添加applinks:your_dynamic_links_domain,看起来像applinks:foo.page.link

4。 application:openURL:options:没有被呼叫

启动您的应用https://foo.page.link openURL方法的通用链接(例如will never call)。相反,您需要实现continue user activity method,正如dynamic links instructions

中所述

5。正确的流量

如果正确实现所有内容,它将看起来像这样:

  1. 用户将收到一封电子邮件,其中包含格式为https://foo.page.link的链接。
  2. 点击链接后,该应用将打开。
  3. 在应用打开时,将调用application(:,continue:,restorationHandler:)方法,此时您应该调用Auth.auth().isSignIn(withEmailLink: link),然后最终调用Auth.auth().signIn(withEmail: email, link: link)

6。验证

尝试向自己发送电子邮件,然后点击登录链接。返回电子邮件,然后再次点击它,由于每个代码只能使用一次,因此它不起作用。

7。找出谁登录了

您应该能够找出通过同步方法Auth.auth().currentUser?.email登录的用户。