potatotips #69で発表したWi-Fi Suggestion APIの発表資料です。 https://potatotips.connpass.com/event/171532/
Wi-Fi Suggestion API2020/04/27 (Mon)potatotips #69@syarihu
View Slide
Taichi Sato (@syarihu)● Money Forward, Inc.○ Android Engineer● TechBooster
Android 10以前のWi-Fi関連API
● Androidでは、API Level 1からWi-Fi情報を追加するAPIを用意している● イベント専用のアプリや実店舗などで使えるアプリでユーザーがWi-Fi情報を入力することなくイベント会場や店舗のWi-Fiに自動で接続できるAndroid 10以前のWi-Fi関連API
● Wi-FiがONで対象のSSIDが接続範囲内にいれば、保存されたWi-Fi情報を元に自動でWi-Fiに接続● アプリを削除した場合はアプリから追加したWi-Fi情報も同時に削除されるAndroid 10以前のWi-Fi関連API
● Android 10以前で使えていた機能を提供するWi-Fi関連APIは非推奨になった上に無効化されたAndroid 10以前のWi-Fi関連API
https://developer.android.com/reference/android/net/wifi/WifiManager#addNetwork(android.net.wifi.WifiConfiguration)
● プリインストールアプリなどを除いてminSdkVersion 29以上は2020年現在ではありえない● Android 10以上では新しいAPIを使い、Android10未満では以前のAPIを使って下位バージョンでも正しく動作させる必要があるAndroid 10以前のWi-Fi関連API
Wi-Fi Suggestion API
● 接続先候補としてWi-Fi情報をシステムに追加し、ユーザーにWi-Fiへの接続を提案するAPI● ネットワークの種類はオープン、WPA2、WPA3のいずれかの認証情報を提供できるWi-Fi Suggestion API
● サイレント通知であるため通知音は鳴らない● 通知の「はい」ボタンを押すと自動接続が許可され、Wi-Fiが接続範囲内に入ったときに自動的に接続されるWi-Fi Suggestion API
単なる接続確認ではないWi-Fi接続のおすすめ通知
● 「いいえ」を押すと、アプリのもつWi-Fiの管理権限が無効になり、Wi-Fi情報も削除される● Wi-Fiの管理権限が無効になると、アプリから変更ができなくなるため、再度Wi-Fi情報を追加することができない「いいえ」を押したときの挙動
● ユーザーが明示的に権限を許可するまでこの状態は変わらない「いいえ」を押したときの挙動
● 「いいえ」を押してもWi-Fiの管理の権限が無効になったことは一切通知されない● 権限を許可する画面は階層の深いところにあるため、一度「いいえ」を選択してしまうとアプリからWi-Fi接続をすることは難しい「いいえ」を押したときの挙動
● Wi-Fi情報を追加するタイミングで案内メッセージを表示するなど丁寧なコミュニケーションを取る必要がある「いいえ」を押したときの挙動
● Wi-Fi接続のおすすめ通知で「いいえ」を押した時点で追加したWi-Fi情報も自動的に削除される● 再度自動接続させる場合、アプリからWi-Fi情報を追加し、Wi-Fi接続のおすすめ通知で「はい」を押さなければならない「いいえ」を押したときの挙動
● 「はい」を押すと、アプリからのWi-Fi接続を許可される● Wi-Fi Suggestion APIには現在接続されているWi-Fiを強制切断して接続を切り替えるといったオプションはない「はい」を押したときの挙動
● アプリから追加した接続先候補以外のWi-Fiに繋がっている場合には「はい」を押しても接続が許可されるだけで、アプリからWi-Fi接続を行うわけではない「はい」を押したときの挙動
Wi-Fi接続のおすすめ通知のメッセージ修正
● Wi-Fi接続のおすすめ通知は単なる接続確認ではなく権限確認であることが分かったが、かなりややこしい● Googleも接続確認のメッセージではよくないと気づいたのか、android-10.0.0_r18から権限確認だと分かるメッセージに変更されたおすすめ通知のメッセージ修正
● メッセージの修正コミット自体は2019年8月に行われてる● Pixel 2やPixel 3のアップデートとしてこの変更が実際に適用されたのは2019年12月5日のアップデートからおすすめ通知のメッセージ修正
● 同じAndroid 10でもどの時期のアップデートを適用しているかによってメッセージが変わってきてしまう● 提供しているメーカーによっては今回の変更が適用されていない可能性もあるおすすめ通知のメッセージ修正
● Wi-Fi Suggestion APIを利用した機能を提供する場合はアップデートバージョンを気にしておくとよいおすすめ通知のメッセージ修正
接続するまで何が追加されたか分からないWi-Fi情報
● Android 10以前で利用できるWiFiManager#addNetworkメソッドでは追加内容を保存済のネットワークとして確認できた何が追加されたか分からないWi-Fi情報
● Wi-Fi Suggestion APIでの候補は対象のWi-Fiを検出するまでシステムのWi-Fi設定画面には表示されない● どのSSIDに接続可能になるかはアプリ上のどこかで明記しておくとよい何が追加されたか分からないWi-Fi情報
どこからも見えない謎のブラックリスト
● 接続の解除は通常のWi-Fiと同じ用に動作するが、その後の挙動はおかしいことになる● ユーザーがアプリから追加されたWi-Fiを明示的に接続解除してしまうと、接続を解除したSSIDはシステム内のブラックリストに入るどこからも見えない謎のブラックリスト
● ブラックリストに入れられたSSIDは、接続解除されてから24時間は一切自動接続できなくなる● Wi-Fi Suggestionの候補からは削除されていないが、一度削除して再度追加を行ったとしても一切自動接続できないどこからも見えない謎のブラックリスト
● 現状、ブラックリストに入ってしまったSSIDはどこからも確認できない● アプリ上から何らかのメッセージを表示することも不可能どこからも見えない謎のブラックリスト
● システムの設定から解除するのではなくアプリ上からWi-Fi Suggestion APIを使ってWi-Fi情報を削除すると接続も解除される● 解除について注意事項を書いたり、接続を解除する場合はアプリから接続の解除を促す警告を出すなどするとよいどこからも見えない謎のブラックリスト
アプリアンインストール時の挙動
● Wi-Fi Suggestion APIで追加されたWi-Fi情報はアンインストール時に同時に削除される● どのSSIDが追加されているかはユーザーは分からないため不安かもしれないので、アンインストール時に同時に削除されることは覚えておくとよいアプリアンインストール時の挙動
Android 11以降のWi-Fi Suggestion APIについて
● 追加時のダイアログ以外にも大きな変更がいくつか入っている模様● また機会があればお話しますAndroid 11以降のWi-Fi Suggestion API
まとめ
● Wi-Fi Suggestion APIはシンプルな機能に見えて気をつけなければならない点が多い● 同じAndroid 10でもバージョンによって違いがあったりする● Android 11以降でも大きな変更が入るので、注意して見ておく必要があるまとめ
● 今回話せなかった以前のWi-Fi関連APIについての実装を含めた話や、Wi-Fi Suggestion APIの実装の話についてもっと知りたい方は…おわりに
みんな気になるAndroid開発の最新事情● in-app updates: アプリを使いながらアップデートしよう● 忙しい人のためのAAC最新事情● あなたとWi-Fi、今すぐサジェスト● Jetnewsで使われているComposableをざっと見る● Jetpack Composeのグランドデザインを読み解く● 君も幸せになれるSpreadSheet使いこなし術● First step of LiveData(改訂版)● ViewModelを理解するhttps://techbooster.booth.pm/items/1743311
ありがとうございました