アカウント

セッションがない間に開くのは、サインイン画面と法的文書だけ

先にアプリの中を見てから登録する、という道はありません。画面が描画される前にルーティングの判定が入り、サインインしていない訪問者に許可される領域はちょうど二つです。サインインと登録の画面グループ、そして法的文書の画面です。それ以外の遷移先は、すべてウェルカム画面に戻されます。

サインインしていない訪問者に開く範囲

アプリは、サインアウト状態の訪問者に何を見せるかを、画面ごとの権限ではなくひとつのルーティング判定で決めています。判定は遷移先が属する領域を見て、そのうち二つを許可します。ウェルカム画面、サインイン画面、登録画面をまとめたグループと、法的文書をまとめたグループです。それ以外の遷移先は、すべてウェルカム画面にリダイレクトされます。規則はapps/jewelry-mobile/src/features/auth/auth-route-guard.tsの一行で、次のように書かれています。return segments[0] === '(auth)' || segments[0] === 'legal';

規則が画面単位ではなく領域単位で書かれているため、部分的なアクセスというものは存在しません。ライブラリは開くが生成はできない、作例は見られるが保存はできない、といった状態にはなりません。遷移先は許可された二つの領域のどちらかに入っているか、入っていないかのどちらかで、入っていなければアプリは出発点に戻します。

この記述を正確に保つ但し書きがひとつあります。同じ関数には開発ビルドとプレビュービルドで使われる分岐があり、そこではもうひとつの経路が開きます。その経路は公開された道ではなく、アプリの中に入る手段でもありません。「領域は二つ」という説明を絶対的な記述ではなくストア向けビルドについての記述として書いているのは、この分岐があるためです。

二つ目の開いた領域が法的文書の画面です。このページが述べるのは、それらがセッションなしで開くという事実だけです。その文章が何を述べ、何を認めているかは解釈しません。

サインイン画面が端末ごとに同じに見えない理由

ウェルカム画面、サインイン画面、登録画面に並ぶ操作は、固定された一式ではありません。ひとつのブロックには条件があり、条件が満たされないときは何も告げずに消えます。

Googleのボタンには条件が付いています。
描画されるのは、公開用のGoogleクライアント識別子がビルドに渡されているときだけです。その値がない場合、ボタンはまったく描画されません。apps/jewelry-mobile/src/features/auth/components/google-auth-button.tsxの「if (!isGoogleConfigured())」で確認しました。
消えるときは何も告げません。
ボタンの代わりにメッセージも、無効化された操作も、プレースホルダーも表示されません。出品者の側から見ると、ボタンのないビルドと、もともとボタンを持たないビルドを見分ける手がかりはありません。
Androidでは、ボタンひとつではなくブロック全体が消えることがあります。
ボタン、区切り線、そのそばの利用規約とプライバシーの注記はひとつのまとまりです。Apple以外のプラットフォームでGoogleクライアント識別子がない場合、このまとまりが省かれ、メールアドレスとパスワードが残ります。apps/jewelry-mobile/src/features/auth/components/social-auth-buttons.tsxの「if (!isApplePlatform() && !isGoogleConfigured())」で確認しました。
三つの画面が同時に変わります。
同じブロックがウェルカム画面、サインイン画面、登録画面で使われているため、その挙動は三つすべてに及びます。どれかひとつでメールアドレスとパスワードが見えているなら、残りの二つでも同じです。
変わらないのはメールアドレスとパスワードです。
条件付きのブロックが描画されないときに残るのがこの二つであり、そのため手順書が安心して前提にできる入口はこれだけです。

目の前にある操作をそのまま読む

画面が示すのは、そのビルドが描画したものです。以下のどの場面も、その画面の読み方であって、どこかでどのプロバイダーが有効になっているかの推測ではありません。

状況選択理由
メールアドレスとパスワード、区切り線、その上にひとつ以上のボタンが見えている。好きな入口を使ってください。どれも同じ画面上の入口です。このブロックは条件付きで、その端末では描画されました。特定のビルドに何が渡されたかは、このページからは分かりませんし、判断もしません。
Androidの端末で、メールアドレスとパスワードしか見えない。メールアドレスとパスワードで登録するか、サインインしてください。ブロックの条件が満たされない場合、ボタン、区切り線、そばの注記はまとめて省かれ、その代わりにエラーが出ることもありません。
ゲスト、お試し、あとで登録といった入口を探している。探すのをやめて、アカウントを作成してください。サインインのグループと法的文書の画面の外にある遷移先はすべてウェルカム画面にリダイレクトされ、ゲスト用の識別情報から始められる画面もありません。
開いた画面が閉じて、ウェルカム画面に戻る。その画面の失敗ではなく、セッションがないことの表れとして読んでください。このリダイレクトは、ルーティングガードが唯一の仕事をしているだけです。遷移先の画面については何も報告していません。

サインイン画面がおかしく見えるときの確認

以下の項目は、目の前の画面だけで、サポートにも二台目の端末にも頼らずに判断できます。

  • アプリが終了したのではなくウェルカム画面に戻ったことを確認します。そこへのリダイレクトはサインアウト状態のルーティング規則であり、不具合ではありません。
  • メールアドレスとパスワードがあるかを確認します。あれば、ほかに何が欠けていてもその画面は動いています。
  • ソーシャルのボタンが見当たらない場合は、サインイン画面と登録画面でも同じかを確認します。ブロックは共有されているため、三つすべてでないか、三つすべてであるかのどちらかです。
  • ボタンが見当たらない理由をエラーが説明してくれるのを待たないでください。ブロックの条件が満たされないとき、その場所には何も描画されません。
  • アプリが壊れていると判断する前に、ゲストやスキップの入口を探さないでください。画面にそのような手順は用意されていません。
  • 二台の端末を見比べる場合は、どの端末がどの操作を描画したかを記録し、その差をアカウントの差ではなくビルドの差として扱います。

このページがアカウントについて答えないこと

このページの根拠は、モバイルクライアント自身のルーティングと描画の挙動です。隣接するいくつかの問いは、その外側にあります。

  • ダウンロードしたビルドでGoogleまたはAppleのサインインが有効かどうか。コードから分かるのは描画の規則であって、そこで読まれる値ではないため、ここではどちらとも述べません。
  • 登録フォームを送信したあとに何が起きるか。そのあとアプリがどこへ移動させるかも含めて、この受け渡しは別に扱われ、ここからは導けません。
  • アドレスが未確認のアカウントが、アプリの中で何をでき、何をできないか。この状態は別の主題であり、このページでは開きません。
  • 確認コードがどう作られるか、セッションがどれだけ続くか、試行が何回まで許されるかといったサーバー側の本人確認の規則。この面が報告するのは、クライアントが描画するものだけです。
  • 法的文書の意味、範囲、効力。このページは、それらの画面がセッションなしで開くという事実を述べるにとどめます。
  • ウェブサイト、管理パネル、その他のアプリケーションでのアカウントの挙動。対象はJewelry AIのモバイルクライアントです。

よくある質問

アカウントを作る前にアプリの中を見られますか?

いいえ。セッションのない訪問者に対して、アプリはサインインと登録のグループ、そして法的文書の画面を許可し、それ以外の遷移先はすべてウェルカム画面にリダイレクトします。この説明はストア向けビルドについてのもので、開発ビルドには公開された道ではない経路がもうひとつあります。

メールアドレスとパスワードしか表示されず、ほかのサインインのボタンがないのはなぜですか?

ソーシャルサインインのブロックは条件付きです。Androidで、公開用のGoogleクライアント識別子がビルドに渡されていない場合、ボタン、区切り線、そばの注記はまとめて省かれ、その場所には何も描画されません。クライアントのコードは特定のビルドに何が渡されたかを示さないため、ボタンがないことはプロバイダーについての証拠にはなりません。

あとで本登録に切り替えられるゲストモードはありますか?

ゲストや端末の識別情報を恒久的なアカウントに変える手順は、アプリのどの画面にもありません。引き継ぎ元になる前の状態がないため、最初のアップロードの前にアカウントがある前提で計画してください。

登録する前に法的文書を読めますか?

はい。法的文書の画面は、セッションのない訪問者にルーティングガードが開いたままにする二つ目の領域です。その文章が何を意味し、何を認めているかは、このページでは解釈しません。