SlideShare a Scribd company logo
Hint	of“Passcode	Lock”Screen	and	Logic

(with	LocalAuthentication).
Fumiya	Sakai	(Just1factory)
2019/01/28	potatotips	#58	@	FiNC	Technologies	Inc.
自己紹介
・Fumiya	Sakai
・Mobile	App	Engineer
アカウント:
・Twitter:	https://twitter.com/fumiyasac

・Facebook:	https://www.facebook.com/fumiya.sakai.37

・Github:	https://github.com/fumiyasac	

・Qiita:	https://qiita.com/fumiyasac@github
発表者:
・Born	on	September	21,	1984
これまでの歩み:
Web	Designer
2008	~	2010
Web	Engineer
2012	~	2016
App	Engineer
2017	~	Present
ほんの少しだけ告知と宣伝
「少しの工夫とアイデアでできる表現集」として、これまでサンプル開発や実務の
中で培ったノウハウ等から、UI実装いくつかのまとまったサンプル実装を例にUI構
築をする上で重要な実装ポイントやアイデアを紹介していく形式にしてみました。
収録サンプル:
https://github.com/fumiyasac/ios_ui_recipe_showcase
現在Boothにて販売中です【書籍版・DL版】	¥1,000
同人誌「iOSアプリ開発	UI実装であると嬉しいレシピブック」を書きました。
https://just1factory.booth.pm/items/1021745
概要:
https://just1factory.booth.pm/items/1150511
今回取り組む事になったきっかけ
実務でこの機能を採用する機会があったので面白い題材だと感じた。
センシティブな情報を取り扱うアプリでの要望の1つに画面ロック機能がある:
要望が生まれるアプリの事例:
細部のUI実装をはじめ入力時の表現にもこだわりを持たせられる部分
UI/UX的にもユーザーの入力を伴うのでInteractionやAnimationの工夫ができる:
Ex1.	金融(ファイナンス関連)のアプリの場合:
→	金銭に取引履歴や残高等の情報は他人に見られたくない情報であることが多い
Ex2.	ヘルスケア(体調関連)等の個人的な情報を取り扱うアプリの場合:
→	身長体重を含む健康等の情報に関しても同様に他人には見られたくないケースはある
今回の発表でのサンプルコード
実際に動かせるコードもご用意しました	&	解説コメントも残しました。
https://github.com/fumiyasac/TouchIDExample
サンプルで作成した画面構成
実際のアプリで組み込んだ事例に関しては懇親会等でお伝えできれば!
パスコードロック画面に関する設計概要
入力完了時の処理を実行
PasscodeViewController PasscodePresenter PasscodeModel
ユーザーの入力に関する処理
※ 本来はパスコードロック削除に関する処理があれば尚良い。
状態に応じた処理 パスコード情報を返却
InputPasscodeType ( 画面の用途に応じた分類 )
case inputForCreate // パスコードの新規作成
case retryForCreate // パスコードの新規作成時の確認
case inputForUpdate // パスコードの変更
case retryForUpdate // パスコードの変更時の確認
case displayPasscodeLock // パスコードロック画面の表示時
protocol PasscodePresenterDelegate: NSObjectProtocol {
func goNext()
func dismissPasscodeLock()
func savePasscode()
func showError()
}
※ 似た様な処理でも詳細が異なる点に気をつけると良い。
PasscodePresenterDelegate ( 期待する振る舞い )
パスコードロック画面のViewControllerに関する設計
① パスコードの入力が4桁になった場合にはPresenter側に完了したことを伝える
InputPasscodeType
( 画面の用途に応じた分類 )
case inputForCreate // パスコードの新規作成
case retryForCreate // パスコードの新規作成時の確認
case inputForUpdate // パスコードの変更
case retryForUpdate // パスコードの変更時の確認
case displayPasscodeLock // パスコードロック画面の表示時
protocol PasscodePresenterDelegate: NSObjectProtocol {
func goNext()
func dismissPasscodeLock()
func savePasscode()
func showError()
}
② 引数で渡されたEnum値に応じたPresenter側のDelegate処理を実行
PasscodePresenterDelegate
( VC側で期待する振る舞い )
presenter.inputCompleted(userInputPasscode, inputPasscodeType: inputPasscodeType)
InputPasscodeKeyboard
Delegate
ユーザー入力値を反映
※ VC側のextensionに場合に応じた処理を記載。
パスコードロック画面が表示される場合の処理イメージ
バックグラウンドに入ったタイミングの前に表示していた画面の上にパスコードロック画面をかぶせる。
(※アプリ起動時は最初に表示される画面の上にかぶせる)
コンテンツ用TabBar
パスコード画面用VC
現在表示中の画面の上にパスコード解除
用の画面をかぶせる。
コンテンツ用TabBarの上にモーダル表
示のものがあればその上にかぶせる。
コンテンツ用TabBar
パスコード画面用VC
AppDelegateのライフサイクルを利用
パスコードロック機能を実現する際の注意点
AppDelegateのライフサイクルで利用する処理との兼ね合いに注意。
TouchIDやFaceIDでの認証時のダイアログ表示時の挙動に注意:
パスコードロック画面を表示する	→	applicationDidEnterBackground(_	application:	UIApplication)
AppDelegateにおけるライフサイクルのメソッド実行タイミングへの理解が必須となる
URLスキームを利用してアプリを起動する部分にも考慮が必要:
ダイアログが表示されるタイミング:
→	applicationWillResignActive(_	application:	UIApplication)
ダイアログが閉じるタイミング:
→	applicationDidBecomeActive(_	application:	UIApplication)
このサンプルにおいては、
テンキーの左側に別途
生体認証用ボタンを用意
パスコードロック機能を実装する際にすると良い配慮
APIサーバー側:
送られたリクエストから
該当ユーザーへメール送信
パスコード解除用の
メール送信リクエスト
アプリ側:
※ 有効期限を短めにする等の配慮
ユーザーが送られたメール
に記載されたURLをタップ
( 解除用トークン入りURL )
※ 以前に利用したパスコードを破棄
URLスキーム経由で開いて
パスコード解除リクエスト
例. ユーザーがパスコードを忘れてしまった場合の考慮 → メールに添付されたURL経由でパスコードを解除する。
1. ユーザー登録機能を有する
2. DBへメールアドレスを保持している
1. APIサーバー側と通信する機能を有する
2. URL経由でアプリを開ける設定
送られたパスコード解除
リクエストが正しいか判定
リクエストが正しい場合
パスコードを解除する
UI/UXの観点からの工夫できるポイント(1)
テンキー状のボタンに関する設定
このViewにおけるInterfaceBuilder上での設定:
手順1. 0~9のボタンに関しては、Xcodeの右ペインでそれぞれtagの値を数字に合わせて設定しておく。
手順2. 0~9のボタンをInterfaceBuilderを利用して「Outlet Collection」で接続する。
※ ボタン押下時にどのボタンが押されたかは手順1. で設定したタグ値を sender: から取得する
UI/UXの観点からの工夫できるポイント(1)
テンキー状のボタンに関する設定
② 押下時のアニメーションに. allowUserInteractionオプションを追加
① UIButtonのアクションを .touchDown時に発火
UI/UXの観点からの工夫できるポイント(2)
ユーザーの入力状態表示に関する設定
鍵のアイコンが灰色から黒へ変化(ユーザーが数字を押した場合)はアニメーションを伴う。
※ 削除ボタンでユーザーが消した場合は逆の変化になりアニメーションは伴わない。
ユーザーが入力したパスコードの長さに応じて
鍵のアイコンが黒く表示される
UI/UXの観点からの工夫できるポイント(2)
ユーザーの入力状態表示に関する設定
表示部分のアニメーションは、Outlet Collectionの特性を利
用した実装になっている点がポイント
① ユーザーが数字を入力した時 ② ユーザーが数字を削除した時
その他表現に関連する補足事項(1)	UICollectionView
UICollectionViewFlowLayoutクラスを継承したクラスを利用する。
自作したUICollectionViewFlowLayoutを継承したクラス
を該当のUICollectionViewへ適用する
その他表現に関連する補足事項(2)	Haptic	Feedback
ボタン押下をユーザーに伝えるためのHaptic	Feedbackを追加。
短く「コツッ!」としたフィードバックを与える一例:
まずはUIImpactFeedBackGeneratorのインスタンスを作成
然るべきタイミングでimpactOccurred()を実行させる
テンキーでパスコードを入力時	/	登録したパスコードと一致しなかった際にバイブレーションを発生
今回の部分で端末のフィードバックを伴う部分:
今回の発表内容の補足と詳細
本日お話した内容に関しては下記の記事にもまとめております。
https://qiita.com/fumiyasac@github/items/6124f9b272f5ee6ebb40
今回のまとめ
機能の実現だけに留まらないユーザーの配慮を意識した設計が重要
Point1)	画面の有効活用
このサンプル開発を通じて:	
単純に機能を実現するための設計に加えて、AppDelegateのライフサイクルを活用した処理との連携部分につい
ても配慮が必要な点は注意するとより良い実装になるかと思います。さらにユーザー入力時の親切さにフォーカ
スに注目したUI/UXに関する実装を加えておく事でよりユーザーへの印象も良くなるのではと感じた。
Point2)	UI/UX観点での配慮 Point3)	AppDelegateとの連携
アプリのライフサイクルを活用した実装をする場合は、実行されるタイミングの見極めが大切
使い心地を意識したUI実装や触覚フィードバックを活用することで機能をさらに工夫ができる
画面を有効活用するための良い機能ロジックを初めから意識して取り組むと綺麗に仕上がる
Thank	you	for	listening	!

More Related Content

PDF
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
PDF
メディアアプリでよく見る無限スクロールするタブの動きへの考察
PDF
Approach of Prototyping for making Application User Interface about iOS
PDF
まずはできるところから始める UnitTestとテストができる実装について
PDF
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
PDF
デザイナーとエンジニアが話す、iOSアプリケーション開発
PDF
何を自動化するのか
PDF
自動運転車両開発におけるUE4の活用事例 | UNREAL FEST EXTREME 2020 WINTER
Fundamentals of Swift & Redux (ReduxとSwiftの組み合わせ)
メディアアプリでよく見る無限スクロールするタブの動きへの考察
Approach of Prototyping for making Application User Interface about iOS
まずはできるところから始める UnitTestとテストができる実装について
iOSアプリ開発のためのSwiftビギナーズ勉強会 第6回 @Co-Edo
デザイナーとエンジニアが話す、iOSアプリケーション開発
何を自動化するのか
自動運転車両開発におけるUE4の活用事例 | UNREAL FEST EXTREME 2020 WINTER

What's hot (20)

PDF
UE4:2019年ノンゲーム分野での活用について
PDF
動画広告をつかったUnity製アプリのマネタイズ 〜実装篇〜
PDF
Unity Services
PPTX
Dive into Origami Studio
PDF
コンポーネント単位で考えるWeb制作
PDF
Unity Ads Helper の使い方
PDF
Angularおじさんの1年
PDF
Enterprise mobility のご紹介 ~Infragisticsが提供する SharePoint モバイルプラットフォーム~
PDF
Unityではじめるプロモーション・マネタイズ UnityAds導入のススメ
PDF
ゲームジャムに使える! いろんな素材サイトとライセンスに関するご注意
PDF
楽しいものづくり ファーストステップ
PDF
最速でリリースするためのAndroidアプリデザイン
PPTX
UE4のライティング解体新書 ~効果的なNPRのためにライティングの仕組みを理解しよう~
PPTX
Native modules and ui components
PPTX
Swift playgroundsでアプリを作る
PDF
いい感じのフロントエンド開発環境を作ってみた
PPTX
Unite2015 uGUIの拡張と応用
PDF
最新アドテク×Java script実践活用術
PDF
LIGにおけるフロントエンドチーム構築
PDF
React vtecx20171025
UE4:2019年ノンゲーム分野での活用について
動画広告をつかったUnity製アプリのマネタイズ 〜実装篇〜
Unity Services
Dive into Origami Studio
コンポーネント単位で考えるWeb制作
Unity Ads Helper の使い方
Angularおじさんの1年
Enterprise mobility のご紹介 ~Infragisticsが提供する SharePoint モバイルプラットフォーム~
Unityではじめるプロモーション・マネタイズ UnityAds導入のススメ
ゲームジャムに使える! いろんな素材サイトとライセンスに関するご注意
楽しいものづくり ファーストステップ
最速でリリースするためのAndroidアプリデザイン
UE4のライティング解体新書 ~効果的なNPRのためにライティングの仕組みを理解しよう~
Native modules and ui components
Swift playgroundsでアプリを作る
いい感じのフロントエンド開発環境を作ってみた
Unite2015 uGUIの拡張と応用
最新アドテク×Java script実践活用術
LIGにおけるフロントエンドチーム構築
React vtecx20171025
Ad

Similar to Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication). (20)

PDF
RxSwiftとMVVMパターンと仲良くなる次のステップ
PDF
アプリ開発におけるテキスト装飾のアイデア集
PDF
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
PDF
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
PDF
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
PDF
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
PDF
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
PDF
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
PDF
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
PDF
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
PDF
2022年の抱負とここ数年続けてきたインプット
PDF
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
PDF
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
PDF
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
PDF
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
PDF
最近の業務やAndroid関連のインプットと振り返り
PDF
ITエンジニア (Developer) 向けAIエージェント勉強会 (2025/06/13)
PDF
UIを作る際にライブラリにする?それともDIYする?の切り分け&実装のアイデア例と事例紹介
PDF
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
PDF
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
RxSwiftとMVVMパターンと仲良くなる次のステップ
アプリ開発におけるテキスト装飾のアイデア集
部品に切り分けて考えるView構造とライブラリを上手に活用したUI実装
ライブラリやView構造を有効活用して iOSアプリのUIをオシャレにするワザ紹介
iOSアプリUIとの触れ合いと歩む僕なりのSwiftの楽しみ方
iOSアプリで気になった動きや表現を上手にアレンジして活用してみる
UI表現ライブラリを有効活用して iOSアプリのUIをオシャレにするワザ紹介
レイヤー分けをしたアーキテクチャで作るiOSアプリ&バックエンドのサンプル実装をのぞく
動画プレイヤーアプリの開発を通じて学んだ機能を実現するための要点解説
iOS側のUIの特徴と見比べるAndroid側でのUI実装のヒント
2022年の抱負とここ数年続けてきたインプット
デザイナー→Webエンジニア→iOSエンジニアと渡り歩いた僕なりのSwiftとの向き合い方と生かす戦略
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ(追加版)
少しずつキャッチアップしていくAndroidアプリ開発の補足と振り返り
iOSアプリ開発で意識すると役立ちそうな「つなぎ目」の部分について
最近の業務やAndroid関連のインプットと振り返り
ITエンジニア (Developer) 向けAIエージェント勉強会 (2025/06/13)
UIを作る際にライブラリにする?それともDIYする?の切り分け&実装のアイデア例と事例紹介
何故に私達(特に私)はアプリのアニメーションや UI表現に魅了されるのか? そして共存と向き合いを考える
できるだけUI系のライブラリを用いないアニメーションを盛り込んだサンプル実装まとめ
Ad

More from Fumiya Sakai (11)

PDF
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
PDF
少しずつ手厚くして不具合や仕様漏れを防ぐために
PDF
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
PDF
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
PDF
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
PDF
少しずつキャッチアップしていくAndroidアプリ開発
PDF
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
PDF
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
PDF
Hint of a little ingenuity about UI.
PDF
書籍執筆からの今後に向けてのロードマップ
PDF
ReduxとSwiftの組み合わせ:改訂版
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
少しずつ手厚くして不具合や仕様漏れを防ぐために
Measures for Growth with Firebase Remote Config & Unit Testing Using RxSwift
既存プロジェクトで使っていたDIをお引っ越し&DIYすることになった
UI実装に関するセッションを 簡単ながら振り返ってみる(仮)
少しずつキャッチアップしていくAndroidアプリ開発
UIKitやSwiftUIで表現や動きが特徴的なUI実装事例を考察する
試して感覚を掴んでみるUICollectionViewCompositionalLayout & Combine
Hint of a little ingenuity about UI.
書籍執筆からの今後に向けてのロードマップ
ReduxとSwiftの組み合わせ:改訂版

Hint of“Passcode Lock”Screen and Logic (with LocalAuthentication).