草庐IT

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

coder 2023-07-26 原文

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

Guideline 4.5.4 - Design - Apple Sites and Services

We noticed that your app requires push notifications in order to function.

Specifically, we noticed if the Push Notifications setting was not enabled on our device, we encountered an error message after entering our phone number within the app.

Next Steps

Push notifications must be optional and must obtain the user's consent to be used within the app.

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

Firebase 文档指出 APNs 通知对于手机身份验证的运行是绝对必要的:
https://firebase.google.com/docs/auth/ios/phone-auth

To use phone number authentication, your app must be able to receive APNs notifications from Firebase. When you sign in a user with their phone number for the first time on a device, Firebase Authentication sends a silent push notification to the device to verify that the phone number sign-in request comes from your app. (For this reason, phone number sign-in cannot be used on a simulator.)

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

4.5.4 Push Notifications must not be required for the app to function, and should not be used for advertising, promotions, or direct marketing purposes or to send sensitive personal or confidential information.

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

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

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

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

最佳答案

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

该问题是由于 Firebase Auth SDK 使用 APN 来验证请求 - 这是为了最大限度地降低垃圾短信滥用或类似行为的风险。验证使用静默 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 View 将验证返回给您的应用程序。

虽然在当前版本中有一个陷阱需要注意:

  1. verifyPhoneNumber 的回调中,您需要使用 DispatchQueue.main.async {} 重新分配到主线程 - 这将在下一版本中修复Firebase 授权!

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

如需完整演练,请参阅完整的 Phone Auth developer guide .

关于ios - 由于 Firebase 手机身份验证,App Store 被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45111165/

有关ios - 由于 Firebase 手机身份验证,App Store 被拒绝的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  5. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  6. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

  7. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  8. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  9. ruby - 如何验证 IO.copy_stream 是否成功 - 2

    这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下

  10. Ruby 文件 IO 定界符? - 2

    我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的

随机推荐