由于 Firebase 手机身份验证,App Store 被拒绝

Posted

技术标签:

【中文标题】由于 Firebase 手机身份验证,App Store 被拒绝【英文标题】:App Store rejection due to Firebase phone auth 【发布时间】:2017-07-14 20:30:01 【问题描述】:

我们的应用使用 Firebase 电话身份验证。由于需要推送,App Store 审核已拒绝该应用:

指南 4.5.4 - 设计 - Apple 网站和服务

我们注意到您的应用需要推送通知才能运行。

具体来说,我们注意到如果我们的设备上没有启用推送通知设置,我们在应用程序中输入我们的电话号码后会遇到错误消息。

接下来的步骤

推送通知必须是可选的,并且必须征得用户同意才能在应用内使用。

他们还附上了描述 Firebase 错误“需要为应用设置远程通知和后台获取 [...]”的屏幕截图

Firebase 文档指出,电话身份验证功能绝对需要 APNs 通知:https://firebase.google.com/docs/auth/ios/phone-auth

要使用电话号码身份验证,您的应用必须能够接收来自 Firebase 的 APNs 通知。当您首次在设备上使用用户的电话号码登录用户时,Firebase 身份验证会向设备发送静默推送通知,以验证电话号码登录请求是否来自您的应用。 (因此,无法在模拟器上使用电话号码登录。)

然而,App Store 审核指南指出,应用程序运行时必须不需要推送通知:https://developer.apple.com/app-store/review/guidelines/

4.5.4 推送通知不得用于应用运行,不得用于广告、促销或直接营销目的,也不得用于发送敏感的个人或机密信息。

用户需要先登录才能使用该应用程序(该应用程序是关于向您的客人发送数字GIF邀请并分享照片),这就是为什么应用程序基本上需要推送通知才能运行,如果登录方法是 Firebase 电话身份验证。

我们对该应用进行了很多测试,启用推送通知后,身份验证工作没有问题(在真实设备上,无论是在分发 Ad Hoc 构建的生产环境和开发构建的沙盒环境中)。

想想看,App Review 团队是如何禁用推送通知的?通知中心设置不会停止实际推送,只是不显示它们。 我们已经在关闭此设置的情况下进行了测试,firebase 电话身份验证工作正常,推送仍然按预期进行。

我对这个问题感到非常惊讶,因为 Firebase 是一家大型服务提供商。有没有其他人遇到过这个问题? 是否有计划取消电话身份验证的 APNs 要求?是否有其他方法可以在不推送的情况下使用 Firebase 电话身份验证?

【问题讨论】:

听起来您需要提供除 firebase phone auth 之外的替代身份验证方法,并向用户解释这些选项。 firebaser here 很遗憾听到这个问题。这显然不是我们希望您拥有的体验。这是我第一次听说这个问题。您能否reach out to Firebase support 以便我们更好地了解您的应用如何使用电话号码身份验证以及这与拒绝有何关系? @FrankvanPuffelen 嗨,我也很惊讶没有其他人像这样拒绝我。我已经在星期五写了支持票,但我不希望在星期一之前得到答复。该应用程序以简单的方式使用电话身份验证,您下载该应用程序,观看/跳过教程,您必须使用电话号码登录,这就是在其 iPad 上禁用推送通知的 App Review 团队无法继续进行的地方。他们引用的规则(关于 APN 必须是可选的)确实存在,因此它们似乎是正确的。 Apple 现已第 7 次拒绝我的应用程序,声称它无法批准在推送通知是可选的情况下无法运行的应用程序:“推送通知必须是可选的,并且必须获得用户的同意才能在应用程序。”由于 Firebase 手机登录行为,这是一个真正的障碍。现在正在寻找不同的方法。使用 Firebase 登录导致我的应用批准延迟超过 2 个月 (!!!!)。这是不合理的。在 Google 解决此问题之前,不惜一切代价避免在您的 iOS 应用中使用 Firebase 手机登录。 @user3228240 大家好消息,Firebase 4.2.0 已经发布,修复了这个错误 【参考方案1】:

Firebaser 在这里。正如 Leetmory 所说,我们已经发布了更新的 Firebase Auth SDK 4.2.0,有望在未来解决这些问题。

该问题是由 Firebase Auth SDK 使用 APN 来验证请求这一事实引起的 - 这是为了最大限度地降低 SMS 垃圾邮件滥用或类似情况的风险。验证使用静默 APNs 通知,因此对于 iOS 8 及更高版本不需要明确的用户同意。但是,如果 APNs 被完全禁用,这仍然会失败,就像在这个审查案例中一样。

4.2.0 版本引入了在 SFSafariViewController(或旧版 iOS 的 webview)内使用 reCAPTCHA 提示的功能,以防止在 APN 不可用时滥用。我们预计这种情况不会发生太多,但它解释了这里遇到的异常状态。它还支持在模拟器上测试 Firebase Phone Auth!

您会注意到verifyPhoneNumber 方法上有一个新的uiDelegate 参数。在大多数情况下,您不需要使用它,但它是后备验证的一部分。

如果您还没有,您需要做的是添加REVERSED_CLIENT_ID(来自GoogleService-Info.plist)作为自定义URL 方案。这将允许 reCAPTCHA 视图向您的应用返回验证。

在当前版本中有一个需要注意的问题:

    在来自verifyPhoneNumber 的回调中,您需要使用DispatchQueue.main.async 重新调度到主线程 - 这将在下一版本的 Firebase 身份验证中得到修复!

除此之外,一切正常!我们绝对建议尽可能支持静默推送,以确保最佳用户体验。

如需全面了解,请参阅完整的电话验证developer guide。

【讨论】:

【参考方案2】:

UPD:Firebase 4.2.0 已推出,解决了该问题。您需要将您的反向客户端 ID 添加到您的 Info.plist 中的 URL 方案中,如下所示:com.googleusercontent.apps.123456-abcdefg99,然后您就可以设置了。

找到这个 值,打开 GoogleService-Info.plist 配置文件,然后查找 REVERSED_CLIENT_ID 键。


Firebase 支持已确认此错误并已对此问题作出回应:

对我来说 感谢李特提供的详细信息。这确实是一个奇怪的情况,我们的电话验证工程师正在研究。一旦我有答案,我会尽快回复你。

最好的, 杰夫


对我来说 嗨,李特,

我们的工程师正在内部致力于长期解决此问题,但与此同时,希望与您会面,看看我们是否能找到解决方法。

Firebase 电话身份验证/Firebase UI 中似乎确实存在错误。

【讨论】:

迁移回 Digits - 一个月后将停止的服务不是解决方案。我在帖子中确定了根本原因,但您接受了自己的答案,但没有深入了解问题。【参考方案3】:

我联系了 Firebase 支持,摘录如下:

关于用户禁用推送通知的担忧 - 用户禁用应用的推送通知通常不会阻止用户使用他们的电话号码通过 Firebase 身份验证登录。我们的要求是应用程序必须设置和启用推送通知,而不是用户。无论用户接受还是拒绝您的应用的推送通知提示,电话身份验证都将继续工作,因为我们使用无需用户采取任何操作的静默推送。

我进一步研究发现,即使用户明确禁用推送通知,静默推送通知确实会到达设备。要禁用静默推送通知,您需要转到“设置”->“您的应用”->“后台刷新”以禁用它。见Is Silent Remote Notifications possible if user has disabled push for the app?

因此,您可以告诉 App Store 审核团队,您的登录仅在启用后台刷新时才有效。我不认为这违反了他们的条款。

编辑

经过一些测试,当后台刷新被禁用时,手机身份验证似乎可以工作。但是,它对我有用,因为 Firebase 已经可以访问我的 APNS 设备令牌。我没有办法解除我的设备令牌与 Firebase 的关联——他们没有为它提供 API。不幸的是,这使得无法测试新用户在进行手机身份验证之前禁用后台刷新和远程通知的场景,我认为这可能是导致错误的原因。

编辑 2

我可以确认,在全新安装了我们的应用的全新设备上,如果您禁用后台刷新,那么 Firebase 电话身份验证将不起作用。一旦你启用它,它就会再次工作。

原因是,如果用户手动禁用后台刷新和通知设置,SDK 可能会调用[[UIApplication sharedApplication] registerForRemoteNotifications],系统会忽略它。

很遗憾,在 Firebase 发布不需要 APN 的新 SDK 之前,没有解决方法。

【讨论】:

请阅读原始问题的这一部分:“通知中心设置不会停止实际推送,它只是不显示它们。我们已经在关闭此设置的情况下进行了测试,firebase 电话身份验证工作正常,推动仍在按预期进行。”该错误位于 Firebase 用户界面中,Firebase 支持人员已确认并正在努力修复。 您问“App Review 团队是如何禁用推送通知的?”我告诉你,他们禁用了后台刷新,这会阻止静默推送通知到达。 “当你说推送通知时,你应该澄清你是指用户通知还是远程通知。” - 不幸的是,App Review 团队没有具体说明他们的意思。他们消息中的引述如下:“具体来说,我们注意到如果我们的设备上没有启用推送通知设置,我们在应用程序中输入我们的电话号码后会遇到错误消息。”我无法为他们澄清。 “我告诉你他们禁用了后台刷新” - 不幸的是,情况并非如此,因为后台刷新不会阻止推送在应用程序处于前台时到达,而这正是他们遇到 Firebase UI 错误消息。您可以阅读 Firebase 团队就这个问题给我们的回复。他们承认这是错误,并正在修复它。 @OleksiiNezhyborets 不,没有提示,因为 Firebase 不注册用户通知,仅注册远程通知。

以上是关于由于 Firebase 手机身份验证,App Store 被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 手机身份验证 - 应用验证(SafetyNet)

当我尝试实现身份验证时出现 Firebase.app() 错误

Firebase 身份验证单元测试错误 No Firebase App

Flutter 应用程序在 iOS 平台上的 Firebase 手机身份验证上崩溃

如何在 Flutter 手机身份验证中删除验证码

成功的 Firebase 身份验证后 React Native App 无法导航