Slide 1

Slide 1 text

パーミッションを 許可してもらお STORES 決済 Android Yamaton / Kei Yamamoto

Slide 2

Slide 2 text

自己紹介 STORES 決済 Android 2021年1月1日入社 4年目 2013年からAndroid(中2年育休) 妻、長男、次男、猫 Yamaton / やまとん

Slide 3

Slide 3 text

すてきなアプリなのに 使ってもらえない 1

Slide 4

Slide 4 text

どうして許可してくれないの? せっかくつくった機能も パーミッションを許可してもらえないと つかえない(T ^ T) だったらどうしてユーザーはパーミッションを 許可してくれないんだろう?

Slide 5

Slide 5 text

全てのアクセス!? こわっ!!!!!!こ わいよ!!!!! 絶対無理!!むり! むり!!!むり〜〜 すーぱーらぶりーアプリ にこの端末の全ての ファイルへのアクセスを

Slide 6

Slide 6 text

ユーザーはみんな最初の 1歩が踏み出せないだけ →手伝ってあげよ!

Slide 7

Slide 7 text

許可を押し易い ようにしてあげる 2

Slide 8

Slide 8 text

タップジャッキング すーぱーらぶりーアプリ にこの端末の全ての ファイルへのアクセスを

Slide 9

Slide 9 text

すーぱーらぶりーアプリ にこの端末の全ての ファイルへのアクセスを タップジャッキング 高利回り投資物件 増加中!今すぐ 広告を見るだけでポイントが貯まる みんなはじめてる新サービス 詳細を見る

Slide 10

Slide 10 text

すーぱーらぶりーアプリ にこの端末の全ての ファイルへのアクセスを タップジャッキング 高利回り投資物件 増加中!今すぐ 広告を見るだけでポイントが貯まる みんなはじめてる新サービス 詳細を見る

Slide 11

Slide 11 text

すーぱーらぶりーアプリ にこの端末の全ての ファイルへのアクセスを タップジャッキング 高利回り投資物件 増加中!今すぐ 広告を見るだけでポイントが貯まる みんなはじめてる新サービス 詳細を見る

Slide 12

Slide 12 text

すーぱーらぶりーアプリ にこの端末の全ての ファイルへのアクセスを タップジャッキング 高利回り投資物件 増加中!今すぐ 広告を見るだけでポイントが貯まる みんなはじめてる新サービス 詳細を見る

Slide 13

Slide 13 text

実装

Slide 14

Slide 14 text

How To ● AndroidManifest.xml ● 重ねるViewの⽤意 ● WindowManagerで addView

Slide 15

Slide 15 text

How To ● AndroidManifest.xml ● 重ねるViewの⽤意 ● WindowManagerで addView

Slide 16

Slide 16 text

AndroidManifest.xml

Slide 17

Slide 17 text

How To ● AndroidManifest.xml ● 重ねるViewの⽤意 ● WindowManagerで addView

Slide 18

Slide 18 text

重ねるViewを⽤意 val view = LayoutInflater.from(context: this). inflate(R.layout.layout_overlay, root: null)

Slide 19

Slide 19 text

How To ● AndroidManifest.xml ● 重ねるViewの⽤意 ● WindowManagerで addView

Slide 20

Slide 20 text

W indow M anager で addView val view = LayoutInflater.from(context: this). inflate(R.layout.layout_overlay, root: null) val params = WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, PixelFormat.TRANSPARENT ) val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager windowManager.addView(view, params)

Slide 21

Slide 21 text

TYPE_STATUS_BAR TYPE_SEARCH_BAR TYPE_SYSTEM_ALERT TYPE_KEYGUARD TYPE_SYSTEM_DIALOG TYPE_KEYGUARD_DIALOG TYPE_INPUT_METHOD TYPE_INPUT_METHOD_DIALOG TYPE_WALLPAPER TYPE_STATUS_BAR_PANEL TYPE_SECURE_SYSTEM_OVERLAY TYPE_DRAG TYPE_STATUS_BAR_SUB_PANEL TYPE_POINTER TYPE_NAVIGATION_BAR TYPE_VOLUME_OVERLAY TYPE_BOOT_PROGRESS TYPE_INPUT_CONSUMER TYPE_NAVIGATION_BAR_PANEL TYPE_DISPLAY_OVERLAY TYPE_MAGNIFICATION_OVERLAY TYPE_PRIVATE_PRESENTATION TYPE_VOICE_INTERACTION TYPE_ACCESSIBILITY_OVERLAY TYPE_VOICE_INTERACTION_STARTING TYPE_DOCK_DIVIDER TYPE_QS_DIALOG TYPE_SCREENSHOT TYPE_PRESENTATION TYPE_APPLICATION_OVERLAY TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY TYPE_NOTIFICATION_SHADE TYPE_STATUS_BAR_ADDITIONAL TYPE_SYSTEM_DIALOG, TYPE_APPLICATION_ABOVE_SUB_PANEL, TYPE_APPLICATION_MEDIA_OVERLAY, TYPE_APPLICATION_ATTACHED_DIALOG, TYPE_APPLICATION_SUB_PANEL, TYPE_APPLICATION_MEDIA, TYPE_APPLICATION_PANEL, TYPE_DRAWN_APPLICATION, TYPE_APPLICATION_STARTING, TYPE_APPLICATION, TYPE_BASE_APPLICATION, Application windows 4階層 Sub-windows 6階層 System windows 32階層

Slide 22

Slide 22 text

W indow M anager で addView val view = LayoutInflater.from(context: this). inflate(R.layout.layout_overlay, root: null) val params = WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, PixelFormat.TRANSPARENT ) val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager windowManager.addView(view, params)

Slide 23

Slide 23 text

タップジャッキング! すーぱーらぶりーアプリ にこの端末の全ての ファイルへのアクセスを 高利回り投資物件 増加中!今すぐ 広告を見るだけでポイントが貯まる みんなはじめてる新サービス 詳細を見る

Slide 24

Slide 24 text

これは過去のおはなし ● Android 6 ○ TYPE_SYSTEM_ALERTの明⽰的な許可(設定画⾯を開いて) が必要になりました ● Android 7 ○ TYPE_SYSTEM_ALERT使⽤制限 ○ TYPE_APPLICATION_OVERLAYの仮導⼊ ■ TYPE_SYSTEM_ALERTよりも下のレイヤー ● Android 8 ○ TYPE_APPLICATION_OVERLAYが正式に導⼊ ■ タップジャッキングはこの変更で完全に終了!!! ● でもまだTYPE_APPLICATION_OVERLAYが残ってる!!!!!!!

Slide 25

Slide 25 text

これは過去のおはなし ● Android 6 ○ TYPE_SYSTEM_ALERTの明⽰的な許可(設定画⾯を開いて) が必要になりました ● Android 7 ○ TYPE_SYSTEM_ALERT使⽤制限 ○ TYPE_APPLICATION_OVERLAYの仮導⼊ ■ TYPE_SYSTEM_ALERTよりも下のレイヤー ● Android 8 ○ TYPE_APPLICATION_OVERLAYが正式に導⼊ ■ タップジャッキングはこの変更で完全に終了!!! ● でもまだTYPE_APPLICATION_OVERLAYが残ってる!!!!!!!

Slide 26

Slide 26 text

W indow M anager で addView val view = LayoutInflater.from(context: this). inflate(R.layout.layout_overlay, root: null) val params = WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, PixelFormat.TRANSPARENT ) val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager windowManager.addView(view, params)

Slide 27

Slide 27 text

これは過去のおはなし ● Android 6 ○ TYPE_SYSTEM_ALERTの明⽰的な許可(設定画⾯を開いて) が必要になりました ● Android 7 ○ TYPE_SYSTEM_ALERT使⽤制限 ○ TYPE_APPLICATION_OVERLAYの仮導⼊ ■ TYPE_SYSTEM_ALERTよりも下のレイヤー ● Android 8 ○ TYPE_APPLICATION_OVERLAYが正式に導⼊ ■ タップジャッキングはこの変更で完全に終了!!! ● でもまだTYPE_APPLICATION_OVERLAYが残ってる!!!!!!!

Slide 28

Slide 28 text

TYPE_STATUS_BAR TYPE_SEARCH_BAR TYPE_SYSTEM_ALERT TYPE_KEYGUARD TYPE_SYSTEM_DIALOG TYPE_KEYGUARD_DIALOG TYPE_INPUT_METHOD TYPE_INPUT_METHOD_DIALOG TYPE_WALLPAPER TYPE_STATUS_BAR_PANEL TYPE_SECURE_SYSTEM_OVERLAY TYPE_DRAG TYPE_STATUS_BAR_SUB_PANEL TYPE_POINTER TYPE_NAVIGATION_BAR TYPE_VOLUME_OVERLAY TYPE_BOOT_PROGRESS TYPE_INPUT_CONSUMER TYPE_NAVIGATION_BAR_PANEL TYPE_DISPLAY_OVERLAY TYPE_MAGNIFICATION_OVERLAY TYPE_PRIVATE_PRESENTATION TYPE_VOICE_INTERACTION TYPE_ACCESSIBILITY_OVERLAY TYPE_VOICE_INTERACTION_STARTING TYPE_DOCK_DIVIDER TYPE_QS_DIALOG TYPE_SCREENSHOT TYPE_PRESENTATION TYPE_APPLICATION_OVERLAY TYPE_ACCESSIBILITY_MAGNIFICATION_OVERLAY TYPE_NOTIFICATION_SHADE TYPE_STATUS_BAR_ADDITIONAL TYPE_SYSTEM_DIALOG, TYPE_APPLICATION_ABOVE_SUB_PANEL, TYPE_APPLICATION_MEDIA_OVERLAY, TYPE_APPLICATION_ATTACHED_DIALOG, TYPE_APPLICATION_SUB_PANEL, TYPE_APPLICATION_MEDIA, TYPE_APPLICATION_PANEL, TYPE_DRAWN_APPLICATION, TYPE_APPLICATION_STARTING, TYPE_APPLICATION, TYPE_BASE_APPLICATION, Application windows 4階層 Sub-windows 6階層 System windows 32階層 システムダイアログ TYPE_SYSTEM_ALERT TYPE_APPLICATION_OVERLAY

Slide 29

Slide 29 text

これは過去のおはなし ● Android 6 ○ TYPE_SYSTEM_ALERTの明⽰的な許可(設定画⾯を開いて) が必要になりました ● Android 7 ○ TYPE_SYSTEM_ALERT使⽤制限 ○ TYPE_APPLICATION_OVERLAYの仮導⼊ ■ TYPE_SYSTEM_ALERTよりも下のレイヤー ● Android 8 ○ TYPE_APPLICATION_OVERLAYが正式に導⼊ ■ タップジャッキングはこの変更で完全に終了!!! ● でもまだTYPE_APPLICATION_OVERLAYが残ってる!!!!!!!

Slide 30

Slide 30 text

これは過去のおはなし ● Android 6 ○ TYPE_SYSTEM_ALERTの明⽰的な許可(設定画⾯を開いて) が必要になりました ● Android 7 ○ TYPE_SYSTEM_ALERT使⽤制限 ○ TYPE_APPLICATION_OVERLAYの仮導⼊ ■ TYPE_SYSTEM_ALERTよりも下のレイヤー ● Android 8 ○ TYPE_APPLICATION_OVERLAYが正式に導⼊ ■ タップジャッキングはこの変更で完全に終了!!! ● でもまだTYPE_APPLICATION_OVERLAYが残ってる!!!!!!! ForegroundServiceを起動して Notificationエリアに 起動中の旨を表⽰が必須に! ベースにしているウィンドウが GONE / INVISIBLEだと タッチイベントを透過できない

Slide 31

Slide 31 text

ここからが本題だよ!

Slide 32

Slide 32 text

パーミッションを 許可してもらお STORES 決済 Android Yamaton / Kei Yamamoto

Slide 33

Slide 33 text

パーミッションを 許可してもらお STORES 決済 Android Yamaton / Kei Yamamoto

Slide 34

Slide 34 text

パーミッションを 許可してもらお STORES 決済 Android Yamaton / Kei Yamamoto Android OSの バージョンアップで 何が対策されたの かな?

Slide 35

Slide 35 text

Android 10 ・バックグラウンドアプリ(Serviceを利用)の制限 ・オーバーレイ禁止 ・通信制限

Slide 36

Slide 36 text

Android 11 ・バブルAPIの導入 ・SYSTEM_ALERT_WINDOW パーミッションを求めるアプリは全て悪!

Slide 37

Slide 37 text

Android 12 ・SYSTEM_ALERT_WINDOWの制限強化 ・オーバーレイ表示時に通知を表示 ・通知から許可しないと表示できない

Slide 38

Slide 38 text

Android 13 ・クロスアプリケーションアクティビティ埋め込み ・ホストアプリとゲストアプリ ・AndroidManifestで明示的に許可

Slide 39

Slide 39 text

Android 13 ・クロスアプリケーションアクティビティ埋め込み ・ホストアプリとゲストアプリ ・AndroidManifestで明示的に許可

Slide 40

Slide 40 text

安心だね!

Slide 41

Slide 41 text

Thank you!