2020年4月10日金曜日

Sign in with Apple対応メモ

サードパーティー製のログイン機能を実装しているiOSアプリが、Sign in with Appleに対応していないと審査でリジェクトされるようになった(リジェクトされた)ので、マッハ(1.5日ほど)で対応した時の要点メモを残しておきます。

【要点】
以下、C = クライアントサイド & S = サーバサイド です。

  • C: ASAuthorizationAppleIDButtonでSign in with Appleボタンを設置
  • C: ASAuthorizationControllerで認証UIを呼び出す
  • C: ASAuthorizationController.delegateで認証結果を受け取る
  • C: 認証コード(ASAuthorizationAppleIDCredential.authorizationCode)をサーバへ送信
  • S: apple-authへ受け取った認証コードを渡し、Appleのサーバからsub等を取得(こんな感じ)して自サービスのアカウントの紐付けとかをする

【サーバサイド】
  • サードパーティー製ライブラリを使うほどのものでもない対応内容ですが、急いでいたし、apple-authの説明が分かりやすかったので採用(感謝)
  • ハマり所は特に無し(例によってApple Developerでの諸々の設定が面倒で、provisioning profileの更新周りで小一時間手間取る程度)
【クライアントサイド】
  • 特にUI(導線設計)周りは指示通りにやらないとリジェクト・リスクがあるので注意した(なんやかんやでこれが一番対応コストが掛かる。デザイナとSlackで半日程度やりとりしてザックリと決めて即日実装)
  • 唯一のハマり所は、ASAuthorizationAppleIDCredential.authorizationCodeがNSData型だったので「Base64にするん?」と勝手に想像して実装したことぐらい。単純にこれはUTF8のconst char*型データなので以下のようにすれば良い。
```objective-c
NSString* codeText = [[NSString alloc] initWithData:code encoding:NSUTF8StringEncoding];
```

【雑感】
  • タッチIDで認証できるのは中々快適
  • landscape専用のアプリだが、認証画面がportrait専用(iPhoneの場合)
    • 多分、フェースID絡みの関係で、縦にせざるを得なかったのではないかと想像(やっぱり、タッチIDこそが至高)

合理的ではないものを作りたい

ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...