SlideShare a Scribd company logo
1 of 70
Download to read offline
App  Permissions  
-‐‑‒  M  Preview  -‐‑‒
What's  New  in  Android  (I/O  2015)
About  Me
• Shinobu  Okano  
• @operandoOS  
• Mercari,  Inc.  
• Android  Engineer  
• Garum

https://github.com/operando/Garum
App  Permissions  
Android  M
Android  M  Permissions
https://www.youtube.com/watch?v=f17qe9vZ8RM
Permissions
http://developer.android.com/preview/features/
runtime-‐‑‒permissions.html
Google  I/O  2015    
新しいパミッションモデルの超訳
http://www.taosoftware.co.jp/blog/2015/06/google-‐‑‒i-‐‑‒
o-‐‑‒2015-‐‑‒new-‐‑‒permission_̲model.html
だいたい  
この3つ読めば、問題ない
App  Permissions?
App  Permissions?
New  App  Permissions  Model  
App  Permissions?
“user  does  not  have  to  grant  any  
permissions  when  they    
install  or  upgrade  the  app.  “
App  Permissions?
“Instead,  the  app  requests  
permissions  as  it  needs  them,  
  and  the  system  shows  a  dialog  to  
the  user  asking  for  the  permission.  “
App  Permissions?
App  Permissions?
“If  an  app  supports  the  new  
permissions  model,  it  can  still  be  
installed  and  run  on  devices  running  
older  versions  of  Android,  using  the  old  
permissions  model  on  those  devices.“
App  Permissions?
“Users  can  revoke  an  app's  
permissions  at  any  time.“
Permissions  are  Revocable
App  Permissions?
“On  devices  running  the  M  Developer  Preview,  a  user  can  turn  off  permissions  for  any  app  
(including  legacy  apps)  from  the  app's  Settings  screen.  If  a  user  turns  off  permissions  for  
a  legacy  app,  the  system  silently  disables  the  appropriate  functionality.  When  the  app  
attempts  to  perform  an  operation  that  requires  that  permission,  the  operation  will  not  
necessarily  cause  an  exception.  Instead,  it  might  return  an  empty  data  set,  signal  an  
error,  or  otherwise  exhibit  unexpected  behavior.  For  example,  if  you  query  a  calendar  
without  permission,  the  method  returns  an  empty  data  set.“
Forwards  and  backwards  compatibility
App  Permissions?
“On  devices  running  the  M  Developer  Preview,  a  user  can  turn  off  permissions  for  any  app  
(including  legacy  apps)  from  the  app's  Settings  screen.  If  a  user  turns  off  permissions  for  
a  legacy  app,  the  system  silently  disables  the  appropriate  functionality.  When  the  app  
attempts  to  perform  an  operation  that  requires  that  permission,  the  operation  will  not  
necessarily  cause  an  exception.  Instead,  it  might  return  an  empty  data  set,  signal  an  
error,  or  otherwise  exhibit  unexpected  behavior.  For  example,  if  you  query  a  calendar  
without  permission,  the  method  returns  an  empty  data  set.“
Forwards  and  backwards  compatibility
⻑⾧長い…
App  Permissions?
“On  devices  running  the  M  Developer  Preview,  a  user  can  turn  off  permissions  for  any  app  
(including  legacy  apps)  from  the  app's  Settings  screen.  If  a  user  turns  off  permissions  for  
a  legacy  app,  the  system  silently  disables  the  appropriate  functionality.  When  the  app  
attempts  to  perform  an  operation  that  requires  that  permission,  the  operation  will  not  
necessarily  cause  an  exception.  Instead,  it  might  return  an  empty  data  set,  signal  an  
error,  or  otherwise  exhibit  unexpected  behavior.  For  example,  if  you  query  a  calendar  
without  permission,  the  method  returns  an  empty  data  set.“
Forwards  and  backwards  compatibility
App  Permissionsに対応してないアプリで権限をOFFした時の話。  
例例外起きない。  
空データ返ってくる。
App  Permissions?
つまり…
iOS  like  Permission  Model
許可が必要な機能
• Location  
• Camera  
• Microphone  
• Phone  
• SMS  
• Contacts  
• Calendar  
• Sensor
許可が必要な機能
e.g.  
android.permission.READ_̲PHONE_̲STATE    
android.permission.CAMERA"  
How  to  Permissions
How  to  Permissions
• Check  
• Request  
• Handling
How  to  Permissions
• Check  
• Request  
• Handling
Check  permissions
String[] PERMISSIONS = new String[]{Manifest.permission.READ_PHONE_STATE};
if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(PERMISSIONS,PERMISSIONS_REQUEST_READ_PHONE_STATE);
} else {
showLineNumber();
}
Check  permissions
String[] PERMISSIONS = new String[]{Manifest.permission.READ_PHONE_STATE};
if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(PERMISSIONS,PERMISSIONS_REQUEST_READ_PHONE_STATE);
} else {
showLineNumber();
}
Check  permissions
checkSelfPermission
指定Permissionが許可されているかどうか
String[] PERMISSIONS = new String[]{Manifest.permission.READ_PHONE_STATE};
if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(PERMISSIONS,PERMISSIONS_REQUEST_READ_PHONE_STATE);
} else {
showLineNumber();
}
Check  permissions
checkSelfPermission
ちなみに、これ  
⼀一つのPermissionしか指定できない…
if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED
&&
checkSelfPermission(Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED
&&
checkSelfPermission(Manifest.permission. READ_CALL_LOG)
!= PackageManager.PERMISSION_GRANTED
…
Check  permissions
checkSelfPermission
(´́・ω・`)
public abstract class PermissionUtil {
/**
* Returns true if the Activity has access to all given permissions.
* Always returns true on platforms below M.
*
* @see Activity#checkSelfPermission(String)
*/
public static boolean hasSelfPermission(Activity activity, String[] permissions) {
if (!isMNC()) {
return true;
}
for (String permission : permissions) {
if (activity.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
public static boolean isMNC() {
/*
TODO: In the Android M Preview release, checking if the platform is M is done through
the codename, not the version code. Once the API has been finalised, the following check
should be used: */
// return Build.VERSION.SDK_INT == Build.VERSION_CODES.MNC
return "MNC".equals(Build.VERSION.CODENAME);
}
}
https://github.com/googlesamples/android-RuntimePermissions
Sample  CodeはUtilクラス作ってる
How  to  Permissions
• Check  
• Request  
• Handling
String[] PERMISSIONS = new String[]{Manifest.permission.READ_PHONE_STATE};
if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
requestPermissions(PERMISSIONS,PERMISSIONS_REQUEST_READ_PHONE_STATE);
} else {
showLineNumber();
}
Request  permissions
requestPermissions
指定Permissionの権限(許可)を求める
How  to  Permissions
• Check  
• Request  
• Handling
Handle  the    
permissions  request  response
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (MY_PERMISSIONS_REQUEST_READ_PHONE_STATE == requestCode) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
showLineNumber();
Toast.makeText(this, "Phone Permission OK", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Phone Permission NG", Toast.LENGTH_SHORT).show();
}
}
}
private void showLineNumber() {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
Toast.makeText(this, telephonyManager.getLine1Number(), Toast.LENGTH_SHORT).show();
}
Handle  the    
permissions  request  response
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (MY_PERMISSIONS_REQUEST_READ_PHONE_STATE == requestCode) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
showLineNumber();
Toast.makeText(this, "Phone Permission OK", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Phone Permission NG", Toast.LENGTH_SHORT).show();
}
}
}
private void showLineNumber() {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
Toast.makeText(this, telephonyManager.getLine1Number(), Toast.LENGTH_SHORT).show();
}
Handle  the    
permissions  request  response
onRequestPermissionResult
Permissionの許可・否許可の結果が返される  
結果によって処理理を分ける
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (MY_PERMISSIONS_REQUEST_READ_PHONE_STATE == requestCode) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
showLineNumber();
Toast.makeText(this, "Phone Permission OK", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "Phone Permission NG", Toast.LENGTH_SHORT).show();
}
}
}
private void showLineNumber() {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
Toast.makeText(this, telephonyManager.getLine1Number(), Toast.LENGTH_SHORT).show();
}
Handle  the    
permissions  request  response
onRequestPermissionResult
Permissionが許可されたら  
権限が必要なAPIへアクセスする
Request  from  Fragment
ほとんど同じ
Sample  Code
android-‐‑‒RuntimePermissions
https://github.com/googlesamples/android-
RuntimePermissions
• Only  ask  for  permissions  you  need  
• Don't  overwhelm  the  user  
• Explain  why  you  need  permissions
Best  Practices
App  Permissions対応してないアプリ  
Android  M  Previewで動かした
App  Permissions対応してないアプリ  
Android  M  Previewで動かした
意外とアプリ落落ちない
App  Permissions対応してないアプリ  
Android  M  Previewで動かした
意外とアプリ落落ちない
Forwards  and  backwards  compatibility
App  Permissions対応してないアプリ  
Android  M  Previewで動かした
ただ、サービスへの影響は  
でかい
App  Permissions対応してないアプリ  
Android  M  Previewで動かした
ユーザさんの声  
カメラが起動しません  
とにかく動きません
App  Permissions対応してないアプリ  
Android  M  Previewで動かした
Explain  why  you  need  permissions  
これ⼤大事
uses-‐‑‒permission-‐‑‒sdkに書かないで  
Permission  Requestしたらどうなるのか??
uses-‐‑‒permission-‐‑‒sdkに書かないで  
Permission  Requestしたらどうなるのか??
Permission  RequestのDialogが出なかった。  
権限は否許可されたことになって  
onRequestPermissionResultに返ってくる。  
例例外とかにはならない。
Permissionの許可・否許可って  
どこで管理理されてるの??
Permissionの許可・否許可って  
どこで管理理されてるの??
/data/system/users/{userId}/runtime-‐‑‒permissions.xml
Permissionの許可・否許可って  
どこで管理理されてるの??
/data/system/users/{userId}/runtime-‐‑‒permissions.xml
<pkg name="com.os.operando.m_preview_sample">
<item name="android.permission.READ_PHONE_STATE" granted="true" flags="0" />
<item name="android.permission.CAMERA" granted="false" flags="0" />
</pkg>
Permissionの許可・否許可って  
どこで管理理されてるの??
/data/system/users/{userId}/runtime-‐‑‒permissions.xml
/data/system/users/{userId}配下には  
各ユーザの設定ファイル等がある。  
Settingsのファイルとかウィジットの位置とか⾊色々。
Permissionの許可・否許可って  
どこで管理理されてるの??
/data/system/users/{userId}/runtime-‐‑‒permissions.xml
ここに配置されてるからマルチユーザ意識識してる。  
マルチユーザでは、ユーザごとにPermissionの設定を持つ…はず
Permissionの許可・否許可って  
どこで管理理されてるの??
Class的には、PackageManagerが⾊色々管理理してる。  
http://tools.oesf.biz/android-‐‑‒MNC/xref/com/android/server/pm/
adb  shellから権限を変更更できる??
adb  shellから権限を変更更できる??
$  adb  shell  pm  grant  <package_̲name>  <permission_̲name>  
$  adb  shell  pm  revoke  <package_̲name>  <permission_̲name>
adb  shellから権限を変更更できる??
動かない…
Permissionを要求するAPI調べたい
Permissionを要求するAPI調べたい
Android  Studio  1.3から  
Permissionを要求するAPIには注釈が出る??  


Lintでもチェックできる??  
※検証してない…
App  Ops  
Android  4.3
App  Ops
App  Permission  Manager
App  Permision  =  App  Ops
?
App  Permision  ≠  App  Ops
?
App  Permision  
||  
Renewal  App  Ops
!!
※推測
Permission  Manager
Legacy??
まとめ
• とにかく既存のアプリをM  Previewで動かしてみ??  
• 正式にAndroid  M出たら、すぐ対応しないとダメそう  
• とにかく偉い⼈人に、今からApp  Permissionsの説明しよう  
• ユーザが混乱しないために、サービスに対する影響範囲とか
問い合わせ等の対応策は、今から考えておいた⽅方がいい
Thank  you

More Related Content

Viewers also liked

Sandbox Introduction
Sandbox IntroductionSandbox Introduction
Sandbox Introduction
msimkin
 
Android webservices
Android webservicesAndroid webservices
Android webservices
Krazy Koder
 
Android security
Android securityAndroid security
Android security
Krazy Koder
 

Viewers also liked (20)

Sandbox Introduction
Sandbox IntroductionSandbox Introduction
Sandbox Introduction
 
Android training day 4
Android training day 4Android training day 4
Android training day 4
 
Security threats in Android OS + App Permissions
Security threats in Android OS + App PermissionsSecurity threats in Android OS + App Permissions
Security threats in Android OS + App Permissions
 
Anatomizing online payment systems: hack to shop
Anatomizing online payment systems: hack to shopAnatomizing online payment systems: hack to shop
Anatomizing online payment systems: hack to shop
 
Android secuirty permission - upload
Android secuirty   permission - uploadAndroid secuirty   permission - upload
Android secuirty permission - upload
 
Android 6.0 permission change
Android 6.0 permission changeAndroid 6.0 permission change
Android 6.0 permission change
 
Android AsyncTask Tutorial
Android AsyncTask TutorialAndroid AsyncTask Tutorial
Android AsyncTask Tutorial
 
Json Tutorial
Json TutorialJson Tutorial
Json Tutorial
 
Basic Android Push Notification
Basic Android Push NotificationBasic Android Push Notification
Basic Android Push Notification
 
Android new permission model
Android new permission modelAndroid new permission model
Android new permission model
 
JSON overview and demo
JSON overview and demoJSON overview and demo
JSON overview and demo
 
Simple JSON parser
Simple JSON parserSimple JSON parser
Simple JSON parser
 
Android webservices
Android webservicesAndroid webservices
Android webservices
 
Android porting for dummies @droidconin 2011
Android porting for dummies @droidconin 2011Android porting for dummies @droidconin 2011
Android porting for dummies @droidconin 2011
 
Android json parser tutorial – example
Android json parser tutorial – exampleAndroid json parser tutorial – example
Android json parser tutorial – example
 
Android security
Android securityAndroid security
Android security
 
Screenshots Test spoon + espresso
Screenshots Test spoon + espressoScreenshots Test spoon + espresso
Screenshots Test spoon + espresso
 
Android - Bluetooth
Android - BluetoothAndroid - Bluetooth
Android - Bluetooth
 
Android Security Development - Part 2: Malicious Android App Dynamic Analyzi...
Android Security Development - Part 2: Malicious Android App Dynamic Analyzi...Android Security Development - Part 2: Malicious Android App Dynamic Analyzi...
Android Security Development - Part 2: Malicious Android App Dynamic Analyzi...
 
Securing android applications
Securing android applicationsSecuring android applications
Securing android applications
 

Similar to App Permissions

performancetestingjmeter-121109061704-phpapp02
performancetestingjmeter-121109061704-phpapp02performancetestingjmeter-121109061704-phpapp02
performancetestingjmeter-121109061704-phpapp02
Gopi Raghavendra
 
performancetestingjmeter-121109061704-phpapp02 (1)
performancetestingjmeter-121109061704-phpapp02 (1)performancetestingjmeter-121109061704-phpapp02 (1)
performancetestingjmeter-121109061704-phpapp02 (1)
QA Programmer
 
Acceptance & Functional Testing with Codeception - Devspace 2015
Acceptance & Functional Testing with Codeception - Devspace 2015 Acceptance & Functional Testing with Codeception - Devspace 2015
Acceptance & Functional Testing with Codeception - Devspace 2015
Joe Ferguson
 

Similar to App Permissions (20)

Permissions
PermissionsPermissions
Permissions
 
Performance Requirement Gathering
Performance Requirement GatheringPerformance Requirement Gathering
Performance Requirement Gathering
 
Runtime permissions handling with easy permissions
Runtime permissions handling with easy permissionsRuntime permissions handling with easy permissions
Runtime permissions handling with easy permissions
 
Hieu Xamarin iOS9, Android M 3-11-2015
Hieu Xamarin iOS9, Android M  3-11-2015Hieu Xamarin iOS9, Android M  3-11-2015
Hieu Xamarin iOS9, Android M 3-11-2015
 
performancetestingjmeter-121109061704-phpapp02
performancetestingjmeter-121109061704-phpapp02performancetestingjmeter-121109061704-phpapp02
performancetestingjmeter-121109061704-phpapp02
 
performancetestingjmeter-121109061704-phpapp02 (1)
performancetestingjmeter-121109061704-phpapp02 (1)performancetestingjmeter-121109061704-phpapp02 (1)
performancetestingjmeter-121109061704-phpapp02 (1)
 
A journey through android development
A journey through android developmentA journey through android development
A journey through android development
 
Performance Testing using LoadRunner
Performance Testing using LoadRunnerPerformance Testing using LoadRunner
Performance Testing using LoadRunner
 
Performance testing interview questions and answers
Performance testing interview questions and answersPerformance testing interview questions and answers
Performance testing interview questions and answers
 
Chapter 3 - Common Test Types and Test Process for Mobile Applications
Chapter 3 - Common Test Types and Test Process for Mobile ApplicationsChapter 3 - Common Test Types and Test Process for Mobile Applications
Chapter 3 - Common Test Types and Test Process for Mobile Applications
 
QA Prayag
QA PrayagQA Prayag
QA Prayag
 
Getting Started with Apache Jmeter
Getting Started with Apache JmeterGetting Started with Apache Jmeter
Getting Started with Apache Jmeter
 
Bootstrapping an App for Launch
Bootstrapping an App for LaunchBootstrapping an App for Launch
Bootstrapping an App for Launch
 
Performance testing and j meter
Performance testing and j meterPerformance testing and j meter
Performance testing and j meter
 
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
Acceptance & Functional Testing with Codeception - SunshinePHP 2016Acceptance & Functional Testing with Codeception - SunshinePHP 2016
Acceptance & Functional Testing with Codeception - SunshinePHP 2016
 
Acceptance & Functional Testing with Codeception - Devspace 2015
Acceptance & Functional Testing with Codeception - Devspace 2015 Acceptance & Functional Testing with Codeception - Devspace 2015
Acceptance & Functional Testing with Codeception - Devspace 2015
 
Android Marshmallow APIs and Changes
Android Marshmallow APIs and ChangesAndroid Marshmallow APIs and Changes
Android Marshmallow APIs and Changes
 
Test execution
Test executionTest execution
Test execution
 
1 aleksandr gritsevski - attd example using
1   aleksandr gritsevski - attd example using1   aleksandr gritsevski - attd example using
1 aleksandr gritsevski - attd example using
 
Implementing Authorization
Implementing AuthorizationImplementing Authorization
Implementing Authorization
 

More from Shinobu Okano

More from Shinobu Okano (20)

OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
 
Kotlinでマッチョする話
Kotlinでマッチョする話Kotlinでマッチョする話
Kotlinでマッチョする話
 
Android Framework Code Readingのしおり ver 1.2
Android Framework Code Readingのしおり ver 1.2Android Framework Code Readingのしおり ver 1.2
Android Framework Code Readingのしおり ver 1.2
 
まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4
 
Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発
 
shinobu.apk #3
shinobu.apk #3shinobu.apk #3
shinobu.apk #3
 
Android + JSON-RPC
Android + JSON-RPCAndroid + JSON-RPC
Android + JSON-RPC
 
Inside Android N
Inside Android NInside Android N
Inside Android N
 
Gradle PluginとCIと俺
Gradle PluginとCIと俺Gradle PluginとCIと俺
Gradle PluginとCIと俺
 
shinobu.apk #2
shinobu.apk #2shinobu.apk #2
shinobu.apk #2
 
まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3
 
Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1
 
Kotlinにお触り
Kotlinにお触りKotlinにお触り
Kotlinにお触り
 
DroidKaigiアプリをSpoonで全画面スクショするぞい\(^o^)/
DroidKaigiアプリをSpoonで全画面スクショするぞい\(^o^)/DroidKaigiアプリをSpoonで全画面スクショするぞい\(^o^)/
DroidKaigiアプリをSpoonで全画面スクショするぞい\(^o^)/
 
Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!
Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!
Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!
 
ChromeとAndroidの過去・現在・未来
ChromeとAndroidの過去・現在・未来ChromeとAndroidの過去・現在・未来
ChromeとAndroidの過去・現在・未来
 
Android Dev Tools Knowledge
Android Dev Tools KnowledgeAndroid Dev Tools Knowledge
Android Dev Tools Knowledge
 
shinobu.apk #1
shinobu.apk #1shinobu.apk #1
shinobu.apk #1
 
ChromeとAndroidの 過去・現在・未来 ver 0.1
ChromeとAndroidの 過去・現在・未来  ver 0.1ChromeとAndroidの 過去・現在・未来  ver 0.1
ChromeとAndroidの 過去・現在・未来 ver 0.1
 
5分で資料作ってSlideShareにアップロードする錬金術
5分で資料作ってSlideShareにアップロードする錬金術5分で資料作ってSlideShareにアップロードする錬金術
5分で資料作ってSlideShareにアップロードする錬金術
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 

App Permissions