Sansan Builders Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

管理者がSansanスマートフォンアプリの端末パスコードロックを必須化出来るようになりました

こんにちは!Sansan事業部プロダクト開発部所属の赤城です。SansanのAndroidアプリ開発を担当しております。

2019年12月上旬から、管理者が端末パスコードロックを必須化する機能が使えるようになりました! 今回はこの機能について、実装するに至った背景から実際の使い方、そしてAndroidアプリ開発時の裏話を紹介させて頂きたいと思います。

背景

Sansanスマートフォンアプリには、パスコードロックの機能があります。これは、スマートフォン自体のパスコードロックとは別に、Sansanアプリを起動するたびに4桁の認証コードの入力を求める機能です。正しい認証コードを入力しない限りアプリを使用できないため、仮に「端末を紛失し、第三者に端末のロックを突破された」「端末のロックを解除して放置した隙にスマートフォンを操作された」等の事象が起こってしまった際にも、Sansanアプリ内の情報が第三者に漏れることを防ぐための機能です。

f:id:ginyolith:20191220182244g:plain:h400
パスコードロック時の動き

今までのSansanスマートフォンアプリにおいては、上記のパスコードロックの設定は利用者個人に委ねられていました。 その性質上、一部のユーザー様から下記のような要望をいただいていました。

  • セキュリティに関する施策の一環でパスコード設定をマストにすることを検討しており、管理者側で一斉にONにできるようにしたい

  • スマホアプリのパスコード設定について、管理者側で設定の必須/不要を選んで、強制的に設定させたい

上記の背景から、 個人のセキュリティ意識に依存せず、企業のセキュリティポリシーとしてパスコード設定を利用できるようにする仕組み として、管理者がパスコードロックを必須化できる機能を開発するに至りました。

設定方法

  • Sansanのブラウザ版から、管理者用のプライバシー設定ページにアクセスします (※管理者のみがアクセス可能です)

f:id:ginyolith:20191223132341p:plain
ツールバーの右上からアクセス可能です

  • 「パスコードを必須にする」をチェックし、「保存」ボタンを押して設定を有効にします

f:id:ginyolith:20191223131805p:plain
パスコード設定画面

強制パスコードロック設定が適用された際のモバイルアプリの動き

上記設定が行われた後、パスコードロックを設定していない端末は下記のような画面が強制的に開くようになり、パスコードを設定しない限りアプリを使用出来ないようになります。

f:id:ginyolith:20191223142437p:plain:h400
強制パスコードロック設定時の画面

また、各種生体認証機能(Androidの指紋認証、iOSのFace ID、Touch ID)が搭載された端末の場合、下記のように生体認証の設定もサジェストします(アプリ内の「設定」画面から有効/無効を切り替える事も可能です)。 生体認証を有効にすれば、利便性を損なわず、かつセキュアにスマートフォンアプリの運用が可能になります。

f:id:ginyolith:20191223143148p:plain:h400
生体認証サジェスト時の画面

Androidアプリにおける機能開発時の裏話

Androidアプリの開発範囲としてはそこまで多くなく、タスクは主に下記2つでした。

  • パスコード設定を強制する画面を作る
  • サーバーから「パスコードを必須にする」設定を取得する処理を作成する

前者の「パスコード設定を強制する画面を作る」のタスクにおいて、従来のパスコード入力画面がActivityのlayout.xmlに直接記述されており、殆ど同じ見た目にも関わらず既存のコードを使い回せない問題がありました。

f:id:ginyolith:20191226153614p:plain
開発に着手した際の状況

既存のパスコード入力Activityに処理を追加しても良かったのですが、Fat Activityとなり保守性が下がってしまいそうだったため、パスコード入力部分をCustomViewに分離する事としました。 CustomViewはUIのみならず、ロジックも同時にカプセル化出来ます。今回の例ではActivityが担っていた処理の一部をCustomViewへ移譲する事で、Viewとロジックを2つの画面で共通利用しつつ、各クラスの責務が単一となるよう実装出来ました。

f:id:ginyolith:20191226153618p:plain
リファクタリング後

今回のような既存部分の改修開発においては、どうしても「コードを読む工数」+「実装工数」がかかってしまいます。(もしくは、同じコードをコピペする等して混沌を生むことも出来ますが、あまりオススメしません。) 変更が多いほど、長期的には開発コストが膨れ上がってしまう事になるでしょう。

しかし、モバイルアプリは他の領域に比べUIと密接に関わっている分、変更が激しい傾向にあります。変更に強いアプリケーションにするためには、機能の実装の時点で一度「SOLID原則」の観点などからViewのコンポーネントの設計をする事も視野に入れたほうが良さそうです。

さいごに

Sansanは企業理念 =「Sansanのカタチ」としており、その中で「出会いからイノベーションを生み出す」というMissionを掲げ、名刺を企業の資産として有効活用していただくべく、サービスを提供しています。 一方で、このような情報資産の運用には漏洩などのリスクもつきものです。「Sansanのカタチ」は「セキュリティと利便性を両立させる」というPremiseも含んでおり、今回のアップデートのようにリスクを防ぎつつ利便性の高いサービスを今後も提供していきます。



buildersbox.corp-sansan.com

buildersbox.corp-sansan.com

© Sansan, Inc.