Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CredentialManager移行の落とし穴
Search
ゆつぼ
October 14, 2024
Technology
0
1.1k
CredentialManager移行の落とし穴
ゆつぼ
October 14, 2024
Tweet
Share
More Decks by ゆつぼ
See All by ゆつぼ
Glance 3分クッキング
morayl
0
99
安全にNavigateしよう
morayl
0
520
DAI語で行こう #as_tips / daigo_as_tips
morayl
1
480
Other Decks in Technology
See All in Technology
バッチ処理で悩むバックエンドエンジニアに捧げるAWS Glue入門
diggymo
3
190
Agile PBL at New Grads Trainings
kawaguti
PRO
1
400
開発者を支える Internal Developer Portal のイマとコレカラ / To-day and To-morrow of Internal Developer Portals: Supporting Developers
aoto
PRO
1
440
Generative AI Japan 第一回生成AI実践研究会「AI駆動開発の現在地──ブレイクスルーの鍵を握るのはデータ領域」
shisyu_gaku
0
140
Snowflake Intelligenceにはこうやって立ち向かう!クラシルが考えるAI Readyなデータ基盤と活用のためのDataOps
gappy50
0
110
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
6
750
「全員プロダクトマネージャー」を実現する、Cursorによる仕様検討の自動運転
applism118
19
9.2k
DDD集約とサービスコンテキスト境界との関係性
pandayumi
3
280
新アイテムをどう使っていくか?みんなであーだこーだ言ってみよう / 20250911-rpi-jam-tokyo
akkiesoft
0
170
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
690
品質視点から考える組織デザイン/Organizational Design from Quality
mii3king
0
200
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
9.8k
Featured
See All Featured
Visualization
eitanlees
148
16k
The Cost Of JavaScript in 2023
addyosmani
53
8.9k
Writing Fast Ruby
sferik
628
62k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
9
810
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
Thoughts on Productivity
jonyablonski
70
4.8k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.5k
What's in a price? How to price your products and services
michaelherold
246
12k
Why Our Code Smells
bkeepers
PRO
339
57k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
520
We Have a Design System, Now What?
morganepeng
53
7.8k
Transcript
CredentialManager移行の 落とし穴 ゆつぼ(@morayl1) 1
ゆつぼ 株式会社リクルート スタディサプリのAndroidエンジニア うつぼです。かわいい! 2 morayl morayl1
はじめに • ID/パスワードの入力補助のお話 • Smart Lock for Passwordsからの移行 • 環境依存が強いので、結果が異なる場合があるかも
3
Smart Lock for PasswordsとCredentialManager • Smart Lock for Passwords(CredentialsApi) ◦
ID/Passwordの保存・読み出しを中継するライブラリ ◦ gms:play-services-authに入っていたが、2022年にdeprecatedになった ◦ gms:play-services-auth:21.0.0から削除されている(21.2.0が最新) • それに変わるのがCredentialManager ◦ Passwordだけでなく、GoogleSignIn・Passkeyにも対応できる • ライブラリが変わるので、移行にはコードの書き換えが必要 4
CredentialManagerへの移行 公式にマイグレーションガイドがある https://developer.android.com/identity/sign-in/smart-lock-migration 5
パスワードの保存 6
パスワードの読み出し 7
パスワードの読み出し 8
パスワードの読み出し 9
落とし穴 10
正常パターン 11
12
13
14
15
異常パターン 16
17
18
19
20
21
事象と条件 事象:特定の条件でパスワード保存シートが2回表示される 発生条件:Android14以降で、入力UIにEditTextを使っている 22
23
24
25
分かったこと 勝手に出てくるもの + 自分が出しているもの、で 2つ出ている • EditTextでinputTypeがpassword系の場合に出る(OS14以降) ◦ 画面遷移(Activity/Fragment):保存UI ◦
EditTextへのフォーカス(autofill属性による):読み出しUI • OS14から、Autofillが強化されたことが原因 • Composeでは発生しない ◦ ComposeはまだAutofillに最適化されていないらしい ◦ そのうち最適化されそう • play-services-authでは発生しない 26
解決策 Compose化する パスワード入力ViewでEditTextを使わなければ解決する • EditTextだけComposeにする ◦ Abstract/ComposeViewを使うと出来る ◦ TextInputLayoutで囲んである場合は、難しいかも •
画面全体・Fragmentのレイアウトを全てComposeにする 27
「今、Compose化は出来ん」 28
xmlのまま解決する方法はないか? 1. 解決しない方法 2. ちょっと解決する方法 3. 解決ではない方法 4. 解決策? 5.
解決策 29
解決しない方法 xmlでAutofillの無効化する 30 inputTypeがpasswordだと表示されてしまう。 IssueTrackerで、仕様通りと回答されている。(以下、抜粋・翻訳) Android 14以降では、「自動入力の重要度」の挙動が更新されました。 Views#isImportantForAutofill が no
または noExcludeDescendants に設定されてい るビューでも、フォーカスされた際に通常は自動入力がトリガーされます。
解決ではない方法 play-services-authの21.0.0未満を使い続ける メリット • 問題が発生しない ◦ OS14でも、勝手に表示されない デメリット • deprecatedのままで、ライブラリアップデートも出来ない
31
ちょっと解決する方法 画面遷移前に、 AutofillManagerのcancelを呼ぶ。 メリット • 画面遷移後に出る(保存)のは防げる デメリット • EditTextタップ時に出てくるもの(読み出し)は防げない 32
解決策? OS14以降で、CredentialManagerのメソッドを呼ばない メリット • 問題は解決する デメリット • 読み出し・保存のタイミングが制御できない • 明示しないことには不安がある
◦ 内部仕様が変わると動作しなくなるかも・・・? 33
解決策 EditTextにisCredential=trueを付ける メリット • 問題が解決する デメリット? • 移行ガイドの手順通り進めると出てこない ◦ https://developer.android.com/identity/sign-in/smart-lock-migration
34
isCredentialとは何か Android 14以降では、isCredential属性を使用して、ユーザー名やパスワードなどの資格情報フィー ルドを示すことができます。この属性は、そのビューが Credential Managerやサードパーティの資格 情報プロバイダーと連携するための資格情報フィールドであることを示し、オートフィルサービスがよ り適切なオートフィル候補を提供できるように支援します。 アプリがCredential Manager
APIを使用する場合、利用可能な資格情報を表示する Credential Managerのボトムシートが表示されるため、ユーザー名やパスワード用のオートフィルのダイアログ を表示する必要はありません。同様に、アプリが Credential Manager APIを使用して資格情報を保 存するため、オートフィルのパスワード保存ダイアログも表示する必要がありません。 https://developer.android.com/identity/sign-in/credential-manager#indicate_credential_fields 35
isCredentialとは何か Android 14以降では、isCredential属性を使用して、ユーザー名やパスワードなどの資格情報フィー ルドを示すことができます。この属性は、そのビューがCredential Managerやサードパーティの資格 情報プロバイダーと連携するための資格情報フィールドであることを示し、 オートフィルサービスがよ り適切なオートフィル候補を提供できるように支援します 。 アプリがCredential
Manager APIを使用する場合、利用可能な資格情報を表示する Credential Managerのボトムシートが表示されるため、ユーザー名やパスワード用のオートフィルのダイアログ を表示する必要はありません。同様に、アプリが Credential Manager APIを使用して資格情報を保 存するため、オートフィルのパスワード保存ダイアログも表示する必要がありません。 36 「trueにすると勝手に出る」ようになりそう?
isCredentialとは何か Android 14以降では、isCredential属性を使用して、ユーザー名やパスワードなどの資格情報フィー ルドを示すことができます。この属性は、そのビューがCredential Managerやサードパーティの資格 情報プロバイダーと連携するための資格情報フィールドであることを示し、 オートフィルサービスがよ り適切なオートフィル候補を提供できるように支援します 。 アプリがCredential
Manager APIを使用する場合、利用可能な資格情報を表示する Credential Managerのボトムシートが表示されるため、ユーザー名やパスワード用のオートフィルのダイアログ を表示する必要はありません。同様に、アプリが Credential Manager APIを使用して資格情報を保 存するため、オートフィルのパスワード保存ダイアログも表示する必要がありません。 37 isCredentialを使わないと2回表示される(不適切になる) →trueにすると適切に表示できる
isCredentialとは何か Android 14以降では、isCredential属性を使用して、ユーザー名やパスワードなどの資格情報フィー ルドを示すことができます。この属性は、そのビューが Credential Managerやサードパーティの資格 情報プロバイダーと連携するための資格情報フィールドであることを示し、オートフィルサービスがよ り適切なオートフィル候補を提供できるように支援します。 アプリがCredential Manager
APIを使用する場合、利用可能な資格情報を表示する Credential Managerのボトムシートが表示されるため、ユーザー名やパスワード用のオートフィルのダイアログ を表示する必要はありません。同様に 、アプリがCredential Manager APIを使用して資格情報を保 存するため、オートフィルのパスワード保存ダイアログも表示する必要がありません 。 38 CredentialManager・オートフィルの2種類のダイアログがある → CredentialManagerを使うなら、オートフィルは不要 = trueにするとオートフィルのダイアログが表示されない
isCredentialの属性値を見てみる 「CredentialManagerと紐づいていることを示す」 = 「紐付いているから勝手に出さないでね 」 ComposeもAutofillに最適化された場合、isCredentialのような設定値が増えるのかもし れない 39
まとめ • CredentialManagerでは簡単にパスワードの読み出し・保存が出来る • Smart Lock for PasswordsをCredentialManagerに移行しようとしたら、 UIが重複表示される事象が発生した ◦
Android14以降でPassword入力のEditTextを使うことが条件 • 解決方法 ◦ EditTextにisCredential=trueを付ける ◦ Composeに移行する 40