【iOS】privaterelay.appleid.comドメインにメールを送る
はじめに
ReactNative
でSign in with Apple
を実装している時にハマった内容のTips
です。
ReactNative
に限らず、iOS
アプリを開発している場合には参考になる内容かと思います。
Sign in with Appleとは
所謂 「Apple IDでサインイン」 というやつです。
これがなかなか曲者で「Google
ログイン等のサードパーティのログインを実装してる」場合はSign in with Apple
を実装しないとAppStore
のレビューガイドラインに違反してしまいます。
意訳ですが「iOS
向けアプリでよそのログイン機構を作るならAppleID
にも対応させてくれ」ということだと思います。
以下引用
4.8 Sign in with Apple
Apps that use a third-party or social login service
(such as Facebook Login, Google Sign-In, Sign in with Twitter, Sign In with LinkedIn, Login with Amazon, or WeChat Login)
to set up or authenticate the user’s primary account with the app
must also offer Sign in with Apple as an equivalent option.
A user’s primary account is the account they establish with your app
for the purposes of identifying themselves, signing in,
and accessing your features and associated services.
何が起きたか
実装しなければレビューが通らないので止むを得ず実装しました。
幸いなことにReactNative
ではreact-native-apple-authentication
というライブラリが対応していたので、手順通りに実装すればそれ程手間ではありませんでした。
ただ、サインイン時に取得するユーザ情報のなかに「メールアドレス」が含まれています。
新規のユーザ登録の場合、このメールアドレスに登録完了の旨を送信するのですが、一部のアドレスに対しては以下のようなバウンスメールが返って来てしまいます。
550 5.1.1 Relay not allowed /
このエラーが出るのが、タイトルにもあるprivaterelay.appleid.com
ドメインのメールアドレスです。
privaterelay.appleid.comとは?
実はAppleID
でサインインする際に、ユーザはメールアドレスの「公開/非公開」を選択することができます。
ここで「非公開」を選択した場合、Apple
側が発行するのがこのドメインのメールアドレスです。
以下引用
「メールを非公開」を選択した場合
一意でランダムなメールアドレスが作成されるので、アカウントの設定やサインインプロセスに際して、App や Web サイトのデベロッパに個人用のメールアドレスが伝わることはありません。このアドレスはユーザとデベロッパを一意に特定し、<一意の英数字の文字列>@privaterelay.appleid.com という形式になります。
通常はユーザとデベロッパの特定のためだけに使われるらしく、何もしない状態だとこのメールアドレス宛にメールを送ることができません。
幸い当該のシステムでは、【ユーザの仮登録】→【送信されたメール中のURLをクリックして本登録】といったフローではなかったため、メールが届かなくても致命的な不具合とはなりませんでした。
※というかSing in with Apple
でそのフローだとAppStore
レビューに通らないと思います。
対応方法
対応は簡単でした。
-
Apple Developer
にログイン -
Certificates, Identifiers & Profiles
メニューを開く -
More
メニューからConfigure
ボタンを押下 -
Email Sources
の追加を選択 - 下記のようなモーダルが表示されるので、メール送信元アドレスの「(サブ)ドメイン」or「メールアドレス」を設定
上記の手順を踏むことで解消することができました。
まとめ
今回はSign in with Apple
を実装して取得したメールアドレスに対してメールを送信した際に発生したエラーと、その対処法について紹介しました。
サードパーティのログインを実装する場合、Sign in with Apple
も必ず必要となってくるため遭遇しやすい内容かと思います。
知っていれば対応は簡単なので、最初にApple Developer
で設定しておくことをオススメします。
Discussion