web-dev-qa-db-ja.com

Firebase電話認証によるApp Storeの拒否

私たちのアプリはFirebaseの電話認証を使用しています。プッシュが必要なため、App Storeレビューはアプリを拒否しました:

ガイドライン4.5.4-設計-Appleサイトとサービス

アプリが機能するためにはプッシュ通知が必要です。

具体的には、デバイスでプッシュ通知設定が有効になっていないと、アプリ内に電話番号を入力した後にエラーメッセージが表示されました。

次のステップ

プッシュ通知はオプションである必要があり、アプリ内で使用するにはユーザーの同意を得る必要があります。

また、Firebaseエラー「リ​​モート通知とバックグラウンドフェッチをアプリに設定する必要があります[...]」を示すスクリーンショットも添付しています。

Firebaseのドキュメントでは、電話認証が機能するためにはAPN通知が絶対に必要であると述べています:
https://firebase.google.com/docs/auth/ios/phone-auth

電話番号認証を使用するには、アプリがFirebaseからAPNs通知を受信できる必要があります。デバイスで初めて電話番号を使用してユーザーにサインインすると、Firebase Authenticationはサイレントプッシュ通知をデバイスに送信して、アプリからの電話番号サインインリクエストを確認します。 (このため、シミュレータでは電話番号サインインを使用できません。)

ただし、App Storeのレビューガイドラインには、アプリが機能するためにプッシュ通知が必要であってはならないことが記載されています。 https://developer.Apple.com/app-store/review/guidelines/

4.5.4プッシュ通知は、アプリが機能するために必要なものであってはならず、広告、プロモーション、ダイレクトマーケティングの目的、または機密の個人情報や機密情報の送信には使用しないでください。

ユーザーはアプリを使用する前にサインインする必要があります(アプリはデジタルGIF招待状をゲストに送信して写真を共有することです)。これが、サインイン方法がFirebaseフォンの場合、アプリが機能するためにプッシュ通知が基本的に必要な理由です。 auth。

アプリを何度もテストしましたが、プッシュ通知が有効になっている場合(実際のデバイスで、実稼働環境でのアドホックビルドとサンドボックス環境での開発ビルドの両方で)認証は問題なく機能します。

そういえば、App Reviewチームはどのようにしてプッシュ通知を無効にしたのでしょうか?通知センターの設定は実際のプッシュを停止せず、表示しないだけです。 Setting is turned off この設定をオフにしてテストしましたが、firebaseの電話認証は正常に機能し、プッシュは引き続き期待どおりに行われます。

Firebaseは巨大なサービスプロバイダーであるため、この問題に非常に驚いています。他の誰かがこの問題に遭遇しましたか?電話認証のAPN要件を削除する計画はありますか?プッシュなしでFirebase電話認証を使用する他の方法はありますか?

15
Lveecode

UPD:Firebase 4.2.0が公開され、問題が修正されました。次のようなリバースクライアントIDを追加する必要があります:com.googleusercontent.apps.123456-abcdefg99をInfo.plistのURLスキームに設定すると、設定が完了します。

この値を見つけるには、GoogleService-Info.plist構成ファイルを開き、REVERSED_CLIENT_IDキーを探します。


Firebaseサポートはこのバグを確認し、この問題への対応を示しています。

私に
詳細情報リートありがとうございます。これは確かに奇妙な状況であり、Phone Authエンジニアが調査しています。返事があり次第、折り返しご連絡いたします。

ベスト、
ジェフ


私に
こんにちは、リート

我々のエンジニアはこの問題の長期的な修正に向けて社内で取り組んでいますが、それまでの間、回避策を見つけることができるかどうかを確認するためにお会いしたいと思います。

確かにFirebaseの電話認証/ Firebase UIにバグがあるようです。

6
Lveecode

ファイアベーサーはこちら。 Leetmoryが述べたように、アップデートされたFirebase Auth SDK 4.2.0をリリースしました。これにより、今後これらの問題が解決されると期待されます。

この問題は、APNを使用してリクエストを検証するFirebase Auth SDKが原因で発生しました。これは、SMSスパムの乱用などのリスクを最小限に抑えるためです。検証では、サイレントAPN通知を使用するため、 iOS 8以降では、ユーザーの明示的な同意は必要ありませんが、このレビューケースのようにAPNが完全に無効になっている場合は、これでも失敗します。

4.2.0リリースでは、SFSafariViewController(または古いiOSの場合はwebview)内でreCAPTCHAプロンプトを使用して、APNが使用できない場合の悪用を防ぐ機能が導入されました。これはそれほど発生するとは思われませんが、ここで発生する異常な状態が原因です。また、シミュレータでFirebase Phone Authをテストするためのサポートも有効になります!

uiDelegateメソッドに新しいverifyPhoneNumberパラメータがあることに気づくでしょう。ほとんどの場合、これを使用する必要はありませんが、フォールバック検証の一部です。

まだ行っていない場合は、REVERSED_CLIENT_IDGoogleService-Info.plistから)をカスタムURLスキームとして追加する必要があります。これにより、reCAPTCHAビューが検証をアプリに返すことができます。

ただし、現在のバージョンでは注意すべき点があります。

  1. verifyPhoneNumberからのコールバックでは、DispatchQueue.main.async {}を使用してメインスレッドに再ディスパッチする必要があります。これは、Firebase Authの次のバージョンで修正される予定です!

それ以外は、通常どおり機能するはずです。最高のユーザーエクスペリエンスを確保するために、可能な限りサイレントプッシュをサポートすることをお勧めします。

完全なウォークスルーについては、完全な電話認証 開発者ガイド を参照してください。

10
Ian Barber

Firebaseサポートに連絡したところ、ここに抜粋があります。

ユーザーがプッシュ通知を無効にすることに関する懸念の観点から-ユーザーがアプリのプッシュ通知を無効にしても、通常、ユーザーはFirebase Authで自分の電話番号を使用してサインインできます。私たちの要件は、ユーザーではなくアプリがプッシュ通知をセットアップして有効にする必要があることです。ユーザーがアプリのプッシュ通知を受け入れるか拒否するかに関係なく、ユーザーからのアクションを必要としないサイレントプッシュを使用するため、プロンプト電話認証は引き続き機能します。

さらに調査したところ、ユーザーが明示的にプッシュ通知を無効にした場合でも、サイレントプッシュ通知が実際にデバイスに届くことがわかりました。サイレントプッシュ通知を無効にするには、[設定]-> [アプリ]-> [バックグラウンド更新]に移動して無効にする必要があります。参照 ユーザーがアプリのプッシュを無効にした場合、サイレントリモート通知は可能ですか?

したがって、バックグラウンド更新が有効になっている場合にのみログインが機能することをApp Store Reviewチームに伝えることができます。私はこれが彼らの条件に違反するとは思わない。

[〜#〜]編集[〜#〜]

いくつかのテストの結果、バックグラウンド更新が無効になっていると電話認証が機能するようです。ただし、Firebaseはすでに私のAPNSデバイストークンにアクセスできるため、これは私にとっては機能します。デバイストークンとFirebaseの関連付けを解除する方法が見つかりません-APIを提供していません。このため、残念ながら、新しいユーザーがバックグラウンドリフレッシュとリモート通知を無効にしてから電話認証を行うシナリオをテストすることはできません。

EDIT 2

アプリを新しくインストールした新しいデバイスでは、バックグラウンド更新を無効にすると、Firebase Phone Authが機能しないことを確認できます。有効にすると、再び機能します。

その理由は、SDKが[[UIApplication sharedApplication] registerForRemoteNotifications]これは、ユーザーが手動でバックグラウンド更新と通知設定を無効にした場合、システムによって無視されます。

残念ながら、FirebaseがAPNを必要としない新しいSDKをリリースするまで、回避策はありません。

1
skensell