Download - Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT
![Page 1: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/1.jpg)
Android 6.0 新しいパーミッションモデルへの対応
2015/10/17 DevFest Kyoto
![Page 2: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/2.jpg)
self-introduction
twitter @KatsukiNakatani
Facebook Katsuki.Nakataniお仕事大阪の SIer でインフラ ( サーバーとかルーターとか。。。 ) のエンジニアをしてます
個人でアプリ作ってますAndr
oidWindows
Store
中谷 克紀名前
![Page 3: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/3.jpg)
パーミッションモデルの変更従来までのパーミッションモデル
インストール時の同意で Manifest のすべてのパーミッションが付与されユーザは任意でパーミッションを剥奪することが出来ない
今まであった問題点パーミッションを追加すると、自動更新できず ( 再度同意が必要 )アプリが古いまま利用されているケースがある。
※ 例えば電話帳を参照するアプリがあったとして、アプリ更新時に 位置情報が欲しいのでパーミッションを追加するとか
![Page 4: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/4.jpg)
パーミッションモデルの変更6.0 からのパーミッション
インストール時に危険 (※) ではないパーミッションのみ付与し危険なパーミッションは付与しない危険なパーミッションはアプリ内で、ユーザーが許可する
https://support.google.com/googleplay/answer/6270602?hl=ja
Android6.0 以降向けに開発されたアプリ?危険か危険じゃないパーミッションかどうかはこちらで確認http://developer.android.com/intl/ja/guide/topics/security/permissions.html#perm-groupspermission_group に属しているパーミッションとグループに属さないけど、 PROTECTION_DANGEROUS のやつっぽい
![Page 5: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/5.jpg)
TargetSDK で動作が変わるTargetSDK/ 権限 端末の OS 通常のパーミッション 危険なパーミッション
236.0
インストール時に付与 付与されない<23 インストール時に付与 インストール時に付与
- 6.0 未満 インストール時に付与 インストール時に付与アプリ対応しなくても 6.0 端末でパーミッション関係は問題なさそう
![Page 6: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/6.jpg)
違う。そうじゃない。
![Page 7: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/7.jpg)
パーミッションの剥奪が可能TargetSDK が 23 未満のアプリでも、 6.0 では後から設定画面でパーミッションを剥奪することが可能( 危険なパーミッション以外は剥奪できない )
危険なパーミッションを利用する端末は必然的に対応する必要がある
![Page 8: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/8.jpg)
でもね?Android6.0 の端末が出るのなんて半年ぐらい先じゃないの?
アップデートされたら本気出すわ〜とか思ってません?
![Page 9: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/9.jpg)
日本で使える Android6.0 端末結構でるよね?発売日 発売元 / キャリア 端末
2015/10 Google Nexus5X2015/10~11 Google Nexus6P
2015/10 docomo Nexus5X2015/10/20 Y!mobile Nexus5X2015/10~11 Softbank Nexus6P
直近で発売予定の端末
配信 発売元 / キャリア 端末済 Google Nexus5済 Google Nexus6済 Google Nexus7(2013)済 Google Nexus9済 Google NexusPlayer済 Y!mobile Nexus5
アップデート端末
Nexusばっかりじゃんと思いますが新しいパーミッションモデルの対応をしましょう
![Page 10: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/10.jpg)
パーミッションフロー ( 例 )
パーミッションが許可されているかチェック
処理継続
パーミッション要求YES
NO
ユーザーが許可した ?YES
エラーメッセージ等NO
![Page 11: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/11.jpg)
パーミッションフロー ( 例 )
パーミッションが許可されているかチェック許可されていれば発信
パーミッションがない場合、パーミッションを要求するダイアログを上げる
![Page 12: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/12.jpg)
パーミッションフロー ( 例 )
結果を callback で受け取り、許可だったか確認し許可なら発信パーミッションがない場合、 Toast 表示
Permission が一つの場合はいいけど、増えるとコードが汚くなる
![Page 13: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/13.jpg)
PermissionsDispatcher を使ってみよう
・アノテーションで、パーミッション処理を簡略化・コードが全体的に見やすくなる・ generate されたコードが見えるため、動きがおかしい場合も追いやすい
https://github.com/hotchemi/PermissionsDispatcher
この資料は version1.2.1 を元に書いていますbuild.gradle への dependency などの追加は github 参照してください
![Page 14: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/14.jpg)
PermissionsDispatcher( 使い方 )1. パーミッションチェックする Activity or Fragment に @RuntimePermissions を追加
2. パーミッションがほしいメソッドに @NeedsPermission(“< ほしいパーミッション >”) を追加
3 . ダイアログで拒否した場合に発生させたいメソッドに @DeniedPermission(“< ほしいパーミッション >”) を追加 ( 任意 )
4 . ビルドします5 . クラス名 PermissionsDispatcher が自動生成されます
![Page 15: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/15.jpg)
PermissionsDispatcher( 使い方 )6.onRequestPermissionResult の callback に先ほど generate されたメソッドを呼ぶように追加します
7.最後にパーミッションを要求したいメソッドを generate されたメソッドで呼び出しますクラス名 PermissionsDispatcher. メソッド名 WithCheck(Context context)
※他にも Optionalで使えるパーミッションがあるので githubで確認してみてください
![Page 16: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/16.jpg)
全体の比較自前で実装すると if 文も結構増えるよね。。
![Page 17: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/17.jpg)
コード比較PermissionsDispatcher を使ったら if 文もなく、各役割ごとのメソッドに分かれるので見やすい!
![Page 18: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT](https://reader036.vdocuments.net/reader036/viewer/2022062901/58f27e9c1a28abe03d8b45d5/html5/thumbnails/18.jpg)
まとめ危険なパーミッション使ってるアプリが有るのであれば、対応しよう! http://developer.android.com/intl/ja/guide/topics/security/permissions.html#perm-groups
PermissionsDispatcher 使ったほうがコードの見通しが良くなるよ