SlideShare une entreprise Scribd logo
1  sur  26
Android 6.0 Marshmallow
App Permissions 応用編
2015/10/09
神原 健一(@korodroid)
2
自己紹介
l 神原 健一 (@korodroid)
l モバイル関連活動
l 国内外での講演活動
•Droidcon Stockholm 2014
•Droidcon Spain 2014
•Droidcon Amsterdam 2013
•Droidcon Paris 2013
•Smartphone & Tablet 2014 Spring Tokyo
•Developers Summit 2015
l 書籍執筆
l ブログ「Mobile Dev Blog」
l NTTソフトウェア(株)所属
• App Permissions(アプリパーミッション)
• Fingerprint Authentication(指紋認証)
• Auto Backup for Apps(アプリバックアップ)
• Direct Share(ダイレクト共有) 
• Doze Mode(バッテリー改善) 
Android 6.0 Marshmallow(抜粋)
• Cloud Test Lab
• Now on Tap
• Data Binding
• Android Design Support Library
【その他のトピック】
3
3
Android 6.0正式版
(2015/10/5リリース)
4
セカイフォン(リアルタイム翻訳)
http://www.iplatform.org/blog/sekai-phone
5
Android 6.0対応実施
[時期]
適用領域
の拡大
最新バージョン
への追随
6
Androidアプリのパーミッション
バージョン毎の振る舞い
7
電話帳アプリを題材に…
• ボタン押下で電話帳の読み書き。
• AndroidManifest.xmlにて、

uses-permissionは、正しく定義済。
8
Android 6.0未満では?
• Play Storeからのダウンロード時に

ユーザ確認実施。
• 1度許可すると後で変更不可能。

(アプリを削除するしかない)
• アプリ開発者の特別の考慮不要。

インストール時
9
• アプリが利用する特殊アクセスを

ユーザが制御できる機能。
• 1度許可しても後で変更可能。
• アプリ開発者の考慮要。

Android 6.0以降では?
実行時
10
Android 6.0 Marshmallow
App Permissions 基礎編
11
App Permissions(アプリパーミッション)
• アプリが利用する特殊アクセスを

ユーザが制御できる機能。
• 1度許可しても後で変更も可能。
• アプリ開発者の考慮要。

12
App Permissionsのコード例
// 連絡帳アクセスのパーミッションリクエスト
if (checkSelfPermission(Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS},
MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}
// パーミッション取得結果のコールバック
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
}
}
}
}
13
App Permissions(許可取得の流れ)
• 一般アプリの場合
• アプリのインストール
PROTECTION_NORMAL
まで許可(バイブ鳴動等)
• アプリの起動
• 必要なとき、機能リクエスト
• 同機能を利用可能に
• 連絡先へのアクセスなど
→requestPermissions呼び出し
• ユーザへの許可依頼
14
App Permissionsの許可取得時の振る舞い
■パーミッション状態管理ファイル
/data/system/users/{ユーザID}/runtime-permissions.xml

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<runtime-permissions …>
<!— 中略 —>
<pkg name="org.iplatform.android.apppermissionsample">
<item name="android.permission.READ_CONTACTS" granted="true" flags="0" />
</pkg>
</runtime-permissions>
15
• 右アプリで上から順に利用すると
• 電話帳アクセス(Read)
ユーザからの許可取得:必要
• 電話帳アクセス(Write)
• カメラ機能
App Permissions(グループの考え方)
ユーザからの許可取得:不要

(同一グループの許可取得済のため)
ユーザからの許可取得:必要
16
パーミッショングループとパーミッションの関係
パーミッショングループ パーミッション
android.permission-­‐group.CALENDAR
android.permission.READ_CALENDAR
android.permission.WRITE_CALENDAR
android.permission-­‐group.CAMERA android.permission.CAMERA
android.permission-­‐group.CONTACTS
android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.GET_ACCOUNTS
android.permission-­‐group.LOCATION
android.permission.ACCESS_FINE_LOCATION
android.permission.ACCESS_COARSE_LOCATION
パーミッショングループとパーミッション例(抜粋)

17
パーミッショングループと設定
パーミッショングループ
android.permission-­‐group.SMS
android.permission-­‐group.CAMERA
android.permission-­‐group.CALENDAR
android.permission-­‐group.STORAGE
android.permission-­‐group.SENSORS
android.permission-­‐group.MICROPHONE
android.permission-­‐group.LOCATION
android.permission-­‐group.CONTACTS
android.permission-­‐group.PHONE
18
• 電話帳+カメラ機能利用
requestPermissions(new String[]{
Manifest.permission.READ_CONTACTS,
Manifest.permission.CAMERA},
MULTIPLE_REQUEST);
• 電話帳(Read)リクエスト
複数パーミッションのリクエスト
ユーザ選択結果のコールバック
onRequestPermissionsResult(

int requestCode,
String permissions[],

int[] grantResults)
• カメラ機能リクエスト
今回は仮に「許可」
今回は仮に「許可しない」
19
Android 6.0 Marshmallow
App Permissions 実践編
20
Android 6.0対応の注意点(パーミッション観点)
ポイント①
納得してもらえるパーミッション?
ポイント②
バージョン毎の振る舞い
ポイント③
パーミッションの依頼タイミング
ポイント④
ユーザ操作内容による影響
21
ポイント①納得してもらえるパーミッション?
そもそもパーミッションの使い方は適切?!
22
ポイント①納得してもらえるパーミッション?
必要ならユーザに理解してもらえるように説明
ref.) shouldShowRequestPermissionRational
23
ポイント②バージョン毎の振る舞い
端末OS ver.<6.0 端末OS ver.>=6.0
targetSdkVersion<23 旧パーミッションの振る舞い
新旧パーミッションの振る舞い
・インストール時点:許可確認有
・特殊機能利用前(初回):許可要求不要
・パーミッション変更:可能
targetSdkVersion>=23 旧パーミッションの振る舞い
新パーミッションの振る舞い	
  
・インストール時点:許可確認無	
  
・特殊機能利用前(初回):許可要求必須
・パーミッション変更:可能
※Android 6.0 MのAPIレベル=23
• 端末OS ver.<6.0→下位互換性考慮(Support Library v23)
• 端末OS ver.>=6.0→新バーミッションの実装必須
24
ポイント③パーミッションの依頼タイミング
取得タイミング 特徴 補足
(A)初回起動時
全てのパーミッションを起動時
(チュートリアル後等)に取得
・数が多いと、ユーザ操作が面倒
・対応工数は、小
(B)該当機能の利用直前 該当機能を利用する直前に取得
・ユーザに理解してもらい易いが、
ばらばら確認するとユーザは面倒	
  
・対応工数は、中
(C)(A)+(B)の併用
頻繁に利用される機能(メイン
機能)は(A)で、まれに使う機能
(オプション機能)は(B)
・バランスが取れた方式	
  
・対応工数は、大
採用すべきか方式は、アプリ次第(特殊機能の内容や数)
25
ポイント④ユーザ操作内容による影響
パーミッション付与リクエスト
→不許可 or 許可
設定からのパーミッション変更
→あとで変更される可能性
26
おわり
•Facebook:http://fb.com/kanbara.kenichi
•Google+:+Kenichi Kambara
•LinkedIn:http://www.linkedin.com/in/korodroid
•Twitter:@korodroid
ご清聴ありがとうございました。
(執筆、講演依頼などのお話がございましたら、

ご連絡をお願い致します。)

Contenu connexe

Tendances

Android Wear最新トピック+α
Android Wear最新トピック+αAndroid Wear最新トピック+α
Android Wear最新トピック+α
Kenichi Kambara
 
インフラジスティックス Wpf コントロールを用いたリッチ アプリケーション開発
インフラジスティックス Wpf コントロールを用いたリッチ アプリケーション開発インフラジスティックス Wpf コントロールを用いたリッチ アプリケーション開発
インフラジスティックス Wpf コントロールを用いたリッチ アプリケーション開発
Satoru Yamaguchi
 
最近のモバイル新Osを比較してみた
最近のモバイル新Osを比較してみた最近のモバイル新Osを比較してみた
最近のモバイル新Osを比較してみた
Akio Kondo
 

Tendances (20)

Android Wear 最新トピック
Android Wear 最新トピックAndroid Wear 最新トピック
Android Wear 最新トピック
 
Android Wearの概要とアプリ開発の基礎
Android Wearの概要とアプリ開発の基礎Android Wearの概要とアプリ開発の基礎
Android Wearの概要とアプリ開発の基礎
 
[展開用]Android wear abc2014w-kenichikambara
[展開用]Android wear abc2014w-kenichikambara[展開用]Android wear abc2014w-kenichikambara
[展開用]Android wear abc2014w-kenichikambara
 
Android Wear最新トピック+α
Android Wear最新トピック+αAndroid Wear最新トピック+α
Android Wear最新トピック+α
 
Android Wearアプリ開発経験談
Android Wearアプリ開発経験談Android Wearアプリ開発経験談
Android Wearアプリ開発経験談
 
Android Wearアプリ プレビュー版→正式版への移植ガイド
Android Wearアプリ プレビュー版→正式版への移植ガイドAndroid Wearアプリ プレビュー版→正式版への移植ガイド
Android Wearアプリ プレビュー版→正式版への移植ガイド
 
Cordova利用アプリ開発経験談
Cordova利用アプリ開発経験談Cordova利用アプリ開発経験談
Cordova利用アプリ開発経験談
 
Can we live in a pure Swift world?
Can we live in a pure Swift world?Can we live in a pure Swift world?
Can we live in a pure Swift world?
 
20161125 Unity-Android連携の発表資料
20161125 Unity-Android連携の発表資料20161125 Unity-Android連携の発表資料
20161125 Unity-Android連携の発表資料
 
Jag201610 API Diffで見るNougat
Jag201610   API Diffで見るNougat Jag201610   API Diffで見るNougat
Jag201610 API Diffで見るNougat
 
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
minneにおけるテスト〜リリース〜リリース後にやっている事の紹介
 
20160902 unity勉強会発表資料
20160902 unity勉強会発表資料20160902 unity勉強会発表資料
20160902 unity勉強会発表資料
 
20160723 unibook lt大会_発表資料(HoloLensのアプリ開発)
20160723 unibook lt大会_発表資料(HoloLensのアプリ開発)20160723 unibook lt大会_発表資料(HoloLensのアプリ開発)
20160723 unibook lt大会_発表資料(HoloLensのアプリ開発)
 
インフラジスティックス Wpf コントロールを用いたリッチ アプリケーション開発
インフラジスティックス Wpf コントロールを用いたリッチ アプリケーション開発インフラジスティックス Wpf コントロールを用いたリッチ アプリケーション開発
インフラジスティックス Wpf コントロールを用いたリッチ アプリケーション開発
 
Meta1のSLAM機能を試してみた
Meta1のSLAM機能を試してみたMeta1のSLAM機能を試してみた
Meta1のSLAM機能を試してみた
 
2019年版 Infragistics Ultimate UI for WPF概要
2019年版 Infragistics Ultimate UI for WPF概要2019年版 Infragistics Ultimate UI for WPF概要
2019年版 Infragistics Ultimate UI for WPF概要
 
用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法用途に合わせたアニメーションの実装方法
用途に合わせたアニメーションの実装方法
 
最近のモバイル新Osを比較してみた
最近のモバイル新Osを比較してみた最近のモバイル新Osを比較してみた
最近のモバイル新Osを比較してみた
 
Android Wearの未来予想図
Android Wearの未来予想図Android Wearの未来予想図
Android Wearの未来予想図
 
パーミッションモデルの過渡期への対応
パーミッションモデルの過渡期への対応パーミッションモデルの過渡期への対応
パーミッションモデルの過渡期への対応
 

Similaire à [Stack Overflow Dev Days 2015]Android 6.0 Marshmallow App Permissions 応用編

[Jagys]android41+開発ツール紹介
[Jagys]android41+開発ツール紹介[Jagys]android41+開発ツール紹介
[Jagys]android41+開発ツール紹介
Kenichi Kambara
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
Tak Inamori
 
Windows Phoneの 企業内活用方法、 社内向けアプリ開発と展開
Windows Phoneの企業内活用方法、社内向けアプリ開発と展開Windows Phoneの企業内活用方法、社内向けアプリ開発と展開
Windows Phoneの 企業内活用方法、 社内向けアプリ開発と展開
Akira Onishi
 
Html5 seminar 1_pac
Html5 seminar 1_pacHtml5 seminar 1_pac
Html5 seminar 1_pac
1PAC. INC.
 

Similaire à [Stack Overflow Dev Days 2015]Android 6.0 Marshmallow App Permissions 応用編 (20)

[Jagys]android41+開発ツール紹介
[Jagys]android41+開発ツール紹介[Jagys]android41+開発ツール紹介
[Jagys]android41+開発ツール紹介
 
Trat_sprint2
Trat_sprint2Trat_sprint2
Trat_sprint2
 
[デブサミ2015]Androidで広がる世界&エンジニアとしての歩み
[デブサミ2015]Androidで広がる世界&エンジニアとしての歩み[デブサミ2015]Androidで広がる世界&エンジニアとしての歩み
[デブサミ2015]Androidで広がる世界&エンジニアとしての歩み
 
Androidとは何か
Androidとは何かAndroidとは何か
Androidとは何か
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
 
HTML5ハイブリッドアプリ開発のベストプラクティス
HTML5ハイブリッドアプリ開発のベストプラクティスHTML5ハイブリッドアプリ開発のベストプラクティス
HTML5ハイブリッドアプリ開発のベストプラクティス
 
Androidが起こしたオープン・イノベーション
Androidが起こしたオープン・イノベーションAndroidが起こしたオープン・イノベーション
Androidが起こしたオープン・イノベーション
 
Windows Phoneの 企業内活用方法、 社内向けアプリ開発と展開
Windows Phoneの企業内活用方法、社内向けアプリ開発と展開Windows Phoneの企業内活用方法、社内向けアプリ開発と展開
Windows Phoneの 企業内活用方法、 社内向けアプリ開発と展開
 
Devsumi2013 15-C-1 実践!スマホアプリのマネタイズ!! ~マーケット把握術と iPhone&Androidプログラミングテクニック~
Devsumi2013 15-C-1 実践!スマホアプリのマネタイズ!! ~マーケット把握術と iPhone&Androidプログラミングテクニック~Devsumi2013 15-C-1 実践!スマホアプリのマネタイズ!! ~マーケット把握術と iPhone&Androidプログラミングテクニック~
Devsumi2013 15-C-1 実践!スマホアプリのマネタイズ!! ~マーケット把握術と iPhone&Androidプログラミングテクニック~
 
DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会DroidKaigi 2018 参加報告会
DroidKaigi 2018 参加報告会
 
JaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッションJaSST'16 Tokyo モバイルセッション
JaSST'16 Tokyo モバイルセッション
 
Droidcon London2012 Speaker Experience
Droidcon London2012 Speaker ExperienceDroidcon London2012 Speaker Experience
Droidcon London2012 Speaker Experience
 
アンドロイド勉強会第二回 080525 3
アンドロイド勉強会第二回  080525 3アンドロイド勉強会第二回  080525 3
アンドロイド勉強会第二回 080525 3
 
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and GomobileGo goes Mobile: Quick Exploration on Go 1.5 and Gomobile
Go goes Mobile: Quick Exploration on Go 1.5 and Gomobile
 
AndroidでDIxAOP
AndroidでDIxAOPAndroidでDIxAOP
AndroidでDIxAOP
 
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)
 
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについてネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
ネイティブとHTML5を スマートに連携させる設計と 実装のノウハウについて
 
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
Visual Studio 2013 と HTML5 で実現するマルチデバイス/マルチプラットフォーム アプリの開発
 
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
リモート・スマホ・レンタル(第2回 Androidテスト祭り)リモート・スマホ・レンタル(第2回 Androidテスト祭り)
リモート・スマホ・レンタル(第2回 Androidテスト祭り)
 
Html5 seminar 1_pac
Html5 seminar 1_pacHtml5 seminar 1_pac
Html5 seminar 1_pac
 

Plus de Kenichi Kambara

Hello Flutterの次におさえたいFlutterのポイントその2
Hello Flutterの次におさえたいFlutterのポイントその2Hello Flutterの次におさえたいFlutterのポイントその2
Hello Flutterの次におさえたいFlutterのポイントその2
Kenichi Kambara
 
Hello Flutterの次におさえたいFlutterのポイント
Hello Flutterの次におさえたいFlutterのポイントHello Flutterの次におさえたいFlutterのポイント
Hello Flutterの次におさえたいFlutterのポイント
Kenichi Kambara
 

Plus de Kenichi Kambara (20)

Hello Flutterの次におさえたい Flutterのポイント その6 (レイアウト編)
Hello Flutterの次におさえたい Flutterのポイント その6 (レイアウト編)Hello Flutterの次におさえたい Flutterのポイント その6 (レイアウト編)
Hello Flutterの次におさえたい Flutterのポイント その6 (レイアウト編)
 
Hello Flutter”の次におさえたい Flutterのポイント その5
Hello Flutter”の次におさえたい Flutterのポイント その5Hello Flutter”の次におさえたい Flutterのポイント その5
Hello Flutter”の次におさえたい Flutterのポイント その5
 
[ABC2018Spring]Flutterアプリ開発入門
[ABC2018Spring]Flutterアプリ開発入門[ABC2018Spring]Flutterアプリ開発入門
[ABC2018Spring]Flutterアプリ開発入門
 
“Hello Flutter”の次におさえたい Flutterのポイント その4
“Hello Flutter”の次におさえたい Flutterのポイント その4“Hello Flutter”の次におさえたい Flutterのポイント その4
“Hello Flutter”の次におさえたい Flutterのポイント その4
 
[Google I/O 2018 Highlights] Sandbox
[Google I/O 2018 Highlights] Sandbox[Google I/O 2018 Highlights] Sandbox
[Google I/O 2018 Highlights] Sandbox
 
[Google I/O 2018 Highlights] Flutter / WearOS
[Google I/O 2018 Highlights] Flutter / WearOS[Google I/O 2018 Highlights] Flutter / WearOS
[Google I/O 2018 Highlights] Flutter / WearOS
 
"Hello Flutter"の次におさえたいFlutterのポイントその3
"Hello Flutter"の次におさえたいFlutterのポイントその3"Hello Flutter"の次におさえたいFlutterのポイントその3
"Hello Flutter"の次におさえたいFlutterのポイントその3
 
Hello Flutterの次におさえたいFlutterのポイントその2
Hello Flutterの次におさえたいFlutterのポイントその2Hello Flutterの次におさえたいFlutterのポイントその2
Hello Flutterの次におさえたいFlutterのポイントその2
 
I/Oへの期待+海外渡航持ち物Tips
I/Oへの期待+海外渡航持ち物TipsI/Oへの期待+海外渡航持ち物Tips
I/Oへの期待+海外渡航持ち物Tips
 
Hello Flutterの次におさえたいFlutterのポイント
Hello Flutterの次におさえたいFlutterのポイントHello Flutterの次におさえたいFlutterのポイント
Hello Flutterの次におさえたいFlutterのポイント
 
Developing Android Apps for Google Assistant
Developing Android Apps for Google AssistantDeveloping Android Apps for Google Assistant
Developing Android Apps for Google Assistant
 
Google Assistant対応アプリ開発3つのポイント
Google Assistant対応アプリ開発3つのポイントGoogle Assistant対応アプリ開発3つのポイント
Google Assistant対応アプリ開発3つのポイント
 
10分で作るGoogle Assistant対応アプリ
10分で作るGoogle Assistant対応アプリ10分で作るGoogle Assistant対応アプリ
10分で作るGoogle Assistant対応アプリ
 
[Kotlin勉強会] Hello Kotlinの次におさえたいKotlinの勘所
[Kotlin勉強会] Hello Kotlinの次におさえたいKotlinの勘所[Kotlin勉強会] Hello Kotlinの次におさえたいKotlinの勘所
[Kotlin勉強会] Hello Kotlinの次におさえたいKotlinの勘所
 
Android O (Picture In Picture)入門+実装例
Android O (Picture In Picture)入門+実装例Android O (Picture In Picture)入門+実装例
Android O (Picture In Picture)入門+実装例
 
AndroidアプリのKotlin移行時に遭遇した問題と対処例
AndroidアプリのKotlin移行時に遭遇した問題と対処例AndroidアプリのKotlin移行時に遭遇した問題と対処例
AndroidアプリのKotlin移行時に遭遇した問題と対処例
 
Android O (Beta) Topics
Android O (Beta) TopicsAndroid O (Beta) Topics
Android O (Beta) Topics
 
Publishing Android Wear 2.0 Apps
Publishing Android Wear 2.0 AppsPublishing Android Wear 2.0 Apps
Publishing Android Wear 2.0 Apps
 
Android Studio 2.3 New Features
Android Studio 2.3 New FeaturesAndroid Studio 2.3 New Features
Android Studio 2.3 New Features
 
Android 7.0 Nougat マルチウィンドウ解説+α
Android 7.0 Nougat マルチウィンドウ解説+αAndroid 7.0 Nougat マルチウィンドウ解説+α
Android 7.0 Nougat マルチウィンドウ解説+α
 

[Stack Overflow Dev Days 2015]Android 6.0 Marshmallow App Permissions 応用編