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
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
Claude Codeは仕様駆動の夢を見ない
gotalab555
23
6.4k
LTに影響を受けてテンプレリポジトリを作った話
hol1kgmg
0
360
dipにおけるSRE変革の軌跡
dip_tech
PRO
1
260
Kiroでインフラ要件定義~テスト を実施してみた
nagisa53
3
340
AIエージェントを現場で使う / 2025.08.07 著者陣に聞く!現場で活用するためのAIエージェント実践入門(Findyランチセッション)
smiyawaki0820
6
960
Amazon Q と『音楽』-ゲーム音楽もAmazonQで作成してみた感想-
senseofunity129
0
140
Infrastructure as Prompt実装記 〜Bedrock AgentCoreで作る自然言語インフラエージェント〜
yusukeshimizu
1
100
Amazon GuardDuty での脅威検出:脅威検出の実例から学ぶ
kintotechdev
0
100
風が吹けばWHOISが使えなくなる~なぜWHOIS・RDAPはサーバー証明書のメール認証に使えなくなったのか~
orangemorishita
15
5.7k
生成AI時代におけるAI・機械学習技術を用いたプロダクト開発の深化と進化 #BetAIDay
layerx
PRO
1
1.2k
Vision Language Modelと自動運転AIの最前線_20250730
yuyamaguchi
4
1.3k
AWS re:Inforce 2025 re:Cap Update Pickup & AWS Control Tower の運用における考慮ポイント
htan
1
240
Featured
See All Featured
Building an army of robots
kneath
306
45k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
183
54k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
How to Ace a Technical Interview
jacobian
278
23k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Producing Creativity
orderedlist
PRO
347
40k
Raft: Consensus for Rubyists
vanstee
140
7.1k
Practical Orchestrator
shlominoach
190
11k
Adopting Sorbet at Scale
ufuk
77
9.5k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
22
1.4k
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