android6.0新しいパーミッションモデルへの対応_devfest kyoto lt

18
Android 6.0 新新新新新新新新新新新新新新新新新 2015/10/17 DevFest Kyoto

Upload: katsuki-nakatani

Post on 16-Apr-2017

960 views

Category:

Environment


1 download

TRANSCRIPT

Page 1: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

Android 6.0 新しいパーミッションモデルへの対応

2015/10/17 DevFest Kyoto

Page 2: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

self-introduction

twitter @KatsukiNakatani

Facebook Katsuki.Nakataniお仕事大阪の SIer でインフラ ( サーバーとかルーターとか。。。 ) のエンジニアをしてます

個人でアプリ作ってますAndr

oidWindows

Store

中谷 克紀名前

Page 3: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

パーミッションモデルの変更従来までのパーミッションモデル

インストール時の同意で Manifest のすべてのパーミッションが付与されユーザは任意でパーミッションを剥奪することが出来ない

今まであった問題点パーミッションを追加すると、自動更新できず ( 再度同意が必要 )アプリが古いまま利用されているケースがある。

※ 例えば電話帳を参照するアプリがあったとして、アプリ更新時に 位置情報が欲しいのでパーミッションを追加するとか

Page 4: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

パーミッションモデルの変更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

TargetSDK で動作が変わるTargetSDK/ 権限 端末の OS 通常のパーミッション 危険なパーミッション

236.0

インストール時に付与 付与されない<23 インストール時に付与 インストール時に付与

- 6.0 未満 インストール時に付与 インストール時に付与アプリ対応しなくても 6.0 端末でパーミッション関係は問題なさそう

Page 6: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

違う。そうじゃない。

Page 7: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

パーミッションの剥奪が可能TargetSDK が 23 未満のアプリでも、 6.0 では後から設定画面でパーミッションを剥奪することが可能( 危険なパーミッション以外は剥奪できない )

危険なパーミッションを利用する端末は必然的に対応する必要がある

Page 8: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

でもね?Android6.0 の端末が出るのなんて半年ぐらい先じゃないの?

アップデートされたら本気出すわ〜とか思ってません?

Page 9: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

日本で使える 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

パーミッションフロー ( 例 )

パーミッションが許可されているかチェック

処理継続

パーミッション要求YES

NO

ユーザーが許可した ?YES

エラーメッセージ等NO

Page 11: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

パーミッションフロー ( 例 )

パーミッションが許可されているかチェック許可されていれば発信

パーミッションがない場合、パーミッションを要求するダイアログを上げる

Page 12: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

パーミッションフロー ( 例 )

結果を callback で受け取り、許可だったか確認し許可なら発信パーミッションがない場合、 Toast 表示

Permission が一つの場合はいいけど、増えるとコードが汚くなる

Page 13: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

PermissionsDispatcher を使ってみよう

・アノテーションで、パーミッション処理を簡略化・コードが全体的に見やすくなる・ generate されたコードが見えるため、動きがおかしい場合も追いやすい

https://github.com/hotchemi/PermissionsDispatcher

この資料は version1.2.1 を元に書いていますbuild.gradle への dependency などの追加は github 参照してください

Page 14: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

PermissionsDispatcher( 使い方 )1. パーミッションチェックする Activity or Fragment に @RuntimePermissions を追加

2. パーミッションがほしいメソッドに @NeedsPermission(“< ほしいパーミッション >”) を追加

3 . ダイアログで拒否した場合に発生させたいメソッドに @DeniedPermission(“< ほしいパーミッション >”) を追加 ( 任意 )

4 . ビルドします5 . クラス名 PermissionsDispatcher が自動生成されます

Page 15: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

PermissionsDispatcher( 使い方 )6.onRequestPermissionResult の callback に先ほど generate されたメソッドを呼ぶように追加します

7.最後にパーミッションを要求したいメソッドを generate されたメソッドで呼び出しますクラス名 PermissionsDispatcher. メソッド名 WithCheck(Context context)

※他にも Optionalで使えるパーミッションがあるので githubで確認してみてください

Page 16: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

全体の比較自前で実装すると if 文も結構増えるよね。。

Page 17: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

コード比較PermissionsDispatcher を使ったら if 文もなく、各役割ごとのメソッドに分かれるので見やすい!

Page 18: Android6.0新しいパーミッションモデルへの対応_DevFest Kyoto LT

まとめ危険なパーミッション使ってるアプリが有るのであれば、対応しよう! http://developer.android.com/intl/ja/guide/topics/security/permissions.html#perm-groups

PermissionsDispatcher 使ったほうがコードの見通しが良くなるよ