由于Firebase手机验证而导致App Store拒绝

时间:2017-07-14 20:30:02

标签: ios firebase apple-push-notifications app-store firebase-analytics

我们的应用使用Firebase手机验证。由于需要推送,App Store评论拒绝了该应用程序:

  

准则4.5.4 - 设计 - Apple站点和服务

     

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

     

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

     

后续步骤

     

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

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

Firebase文档指出,手机验证功能绝对需要APN通知:
https://firebase.google.com/docs/auth/ios/phone-auth

  

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

然而,App Store审核指南规定,为了让应用能够正常运行,不得要求推送通知:https://developer.apple.com/app-store/review/guidelines/

  

4.5.4推送通知不得要求应用程序正常运行,不得用于广告,促销或直接营销或发送敏感的个人或机密信息。

用户需要在他们可以使用该应用程序之前登录(该应用程序是关于向您的客人发送数字GIF邀请并共享照片),这就是为什么推送通知基本上是应用程序运行所必需的原因,如果登录方法是Firebase手机验证。

我们已经对应用程序进行了大量测试,并且在启用推送通知时,身份验证可以正常运行(在真实设备上,无论是在分发Ad Hoc构建中还是生产环境和使用沙箱环境构建开发)。

想想看,App Review团队甚至如何禁用推送通知?通知中心设置不会停止实际推送,它只是不显示它们。 Setting is turned off 我们已经通过此设置进行了测试,并且firebase phone auth工作正常,推送仍然按预期进行。

我对此问题感到非常惊讶,因为Firebase是一家庞大的服务提供商。有没有人遇到过这个问题? 是否有计划删除APN对电话验证的要求?是否可能有其他方式使用Firebase手机auth而不推?

3 个答案:

答案 0 :(得分:9)

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

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

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

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

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

虽然在当前版本中有一些问题需要注意:

  1. verifyPhoneNumber的回调中,您需要使用DispatchQueue.main.async {}重新发送到主线程 - 这将在下一版本的Firebase Auth中修复!
  2. 除此之外,事情应该正常工作!我们绝对建议尽可能支持静音推送以确保最佳用户体验。

    要完整浏览,请参阅完整的电话验证developer guide

答案 1 :(得分:6)

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

  

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

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

  对我来说   感谢Leet的详细信息。这确实是一个奇怪的情况,我们的Phone Auth工程师正在看一看。我得到答案后立即回复你。

     

最佳,
  杰夫

  对我来说   嗨Leet,

     

我们的工程师正在内部进行长期解决方案,但与此同时,我想与您见面,看看我们是否能找到解决方法。

Firebase手机身份验证/ Firebase用户界面中确实存在错误。

答案 2 :(得分:1)

我联系了Firebase支持,这里有一段摘录:

  

关于用户停用推送通知的问题 - 用户禁用应用推送通知通常不会阻止用户使用Firebase身份验证使用自己的电话号码登录。我们的要求是应用程序必须设置并启用推送通知,而不是用户。无论用户是否接受或拒绝您的应用程序的推送通知提示,手机auth将继续工作,因为我们使用不需要用户采取任何操作的静默推送。

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

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

修改

经过一些测试后,当禁用后台刷新时,手机身份验证似乎可以正常工作。但是,它适用于我,因为Firebase已经可以访问我的APNS设备令牌。我发现无法将我的设备令牌与Firebase取消关联 - 它们没有提供API。遗憾的是,这使得无法测试新用户在进行手机验证之前禁用后台刷新和远程通知的情况,我认为这可能是导致错误的原因。

编辑2

我可以在全新安装我们的应用的新设备上确认,如果您禁用后台刷新,则Firebase Phone Auth将无效。一旦启用它,它将再次起作用。

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

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