Wiki source code of Data Collectors
Last modified by Developer on 2022/04/01 12:30
Show last authors
author | version | line-number | content |
---|---|---|---|
1 | {{box cssClass="floatinginfobox" title="**Page Contents**"}} | ||
2 | {{toc/}} | ||
3 | {{/box}} | ||
4 | |||
5 | = 1. Overview = | ||
6 | |||
7 | SDK gathering data constantly. Data collectors were divided into two groups: | ||
8 | - active - work only when user actively using application, | ||
9 | -pasive - work based on alarms (gather data when application stays in background) | ||
10 | The collected data is send to server with HTTP methods. Library saving mechanisms work based sharedpreferences and databases. | ||
11 | **Every sent hit has a timestamp field (''ts'') synchronized with the server** | ||
12 | |||
13 | |||
14 | |||
15 | = 2. Collectors division = | ||
16 | |||
17 | Data collectors are divided into two groups. First group called active collectors due to Android system restrictions (android Oreo background limits) work only while application is currently in foreground. Full active colelctors list: | ||
18 | |||
19 | * PACKAGE CHANGE, | ||
20 | * BATTERY | ||
21 | * SIGNAL_STRENGTH | ||
22 | * PROFILE_MODE | ||
23 | * HEADSET_PLUG | ||
24 | * CPU_PROCESS (for Android below Nougat) | ||
25 | * GEOLOCATION (work also as passive collector) | ||
26 | * APPS_USAGE (for Android below Lollipop) | ||
27 | * ROAMING | ||
28 | * NETWORK_CONNECTION | ||
29 | * WIFI_DATA_CONNECTION | ||
30 | |||
31 | Other group called pasive collectors which based on alarm manager fire up on specific time intervals. Full passive collectors list: | ||
32 | |||
33 | * BATTERY | ||
34 | * MEMORY_USEAGE | ||
35 | * SCREEN_ORIENTED | ||
36 | * CPU_PROCESS | ||
37 | * PHONE_INFO | ||
38 | * GEOLOCATION (work also as active collector) | ||
39 | * APP_LIST | ||
40 | * APPS_USAGE | ||
41 | * BROWSER | ||
42 | * NETWORK_USEAGE | ||
43 | * DICTIONARY | ||
44 | * CALENDAR_EVENTS | ||
45 | * MEDIA_FILES | ||
46 | * NFC_COLLECTOR | ||
47 | * BLUETOOTH_COLLECTOR | ||
48 | * PERMISSION_COLLECTOR | ||
49 | * BLUETOOTH_DEVICES_COLLECTOR | ||
50 | * FACEBOOK_NETWORK_COLLECTOR | ||
51 | * ROOT_COLLECTOR | ||
52 | * MOVEMENT_COLLECTOR | ||
53 | * USB_COLLECTOR | ||
54 | * STANDBY_BUCKET | ||
55 | |||
56 | Duplicate collectors in both groups are not mistake. It is intended behaviour that help gather at most data and is forced by Android SDK versions or system restrictions. | ||
57 | |||
58 | = 3. Collectors description = | ||
59 | |||
60 | == 3.1 APPS_LIST == | ||
61 | |||
62 | * **Explanation:** | ||
63 | Collect all application's info on device. | ||
64 | |||
65 | * **Required permissions:** | ||
66 | none | ||
67 | |||
68 | * **Optional permissions:** | ||
69 | android.permission.GET_PACKAGE_SIZE{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}} (obligatory on Android SDK >= 23, Marshmallow 6.0) - allow to gather information about application size (sizeInfo json object) | ||
70 | android.permission.QUERY_ALL_PACKAGES (obligatory on Android SDK >= 30, Android 11) - allow to query packages other than Android system packeges and your own package | ||
71 | * **Variable description:** | ||
72 | versionName - application version name | ||
73 | firstInstallTime - application install timestamp | ||
74 | launcher - got "good" intent to launch a front-door activity in a package | ||
75 | packageName - app package name | ||
76 | processName - app process name if packageName equals processname | ||
77 | versionCode - app version code | ||
78 | minSDK - application target version. It may run on earlier versions, but it knows how to work with any new behavior added at this version | ||
79 | largeheap - true when the application has requested a large heap for its processes | ||
80 | system - if set, this application is installed in the device's system image. | ||
81 | name - app user friendy name | ||
82 | uid - The kernel user-ID that has been assigned to this application; currently this is not a unique ID (multiple applications can have the same uid). | ||
83 | lastUpdateTime - The time at which the app was last updated | ||
84 | systemUpdated - this is set if this application has been installed as an update to a built-in system application | ||
85 | sizeInfo - json object with size information, on Marshmallow 6.0 present only with granted optional permission | ||
86 | externalcacheSize - Size of the external cache used by the application | ||
87 | dataSize - Size of the internal data size for the application | ||
88 | codeSize - Size of the code (e.g., APK) | ||
89 | externalDataSize - Size of the external data used by the application (e.g., /Android/data/ ) | ||
90 | cacheSize - Size of cache used by the application. (e.g., /data/data/ /cache) | ||
91 | externalStorage - set to true if the application is currently installed on external/removable/unprotected storage | ||
92 | persistent - set to true if this application is persistent (whether or not the application should remain running at all times). Persistence mode is intended only for certain system applications. | ||
93 | disabled - indicates that all components within this application are considered disabled | ||
94 | externalCodeSize - size of the secure container on external storage holding the application's code | ||
95 | externalMediaSize - size of the external media size used by the application | ||
96 | externalObbSize - size of the package's OBBs placed on external media. OBB files are used to provide additional file assets for Android applications (such as graphics, sounds and video), separate from an application's APK file. | ||
97 | * **Example:** | ||
98 | {{code language="json"}}{ | ||
99 | "ts": 1548677212017, | ||
100 | "appsList": [ | ||
101 | { | ||
102 | "versionName": "14.03.53", | ||
103 | "firstInstallTime": 1230789600000, | ||
104 | "launcher": true, | ||
105 | "packageName": "com.google.android.youtube", | ||
106 | "processName": "com.google.android.youtube", | ||
107 | "versionCode": 1403533330, | ||
108 | "minSDK": 28, | ||
109 | "largeHeap": true, | ||
110 | "system": true, | ||
111 | "name": "YouTube", | ||
112 | "uid": 10093, | ||
113 | "externalStorage": false, | ||
114 | "persistent": false, | ||
115 | "disabled": false, | ||
116 | "sizeInfo": { | ||
117 | "externalCacheSize": 24576, | ||
118 | "dataSize": 552960, | ||
119 | "codeSize": 131072000, | ||
120 | "externalDataSize": 16384, | ||
121 | "externalCodeSize": 0, | ||
122 | "externalMediaSize": 0, | ||
123 | "externalObbSize": 0, | ||
124 | "cacheSize": 139264 | ||
125 | }, | ||
126 | "lastUpdateTime": 1548435339281, | ||
127 | "systemUpdated": true | ||
128 | } | ||
129 | ] | ||
130 | }{{/code}} | ||
131 | |||
132 | == 3.2 APPS_USAGE == | ||
133 | |||
134 | * **Explanation:** | ||
135 | Collect time active an application.The collector uses the class [[UsageStatsManager>>https://developer.android.com/reference/android/app/usage/UsageStatsManager]]. | ||
136 | |||
137 | * **Required permissions:** | ||
138 | android.permission.PACKAGE_USAGE_STATS{{reference}}Declaring the permission implies intention to use the API and the user of the device still needs to grant permission through the Settings application.{{/reference}} (obligatory on android sdk >= Lollipop 5.0) | ||
139 | android.permission.GET_TASKS{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}} (obligatory on android sdk <= Kitkat 4.4) | ||
140 | since Android 11 geting the data will also be possible only if the device is unlocked by the user. This desn't impact the active collector since it only works when app is in foreground.((( | ||
141 | https:~/~/developer.android.com/reference/android/app/usage/UsageStatsManager.html#queryEvents(long,%20long) | ||
142 | ))) | ||
143 | * **Optional permissions:** | ||
144 | none | ||
145 | * **Variable description:** | ||
146 | startTs - application start | ||
147 | duration - time of use in milliseconds | ||
148 | stopTs - application stop | ||
149 | package - application package | ||
150 | foreground - true if application was in foreground and screen was on, false otherwise | ||
151 | |||
152 | * **Example:** | ||
153 | {{code language="json"}}{ | ||
154 | "ts": 1557825443149, | ||
155 | "appsUsage2": { | ||
156 | "data": [ | ||
157 | { | ||
158 | "duration": 38520, | ||
159 | "package": "spicymobile.sample2.mobience", | ||
160 | "stopTs": 1557825382397, | ||
161 | "startTs": 1557825343877, | ||
162 | "foreground": true | ||
163 | }, | ||
164 | { | ||
165 | "duration": 62194, | ||
166 | "package": "spicymobile.sample2.mobience", | ||
167 | "stopTs": 1557825444591, | ||
168 | "startTs": 1557825382397, | ||
169 | "foreground": false | ||
170 | } | ||
171 | ], | ||
172 | "startTs": 1557825443138, | ||
173 | "isFull": true | ||
174 | } | ||
175 | }{{/code}} | ||
176 | |||
177 | == 3.3 APPS_USAGE (deprecated) == | ||
178 | |||
179 | * **Explanation:** | ||
180 | Obsolete collector sending data about application usage. Still in use by old and forgotten user applications. | ||
181 | |||
182 | * **Required permissions:** | ||
183 | none | ||
184 | |||
185 | * **Optional permissions:** | ||
186 | none | ||
187 | |||
188 | * **Variable description:** | ||
189 | data - array list of usage data | ||
190 | ms - time of use in milliseconds | ||
191 | name - package name or event | ||
192 | isFull - irrelevant | ||
193 | |||
194 | * **Example:** | ||
195 | Active collector hit (application has to work as foreground): | ||
196 | {{code language="json"}}{ | ||
197 | "appsUsage": { | ||
198 | "data": [ | ||
199 | { | ||
200 | "ms": 2432288, | ||
201 | "name": "SCREEN_OFF" | ||
202 | }, | ||
203 | { | ||
204 | "ms": 9823, | ||
205 | "name": "com.android.systemui" | ||
206 | }, | ||
207 | { | ||
208 | "ms": 368060, | ||
209 | "name": "SCREEN_OFF" | ||
210 | } | ||
211 | ], | ||
212 | "startTs": 1546371785061, | ||
213 | "isFull": true | ||
214 | }, | ||
215 | "ts": 1546374594650 | ||
216 | }{{/code}} | ||
217 | |||
218 | == 3.4 BATTERY == | ||
219 | |||
220 | * **Explanation:** | ||
221 | BatteryInfoCollector collects battery info: level and charge event. | ||
222 | |||
223 | * **Required permissions:** | ||
224 | none | ||
225 | |||
226 | * **Optional permissions:** | ||
227 | none | ||
228 | |||
229 | * **Variable description:** | ||
230 | start - charging start time | ||
231 | source - charge source (USB or AC) | ||
232 | startTemp - temperature start charging | ||
233 | stop - charging stop time | ||
234 | startVol - voltage start charging | ||
235 | stopVol - voltage stop charging | ||
236 | stopTemp - temperature stop charging | ||
237 | startLv - battery level start charging | ||
238 | stopLv - battery level stop charging | ||
239 | level - battery level | ||
240 | |||
241 | * **Example:** | ||
242 | Active collector hit (application has to work as foreground): | ||
243 | {{code language="json"}}{ | ||
244 | "ts": 1548687066900, | ||
245 | "batteryInfo": { | ||
246 | "start": 1548686926256, | ||
247 | "source": "USB", | ||
248 | "startTemp": 296, | ||
249 | "stop": 1548687068108, | ||
250 | "startVol": 4352, | ||
251 | "stopVol": 4351, | ||
252 | "stopTemp": 297, | ||
253 | "startLv": 100, | ||
254 | "stopLv": 100 | ||
255 | } | ||
256 | }{{/code}} | ||
257 | Pasive collector hit (periodically broadcast alarm): | ||
258 | {{code language="json"}}{ | ||
259 | "ts": 1567146572282, | ||
260 | "batteryInfo": { | ||
261 | "level": 100 | ||
262 | } | ||
263 | }{{/code}} | ||
264 | |||
265 | == 3.5 BLUETOOTH_COLLECTOR == | ||
266 | |||
267 | * **Explanation:** | ||
268 | Bluetooth collector collects information of Bluetooth, Bluetooth LE (for android >= Jelly Bean 4.1) function of | ||
269 | that device, contains normal Bluetooth information. | ||
270 | |||
271 | * **Required permissions:** | ||
272 | none | ||
273 | |||
274 | * **Optional permissions:** | ||
275 | android.permission.BLUETOOTH{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}} | ||
276 | |||
277 | * **Variable description:** | ||
278 | isSupported - is bluetooth or Bluetooth LE supported | ||
279 | isEnabled - is bluetooth or Bluetooth LE enabled (required by optional permission) | ||
280 | |||
281 | * **Example:** | ||
282 | {{code language="json"}}{ | ||
283 | "ts": 1548746645461, | ||
284 | "bluetoothInfo": { | ||
285 | "bluetooth": { | ||
286 | "isSupported": true, | ||
287 | "isEnabled": false | ||
288 | }, | ||
289 | "bluetoothLE": { | ||
290 | "isSupported": true, | ||
291 | "isEnabled": false | ||
292 | } | ||
293 | } | ||
294 | }{{/code}} | ||
295 | |||
296 | == 3.6 BLUETOOTH_DEVICES_COLLECTOR == | ||
297 | |||
298 | * **Explanation:** | ||
299 | Bluetooth collector collects information of new devices connected via Bluetooth. | ||
300 | |||
301 | * **Required permissions:** | ||
302 | android.permission.BLUETOOTH{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}} | ||
303 | |||
304 | * **Optional permissions:** | ||
305 | none | ||
306 | |||
307 | * **Variable description:** | ||
308 | connected - true if new device connected, false otherwise | ||
309 | ts - connected/disconnected timestamp | ||
310 | device_name - friendly Bluetooth name of the remote device | ||
311 | device_address - hardware address of this BluetoothDevice | ||
312 | |||
313 | * **Example:** | ||
314 | {{code language="json"}}{ | ||
315 | "ts": 1548753718500, | ||
316 | "bluetoothConnectedDevice": { | ||
317 | "connected": "", | ||
318 | "device_name": "", | ||
319 | "device_address": "", | ||
320 | "ts": 129387329479 | ||
321 | } | ||
322 | }{{/code}} | ||
323 | |||
324 | == 3.7 BROWSER == | ||
325 | |||
326 | * **Explanation:** | ||
327 | Collecting data on browser history, bookmarks, phrases. Gathering bookmarks is not possibly since we use accessibility service. | ||
328 | |||
329 | * **Required permissions:** | ||
330 | com.android.browser.permission.READ_HISTORY_BOOKMARKS{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}} (Removed since android sdk >= Marshmallow 6.0) on Android api level < Lollipop 5.0 | ||
331 | turned on accessibility for application{{reference}}Declaring the permission implies intention to use the API and the user of the device still needs to grant permission through the Settings application.{{/reference}} on Android api level >= Lollipop 5.0 | ||
332 | |||
333 | * **Optional permissions:** | ||
334 | none | ||
335 | |||
336 | * **Variable description:** | ||
337 | visited - visit timestamp | ||
338 | visitedLocTs - true if ''visited'' timestamp is device local | ||
339 | visits - number of visits | ||
340 | title - site title | ||
341 | created - creation timestamp | ||
342 | createdLocTs - true if ''created'' is device local | ||
343 | url - site url | ||
344 | type - bookmark type | ||
345 | |||
346 | * **Example:** | ||
347 | {{code language="json"}}{ | ||
348 | "ts": 1548753718500, | ||
349 | "browserHistory": { | ||
350 | "spicymobile.sample2.mobience.browser": [ | ||
351 | { | ||
352 | "visited": 1548753703258, | ||
353 | "visits": 1, | ||
354 | "title": "", | ||
355 | "created": 1548753703258, | ||
356 | "url": "https://m.onet.pl" | ||
357 | }, | ||
358 | { | ||
359 | "visited": 1548753710321, | ||
360 | "visits": 1, | ||
361 | "title": "", | ||
362 | "created": 1548753710321, | ||
363 | "url": "Wirtualna Polska - Wszystko co ważne - www.wp.pl" | ||
364 | } | ||
365 | ] | ||
366 | }, | ||
367 | "browserBookmarks": { | ||
368 | "browser": [ | ||
369 | { | ||
370 | "visited": 1568032189945, | ||
371 | "visits": 2, | ||
372 | "title": "Meczyki.pl - Mecze na żywo, mecze online, sport live", | ||
373 | "url": "https://www.meczyki.pl/", | ||
374 | "created": 32874623949324, | ||
375 | "type": 2 | ||
376 | }, | ||
377 | { | ||
378 | "visits": 0, | ||
379 | "title": "Picasa", | ||
380 | "url": "http://picasaweb.google.com/" | ||
381 | } | ||
382 | ] | ||
383 | }, | ||
384 | "browserPhrases": { | ||
385 | "pl.meonmobile.searchplaces.browser": { | ||
386 | "1567588171303": "mecz polski" | ||
387 | } | ||
388 | } | ||
389 | }{{/code}} | ||
390 | |||
391 | == 3.8 CALENDAR_EVENTS == | ||
392 | |||
393 | * **Explanation:** | ||
394 | Collects calendar events data of a device, with a range of days : before 100 days and after 100 | ||
395 | days with the collecting dayRequired permissions. | ||
396 | |||
397 | * **Required permissions:** | ||
398 | Manifest.permission.READ_CALENDAR{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} | ||
399 | |||
400 | * **Optional permissions:** | ||
401 | none | ||
402 | |||
403 | * **Variable description:** | ||
404 | eventConfirmed - json array with confirmed events | ||
405 | eventTentative - json array with tentative events | ||
406 | eventCanceled - json array with canceled events | ||
407 | start - start event timestamp | ||
408 | title - event title | ||
409 | location - event location | ||
410 | startDay - event start day | ||
411 | endDay - event end day | ||
412 | alarm - use alarm true, false otherwise | ||
413 | end - end timestamp | ||
414 | timezone - timezone | ||
415 | |||
416 | * **Example:** | ||
417 | {{code language="json"}}{ | ||
418 | "ts": 1548756439048, | ||
419 | "calendarEvent": { | ||
420 | "eventConfirmed": [ | ||
421 | { | ||
422 | "start": 1546214400000, | ||
423 | "title": "Sylwester (święto)", | ||
424 | "location": "", | ||
425 | "startDay": 1546214400000, | ||
426 | "endDay": 1546300800000, | ||
427 | "alarm": false, | ||
428 | "end": 1546300800000, | ||
429 | "timezone": "UTC" | ||
430 | }, | ||
431 | { | ||
432 | "start": 1548930600000, | ||
433 | "title": "Kolejny test", | ||
434 | "location": "", | ||
435 | "startDay": 1548930600000, | ||
436 | "endDay": 1548934200000, | ||
437 | "alarm": true, | ||
438 | "end": 1548934200000, | ||
439 | "timezone": "Europe/Warsaw" | ||
440 | } | ||
441 | ] | ||
442 | } | ||
443 | }{{/code}} | ||
444 | |||
445 | == 3.9 CALL_LOG - deprecated == | ||
446 | |||
447 | * **Explanation:** | ||
448 | Collect all data history from phone call log. Due to new Google policy changes we can't collect call informations. [[Read more here>>https://play.google.com/about/privacy-security-deception/permissions/]] | ||
449 | |||
450 | * **Required permissions:** | ||
451 | Manifest.permission.READ_CALL_LOG{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} | ||
452 | |||
453 | * **Optional permissions:** | ||
454 | none | ||
455 | |||
456 | * **Variable description:** | ||
457 | incoming - incoming phone call | ||
458 | outgoing - outgoing phone call | ||
459 | misscall - missed call | ||
460 | voicemail - voice mail | ||
461 | rejected - rejected call | ||
462 | refused - refused call | ||
463 | date - call date | ||
464 | seconds - call duration | ||
465 | |||
466 | * **Example:** | ||
467 | {{code language="json"}}{ | ||
468 | "ts": 1550049621866, | ||
469 | "callLogData": { | ||
470 | "incoming": [ | ||
471 | { | ||
472 | "date": "", | ||
473 | "seconds": "" | ||
474 | } | ||
475 | ], | ||
476 | "misscall": [ | ||
477 | { | ||
478 | "date": "", | ||
479 | "seconds": "" | ||
480 | } | ||
481 | ], | ||
482 | "rejected": [ | ||
483 | { | ||
484 | "date": "" | ||
485 | } | ||
486 | ], | ||
487 | "refused": [ | ||
488 | { | ||
489 | "date": "" | ||
490 | } | ||
491 | ], | ||
492 | "outgoing": [ | ||
493 | { | ||
494 | "date": "", | ||
495 | "seconds": "" | ||
496 | } | ||
497 | ], | ||
498 | "voicemail": [ | ||
499 | { | ||
500 | "date": "", | ||
501 | "seconds": "" | ||
502 | } | ||
503 | ] | ||
504 | } | ||
505 | }{{/code}} | ||
506 | |||
507 | == 3.10 CPU_PROCESS == | ||
508 | |||
509 | * **Explanation:** | ||
510 | Collect process running cpu on device at time request. Works on android sdk < Nougat 7.0 (since Nougat, application just see it own process). | ||
511 | |||
512 | * **Required permissions:** | ||
513 | none | ||
514 | |||
515 | * **Optional permissions:** | ||
516 | none | ||
517 | |||
518 | * **Variable description:** | ||
519 | cpu_freq - cpu check frequency from configuration file | ||
520 | cpu_period - cpu send period from configuration file | ||
521 | frequency - cpu send frequency from configuration file | ||
522 | processRunning - json array with processes | ||
523 | name - process name | ||
524 | cpu_min - cpu min | ||
525 | cpu_max - cpu max | ||
526 | cpu_median - cpu median | ||
527 | cpu_average - cpu average | ||
528 | residentMemory_min - resident memory min | ||
529 | residentMemory_max - resident memory max | ||
530 | residentMemory_average - resident memory average | ||
531 | residentMemory_median - process resident set size median | ||
532 | virtualMemory_min - process virtual memory min | ||
533 | virtualMemory_max - process virtual memory max | ||
534 | virtualMemory_median - process virtual memory median | ||
535 | virtualMemory_average - process virtual memory average | ||
536 | ts - current time | ||
537 | |||
538 | * **Example:** | ||
539 | {{code language="json"}}{ | ||
540 | "ts": 1550049621866, | ||
541 | "cpuProcess": { | ||
542 | "ts": 1550049622189, | ||
543 | "cpu_freq": 10800, | ||
544 | "processRunning": [ | ||
545 | { | ||
546 | "residentMemory_median": 23688, | ||
547 | "cpu_average": 0, | ||
548 | "cpu_max": 0, | ||
549 | "residentMemory_max": 23688, | ||
550 | "virtualMemory_min": 645076, | ||
551 | "name": "com.google.android.partnersetup", | ||
552 | "virtualMemory_average": 645076, | ||
553 | "virtualMemory_median": 645076, | ||
554 | "cpu_median": 0, | ||
555 | "residentMemory_average": 23688, | ||
556 | "residentMemory_min": 23688, | ||
557 | "virtualMemory_max": 645076, | ||
558 | "cpu_min": 0 | ||
559 | }, | ||
560 | { | ||
561 | "residentMemory_median": 29724, | ||
562 | "cpu_average": 0, | ||
563 | "cpu_max": 0, | ||
564 | "residentMemory_max": 29724, | ||
565 | "virtualMemory_min": 646644, | ||
566 | "name": "com.google.android.packageinstaller", | ||
567 | "virtualMemory_average": 646644, | ||
568 | "virtualMemory_median": 646644, | ||
569 | "cpu_median": 0, | ||
570 | "residentMemory_average": 29724, | ||
571 | "residentMemory_min": 29724, | ||
572 | "virtualMemory_max": 646644, | ||
573 | "cpu_min": 0 | ||
574 | } | ||
575 | ], | ||
576 | "cpu_period": 30, | ||
577 | "frequency": 30 | ||
578 | } | ||
579 | }{{/code}} | ||
580 | |||
581 | == 3.11 DICTIONARY == | ||
582 | |||
583 | * **Explanation:** | ||
584 | Collect all data Dictionary of user on device. We cannot access Dictionary from Android sdk >= Marshmallow 6.0. | ||
585 | |||
586 | * **Required permissions:** | ||
587 | android.permission.READ_USER_DICTIONARY{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} | ||
588 | |||
589 | * **Optional permissions:** | ||
590 | none | ||
591 | |||
592 | * **Variable description:** | ||
593 | freq - The frequency column. A value between 1 and 255. Higher values imply higher frequency | ||
594 | shortcut - shortcut explanation | ||
595 | word - added word | ||
596 | locale - country locale | ||
597 | |||
598 | * **Example:** | ||
599 | {{code language="json"}}{ | ||
600 | "ts": 1548762314784, | ||
601 | "dictionary": [ | ||
602 | { | ||
603 | "freq": 250, | ||
604 | "shortcut": "dodane do testów", | ||
605 | "word": "słowo testowe", | ||
606 | "locale": "pl_PL" | ||
607 | } | ||
608 | ] | ||
609 | }{{/code}} | ||
610 | |||
611 | == 3.12 GEOLOCATION == | ||
612 | |||
613 | * **Explanation:** | ||
614 | Geolocalization coordinates of a device, information of current GSM cell and GSM signal strength. | ||
615 | |||
616 | * **Required permissions:** | ||
617 | Manifest.permission.ACCESS_FINE_LOCATION{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} | ||
618 | Manifest.permission.ACCESS_COARSE_LOCATION{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} | ||
619 | Since Android 10 accessing lcation when is not in foreground is posiible only after declaring Manifest.permission.ACCESS_BACKGROUND_LOCATION. Documentation strongly states that accessing background is forbidden for purpose of gathering analytic data. Applications requesting access to background location undergo excessive audit procedure. Because of that there GEOLOCATION can obtain current location only as active collector - when app is in foreground. Last known location can be obtained by passive collector. | ||
620 | |||
621 | * **Optional permissions:** | ||
622 | none | ||
623 | |||
624 | * **Variable description:** | ||
625 | acc - estimated accuracy of this location, in meters | ||
626 | spd - speed if it is available, in kilometers/hour over ground | ||
627 | ls - name of the provider that generated this fix | ||
628 | lt - location time | ||
629 | ltLoc - true if time is local | ||
630 | cid - gsm cell id, -1 if unknown, 0xffff max legal valu | ||
631 | lac - gsm location area code, -1 if unknown, 0xffff max legal value | ||
632 | signalData - signal strength json object | ||
633 | location - json object containing location data | ||
634 | coordinates - json array with latitude and longitude coordinates | ||
635 | type - always as Point | ||
636 | br - bearing, in degrees, bearing is the horizontal direction of travel of this device, and is not related to the device orientation | ||
637 | |||
638 | * **Example:** | ||
639 | {{code language="json"}}{ | ||
640 | "ts": 1564136345488, | ||
641 | "geolocation": { | ||
642 | "acc": 29.54, | ||
643 | "ls": "fused", | ||
644 | "lt": 1564136345338, | ||
645 | "location": { | ||
646 | "coordinates": [ | ||
647 | 52.2318224, | ||
648 | 21.1063799 | ||
649 | ], | ||
650 | "type": "Point" | ||
651 | }, | ||
652 | "cid": 46337572, | ||
653 | "br" : 200, | ||
654 | "lac": 58170, | ||
655 | "ltLoc": true | ||
656 | } | ||
657 | }{{/code}} | ||
658 | |||
659 | == 3.13 HEADSET_PLUG == | ||
660 | |||
661 | * **Explanation:** | ||
662 | Collect all data about headset plugin's information. | ||
663 | |||
664 | * **Required permissions:** | ||
665 | none | ||
666 | |||
667 | * **Optional permissions:** | ||
668 | none | ||
669 | |||
670 | * **Variable description:** | ||
671 | start - plug in timestamp | ||
672 | end - plug out timestamp | ||
673 | microphone - is microphone | ||
674 | headphone - is headphone | ||
675 | name - name if exist | ||
676 | |||
677 | * **Example:** | ||
678 | {{code language="json"}}{ | ||
679 | "ts": 1548763985160, | ||
680 | "headsetPlug": { | ||
681 | "headsetPlug": [ | ||
682 | { | ||
683 | "start": 1548763789550, | ||
684 | "end": 1548763912421, | ||
685 | "microphone": false, | ||
686 | "headphone": true | ||
687 | } | ||
688 | ] | ||
689 | } | ||
690 | }{{/code}} | ||
691 | |||
692 | == 3.14 MEDIA_FILES == | ||
693 | |||
694 | * **Explanation:** | ||
695 | Gather Media files information of device. | ||
696 | |||
697 | * **Required permissions:** | ||
698 | Manifest.permission.READ_EXTERNAL_STORAGE{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} (on Android api level >= Jelly Bean 4.1) | ||
699 | |||
700 | * **Optional permissions:** | ||
701 | none | ||
702 | |||
703 | * **Variable description:** | ||
704 | image - json object with image media data | ||
705 | nonMedia - json object with non media data | ||
706 | audio - json object with audio media data | ||
707 | video - json object with video media data | ||
708 | totalBytes - size in bytes | ||
709 | totalFiles - number of files | ||
710 | newFiles - new files number | ||
711 | newBytes - size in bytes | ||
712 | deletedFiles - deleted files number | ||
713 | deletedBytes - deleted size in bytes | ||
714 | |||
715 | sinceTs - timestamp | ||
716 | |||
717 | * **Example:** | ||
718 | {{code language="json"}}{ | ||
719 | "ts": 1548764886837, | ||
720 | "mediaFiles": { | ||
721 | "image": { | ||
722 | "totalBytes": 33569637, | ||
723 | "totalFiles": 85 | ||
724 | }, | ||
725 | "nonMedia": { | ||
726 | "totalBytes": 67371316, | ||
727 | "totalFiles": 277 | ||
728 | }, | ||
729 | "audio": { | ||
730 | "totalBytes": 5576521, | ||
731 | "totalFiles": 3 | ||
732 | }, | ||
733 | "video": {}, | ||
734 | "sinceTs": 1547018493079 | ||
735 | } | ||
736 | }{{/code}} | ||
737 | |||
738 | == 3.15 MEMORY_USEAGE == | ||
739 | |||
740 | * **Explanation:** | ||
741 | Collect used memory info. | ||
742 | |||
743 | * **Required permissions:** | ||
744 | none | ||
745 | |||
746 | * **Optional permissions:** | ||
747 | none | ||
748 | |||
749 | * **Variable description:** | ||
750 | total - total in kB | ||
751 | buffers - buffers in kB | ||
752 | cached - cached in kB | ||
753 | free - free in kB | ||
754 | |||
755 | * **Example:** | ||
756 | {{code language="json"}}{ | ||
757 | "ts": 1548765433296, | ||
758 | "memoryUse": { | ||
759 | "total": 2847404, | ||
760 | "buffers": 1291312, | ||
761 | "cached": 3560, | ||
762 | "free": 87684 | ||
763 | } | ||
764 | }{{/code}} | ||
765 | |||
766 | == 3.16 MESSAGE - deprecated == | ||
767 | |||
768 | * **Explanation:** | ||
769 | Collect all data history from sms and mms. Due to new Google policy changes we can't collect call informations. [[Read more here>>https://play.google.com/about/privacy-security-deception/permissions/]] | ||
770 | |||
771 | * **Required permissions:** | ||
772 | Manifest.permission.READ_SMS{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} | ||
773 | |||
774 | * **Optional permissions:** | ||
775 | none | ||
776 | |||
777 | * **Variable description:** | ||
778 | date - date | ||
779 | bodyLength - message length | ||
780 | incoming - incoming sms/mms | ||
781 | sent - sent sms/mms | ||
782 | inbox - inboxed sms/mms | ||
783 | outbox - outbox sms/mms | ||
784 | failed - failes send sms/mms | ||
785 | queued - waiting in queue sms/mms | ||
786 | |||
787 | * **Example:** | ||
788 | {{code language="json"}}{ | ||
789 | "smsData": { | ||
790 | "draft": [ | ||
791 | { | ||
792 | "date": "", | ||
793 | "bodyLength": "" | ||
794 | } | ||
795 | ], | ||
796 | "incoming": [ | ||
797 | { | ||
798 | "date": "", | ||
799 | "bodyLength": "" | ||
800 | } | ||
801 | ], | ||
802 | "sent": [ | ||
803 | { | ||
804 | "date": "", | ||
805 | "bodyLength": "" | ||
806 | } | ||
807 | ], | ||
808 | "inbox": [ | ||
809 | { | ||
810 | "date": "", | ||
811 | "bodyLength": "" | ||
812 | } | ||
813 | ], | ||
814 | "outbox": [ | ||
815 | { | ||
816 | "date": "", | ||
817 | "bodyLength": "" | ||
818 | } | ||
819 | ], | ||
820 | "failed": [ | ||
821 | { | ||
822 | "date": "", | ||
823 | "bodyLength": "" | ||
824 | } | ||
825 | ], | ||
826 | "queued": [ | ||
827 | { | ||
828 | "date": "", | ||
829 | "bodyLength": "" | ||
830 | } | ||
831 | ] | ||
832 | } | ||
833 | }{{/code}} | ||
834 | |||
835 | == 3.17 NETWORK_CONNECTION == | ||
836 | |||
837 | * **Explanation:** | ||
838 | Collect about connection information: "wifi" or "mobile data" or "no connection". | ||
839 | |||
840 | * **Required permissions:** | ||
841 | Manifest.permission.ACCESS_NETWORK_STATE{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}} | ||
842 | |||
843 | * **Optional permissions:** | ||
844 | none | ||
845 | |||
846 | * **Variable description:** | ||
847 | type - connection type (no connection, mobile data, wifi) | ||
848 | ts - the timestamp when the event occurred | ||
849 | locTs - true if ts is local, false otherwise | ||
850 | |||
851 | * **Example:** | ||
852 | {{code language="json"}}{ | ||
853 | "ts": 1548766520028, | ||
854 | "networkConnection": { | ||
855 | "connection": [ | ||
856 | { | ||
857 | "type": "no connection", | ||
858 | "ts": 1548766200083 | ||
859 | }, | ||
860 | { | ||
861 | "type": "mobile data", | ||
862 | "ts": 1548766402136 | ||
863 | }, | ||
864 | { | ||
865 | "type": "wifi", | ||
866 | "ts": 1548766402739 | ||
867 | } | ||
868 | ] | ||
869 | } | ||
870 | }{{/code}} | ||
871 | |||
872 | == 3.18 NETWORK_USAGE == | ||
873 | |||
874 | * **Explanation:** | ||
875 | Collect all network usage data from all application on device. Works till Android Marshmallow 6.0. | ||
876 | |||
877 | * **Required permissions:** | ||
878 | none | ||
879 | |||
880 | * **Optional permissions:** | ||
881 | none | ||
882 | |||
883 | * **Variable description:** | ||
884 | totalTxBytes - number of bytes transmitted since device boot | ||
885 | mobileTxBytes - number of bytes transmitted across mobile networks since device boot | ||
886 | mobileRxBytes - number of bytes received across mobile networks since device boot | ||
887 | totalRxBytes - number of bytes received since device boot. | ||
888 | sinceTs - timestamp | ||
889 | locTs - true if sinceTs is local, false otherwise | ||
890 | mobileTxPackets - number of packets transmitted across mobile networks since device boot | ||
891 | mobileRxPackets - number of packets received across mobile networks since device boot | ||
892 | totalRxPackets - number of packets received since device boot | ||
893 | totalTxPackets - number of packets transmitted since device boot | ||
894 | apps - json array with apps network usage | ||
895 | launcher - got "good" intent to launch a front-door activity in a package | ||
896 | packageName - application package name | ||
897 | |||
898 | * **Example:** | ||
899 | {{code language="json"}}{ | ||
900 | "ts": 1548767131411, | ||
901 | "networkUsage": { | ||
902 | "totalTxBytes": 16731554, | ||
903 | "mobileRxBytes": 0, | ||
904 | "apps": [ | ||
905 | { | ||
906 | "totalTxBytes": 433532, | ||
907 | "launcher": true, | ||
908 | "packageName": "spicymobile.sample2.mobience", | ||
909 | "totalRxBytes": 550934 | ||
910 | } | ||
911 | ], | ||
912 | "totalRxBytes": 92932021, | ||
913 | "sinceTs": 1548067012569, | ||
914 | "mobileTxPackets": 0, | ||
915 | "mobileRxPackets": 0, | ||
916 | "mobileTxBytes": 0, | ||
917 | "totalRxPackets": 111935, | ||
918 | "totalTxPackets": 82378 | ||
919 | } | ||
920 | }{{/code}} | ||
921 | |||
922 | == 3.19 NFC_COLLECTOR == | ||
923 | |||
924 | * **Explanation:** | ||
925 | NFC collector collects information of NFC funtion of that device, contains normal NFC NFED information. | ||
926 | |||
927 | * **Required permissions:** | ||
928 | Manifest.permission.NFC{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}} | ||
929 | |||
930 | * **Optional permissions:** | ||
931 | none | ||
932 | |||
933 | * **Variable description:** | ||
934 | NFC - json object with nfc data | ||
935 | NFED - json object with nfed data (Android Beam file transfer) | ||
936 | isSupported - true if device support nfc/nfed feature, false otherwise | ||
937 | isEnabled - tru if nfc/nfed is enable | ||
938 | |||
939 | * **Example:** | ||
940 | {{code language="json"}}{ | ||
941 | "ts": 1566982896999, | ||
942 | "nfcInfo": { | ||
943 | "NFED": { | ||
944 | "isSupported": false | ||
945 | }, | ||
946 | "NFC": { | ||
947 | "isSupported": false | ||
948 | } | ||
949 | } | ||
950 | }{{/code}} | ||
951 | |||
952 | == 3.20 PACKAGE_CHANGE == | ||
953 | |||
954 | * **Explanation:** | ||
955 | Collect all package change event (install new app, remove app, data clear, restart app). | ||
956 | |||
957 | * **Required permissions:** | ||
958 | none | ||
959 | |||
960 | * **Optional permissions:** | ||
961 | none | ||
962 | |||
963 | * **Variable description:** | ||
964 | versionName - version name of application | ||
965 | name - application name | ||
966 | uid - application uid | ||
967 | versionCode - version code of application | ||
968 | action - change action (added, removed, restarted, dataCleared, replaced) | ||
969 | replacing - true if replaced, false otherwise | ||
970 | dataRemoved - true if data removed | ||
971 | |||
972 | * **Example:** | ||
973 | {{code language="json"}}{ | ||
974 | "ts": 1548768769016, | ||
975 | "packageChanges": { | ||
976 | "versionName": "27.0.215462205", | ||
977 | "name": "com.google.android.talk", | ||
978 | "uid": 10076, | ||
979 | "versionCode": 25335509, | ||
980 | "action": "restarted" | ||
981 | } | ||
982 | } | ||
983 | |||
984 | { | ||
985 | "ts": 1567150590629, | ||
986 | "packageChanges": { | ||
987 | "uid": 11422, | ||
988 | "name": "pl.meonmobile.searchplaces", | ||
989 | "action": "removed", | ||
990 | "replacing": false, | ||
991 | "dataRemoved": true | ||
992 | } | ||
993 | }{{/code}} | ||
994 | |||
995 | == 3.21 PERMISSION_COLLECTOR == | ||
996 | |||
997 | * **Explanation:** | ||
998 | SDKAppPermission gathers every week list of all the Android permissions that it have and list of enabled data collectors from MobienceSDK. | ||
999 | |||
1000 | * **Required permissions:** | ||
1001 | none | ||
1002 | |||
1003 | * **Optional permissions:** | ||
1004 | none | ||
1005 | |||
1006 | * **Variable description:** | ||
1007 | collectors - json object containing enabled collectors | ||
1008 | permission - json array with granted permissions | ||
1009 | sysPerm - json array with system level permissions | ||
1010 | sigPerm - json array with signature level permissions | ||
1011 | dangPerm - json array with dangerous level permissions | ||
1012 | gS - true if permission granted, false otherwise | ||
1013 | **Important "collectors" section information** | ||
1014 | Collector number 3 (Browser) has name "browserPhrases" and if it exists, it means that all three browser collectors (phrases, history, bookmarks) are working. | ||
1015 | |||
1016 | * **Example:** | ||
1017 | {{code language="json"}}{ | ||
1018 | "ts": 1587626370619, | ||
1019 | "SDKAppPermissions": { | ||
1020 | "collectors": { | ||
1021 | "3": "browserPhrases", | ||
1022 | "22": "SDKAppPermissions" | ||
1023 | }, | ||
1024 | "permissions": [ | ||
1025 | "android.permission.INTERNET", | ||
1026 | "android.permission.ACCESS_COARSE_LOCATION", | ||
1027 | "android.permission.ACCESS_FINE_LOCATION" | ||
1028 | ], | ||
1029 | "sysPerm": [ | ||
1030 | { | ||
1031 | "name": "android.permission.DELETE_PACKAGES", | ||
1032 | "gS": false | ||
1033 | } | ||
1034 | ], | ||
1035 | "sigPerm": [ | ||
1036 | { | ||
1037 | "name": "android.permission.GET_TOP_ACTIVITY_INFO", | ||
1038 | "gS": false | ||
1039 | }, | ||
1040 | { | ||
1041 | "name": "android.permission.PACKAGE_USAGE_STATS", | ||
1042 | "gS": false | ||
1043 | }, | ||
1044 | { | ||
1045 | "name": "accessibility", | ||
1046 | "gS": false | ||
1047 | }, | ||
1048 | { | ||
1049 | "name": "ignoreBatteryOptimizations", | ||
1050 | "gS": false | ||
1051 | } | ||
1052 | ], | ||
1053 | "dangPerm": [ | ||
1054 | { | ||
1055 | "name": "android.permission.ACCESS_COARSE_LOCATION", | ||
1056 | "gS": true | ||
1057 | }, | ||
1058 | { | ||
1059 | "name": "android.permission.ACCESS_FINE_LOCATION", | ||
1060 | "gS": true | ||
1061 | }, | ||
1062 | { | ||
1063 | "name": "android.permission.READ_PHONE_STATE", | ||
1064 | "gS": true | ||
1065 | } | ||
1066 | ] | ||
1067 | } | ||
1068 | }{{/code}} | ||
1069 | |||
1070 | == 3.22 PHONE_INFO == | ||
1071 | |||
1072 | * **Explanation:** | ||
1073 | Collect informations of a device, such as: Identifiers of device model, system version, IMSI, IP, network operator of SIM card and mobile network, WiFi network data, etc. | ||
1074 | |||
1075 | * **Required permissions:** | ||
1076 | none | ||
1077 | |||
1078 | * **Optional permissions:** | ||
1079 | android.permission.READ_PHONE_STATE | ||
1080 | android.permission.ACCESS_NETWORK_STATE | ||
1081 | android.permission.ACCESS_WIFI_STATE | ||
1082 | |||
1083 | * **Variable description:** | ||
1084 | boottime - UNIX timestamp when last boot occurred (available sice sdk 1.4) | ||
1085 | awaketime - milliseconds since boot, not counting time spent in deep sleep | ||
1086 | df - A string that uniquely identifies this build. | ||
1087 | sbr - The screen backlight brightness between 0 and 255 | ||
1088 | os - android system version | ||
1089 | nt - name describe the type of the network, for example (WIFI, MOBILE, offline), requires optional permission ACCESS_NETWORK_STATE | ||
1090 | ns - human-readable name describing the subtype of the network, requires optional permission ACCESS_NETWORK_STATE | ||
1091 | bssid - basic service set identifier (BSSID) of the current access point, requires optional permission ACCESS_WIFI_STATE | ||
1092 | nopc - numeric name (MCC+MNC) of current registered operator. | ||
1093 | ip - current ip | ||
1094 | vlsm - audio stream level for music playback | ||
1095 | dm - The end-user-visible name for the end product. | ||
1096 | imsi - unique subscriber ID, for example, the IMSI for a GSM phone, requires optional permission READ_PHONE_STATE | ||
1097 | ssid - service set identifier (SSID) of the current 802.11 network, requires optional permission ACCESS_WIFI_STATE | ||
1098 | nop - alphabetic name of current registered operator. | ||
1099 | mac - MAC address, requires optional permission ACCESS_WIFI_STATE | ||
1100 | dr - screen heightXwidth | ||
1101 | uptime - milliseconds since boot, including time spent in sleep. | ||
1102 | dv - manufacturer of the product/hardware. | ||
1103 | sop - Service Provider Name (SPN). | ||
1104 | lan - name for the locale's language that is appropriate for display to the user. | ||
1105 | sopc - MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits. | ||
1106 | pl - device system (currently only support Android) | ||
1107 | vlr - audio stream level for the phone ring | ||
1108 | dc - device type (TB, CF) | ||
1109 | ip - IP address | ||
1110 | |||
1111 | * **Example:** | ||
1112 | {{code language="json"}}{ | ||
1113 | "ts": 1548770227737, | ||
1114 | "phoneInfo": { | ||
1115 | "awaketime": 273412299, | ||
1116 | "df": "HONOR/LLD-L21/HWLLD-H:8.0.0/HONORLLD-L21/135(C185):user/release-keys", | ||
1117 | "sbr": 41, | ||
1118 | "os": "8.0.0", | ||
1119 | "nt": "WIFI", | ||
1120 | "bssid": "7a:8a:20:21:c9:d0", | ||
1121 | "nopc": "26002", | ||
1122 | "ip": "10.0.0.73", | ||
1123 | "vlsm": 0, | ||
1124 | "dm": "LLD-L21", | ||
1125 | "imsi": "260021722534787", | ||
1126 | "ssid": "\"Spicy Mobile\"", | ||
1127 | "nop": "T-Mobile.pl", | ||
1128 | "mac": "A4:93:3F:5F:00:7E", | ||
1129 | "dr": "2032x1080", | ||
1130 | "uptime": 1751734597, | ||
1131 | "boottime": 1573952930107, | ||
1132 | "dv": "HUAWEI", | ||
1133 | "sop": "T-Mobile.pl", | ||
1134 | "lan": "polski", | ||
1135 | "sopc": "26002", | ||
1136 | "pl": "Android", | ||
1137 | "vlr": 0, | ||
1138 | "dc": "CF", | ||
1139 | "ip" : "192.168.1.1" | ||
1140 | } | ||
1141 | }{{/code}} | ||
1142 | |||
1143 | == 3.23 PROFILE_MODE == | ||
1144 | |||
1145 | * **Explanation:** | ||
1146 | Collect time change profile mode. | ||
1147 | |||
1148 | * **Required permissions:** | ||
1149 | none | ||
1150 | |||
1151 | * **Optional permissions:** | ||
1152 | none | ||
1153 | |||
1154 | * **Variable description:** | ||
1155 | profile - array containing json objects with profiles | ||
1156 | mode - selected mode (normal, silent, vibrate) | ||
1157 | ts - timestamp when event occured | ||
1158 | locTs - true if timestamp is local, false otherwise | ||
1159 | |||
1160 | * **Example:** | ||
1161 | {{code language="json"}}{ | ||
1162 | "ts": 1550047296392, | ||
1163 | "profileMode": { | ||
1164 | "profile": [ | ||
1165 | { | ||
1166 | "ts": 1550047296375, | ||
1167 | "mode": "normal" | ||
1168 | } | ||
1169 | ] | ||
1170 | } | ||
1171 | }{{/code}} | ||
1172 | |||
1173 | == 3.24 ROAMING == | ||
1174 | |||
1175 | * **Explanation:** | ||
1176 | Catch event roaming. | ||
1177 | |||
1178 | * **Required permissions:** | ||
1179 | Manifest.permission.ACCESS_NETWORK_STATE{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}} | ||
1180 | |||
1181 | * **Optional permission**s: | ||
1182 | none | ||
1183 | |||
1184 | * **Variable description:** | ||
1185 | startRoaming - start roaming timestamp | ||
1186 | stopRoaming - stop roaming timestamp | ||
1187 | |||
1188 | * **Example:** | ||
1189 | {{code language="json"}}{ | ||
1190 | "ts": 1566983257084, | ||
1191 | "roamingUse": { | ||
1192 | "startRoaming": 1566983257084, | ||
1193 | "stopRoaming": 1566983457084 | ||
1194 | } | ||
1195 | }{{/code}} | ||
1196 | |||
1197 | == 3.25 SCREEN_ORIENTED == | ||
1198 | |||
1199 | * **Explanation:** | ||
1200 | Collect data about device's orientation. | ||
1201 | |||
1202 | * **Required permissions:** | ||
1203 | none | ||
1204 | |||
1205 | * **Optional permissions**: | ||
1206 | none | ||
1207 | |||
1208 | * **Variable description:** | ||
1209 | oriented - screen rotation (portrait, landscape, reverse portrait, reverse landscape,"") | ||
1210 | timestamp - timestamp when event occured | ||
1211 | |||
1212 | * **Example:** | ||
1213 | {{code language="json"}}{ | ||
1214 | "ts": 1548844277703, | ||
1215 | "screenOriented": { | ||
1216 | "oriented": "portrait", | ||
1217 | "timestamp": 1548844280936 | ||
1218 | } | ||
1219 | }{{/code}} | ||
1220 | |||
1221 | == 3.26 SIGNAL_STRENGTH == | ||
1222 | |||
1223 | * **Explanation:** | ||
1224 | Collect phone signal info. | ||
1225 | |||
1226 | * **Required permissions:** | ||
1227 | none | ||
1228 | |||
1229 | * **Optional permissions:** | ||
1230 | none | ||
1231 | |||
1232 | * **Variable description:** | ||
1233 | cdmaDbm - CDMA RSSI value in dBm | ||
1234 | cdmaEcio - CDMA Ec/Io value in dB*10 | ||
1235 | gsmBitErrorRate - GSM bit error rate (0-7, 99) as defined in TS 27.007 8.5 | ||
1236 | evdoDbm - EVDO RSSI value in dBm | ||
1237 | gsmSignalStrength - GSM Signal Strength, valid values are (0-31, 99) as defined in TS 27.007 8.5 | ||
1238 | isGsm - true if this is for GSM | ||
1239 | evdoSnr - EVDO RSSI value in dBm | ||
1240 | |||
1241 | * **Example:** | ||
1242 | {{code language="json"}}{ | ||
1243 | "ts": 1548844575858, | ||
1244 | "signalStrength": { | ||
1245 | "cdmaDbm": 0, | ||
1246 | "cdmaEcio": 0, | ||
1247 | "gsmBitErrorRate": -710850948, | ||
1248 | "evdoDbm": 32767, | ||
1249 | "gsmSignalStrength": 0, | ||
1250 | "isGsm": true, | ||
1251 | "evdoSnr": 32767 | ||
1252 | } | ||
1253 | }{{/code}} | ||
1254 | |||
1255 | == 3.27 WIFI_DATA_CONNECTION == | ||
1256 | |||
1257 | * **Explanation:** | ||
1258 | Gather list of visible WiFi networks, information of each wifi. To learn more about wifi network restrictions [[click here>>https://developer.android.com/guide/topics/connectivity/wifi-scan#wifi-scan-restrictions]]. | ||
1259 | |||
1260 | * **Required permissions:** | ||
1261 | Manifest.permission.ACCESS_WIFI_STATE{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}} - allow gather information about user connected wifi network | ||
1262 | |||
1263 | * **Optional permissions:** | ||
1264 | **Android <= 8.1 (sdk level <= 27)** | ||
1265 | - Manifest.permission.ACCESS_FINE_LOCATION{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} or Manifest.permission.ACCESS_COARSE_LOCATION{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} - to get nearby wifi networks | ||
1266 | - Manifest.permission.CHANGE_WIFI_STATE{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}}, Manifest.permission.ACCESS_FINE_LOCATION{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} or Manifest.permission.ACCESS_COARSE_LOCATION{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} - to start wifi networks scan | ||
1267 | **Android 9.0, 10 (sdk level 28, 29)** | ||
1268 | - Manifest.permission.ACCESS_FINE_LOCATION{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} or Manifest.permission.ACCESS_COARSE_LOCATION{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}}, enabled location services - to get nearby wifi networks | ||
1269 | -Manifest.permission.ACCESS_FINE_LOCATION{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}} or Manifest.permission.ACCESS_COARSE_LOCATION{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}}, enabled location services, Manifest.permission.CHANGE_WIFI_STATE{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}} - to start wifi networks scan | ||
1270 | |||
1271 | **Applications targeting Android 10 (API level 29) SDK or higher, has the Manifest.permission.ACCESS_FINE_LOCATION{{reference}}Dangerous permissions cover areas where the app wants data or resources that involve the user's private information, or could potentially affect the user's stored data or the operation of other apps. To use a dangerous permission, your app must prompt the user to grant permission at runtime.{{/reference}}.** | ||
1272 | |||
1273 | * **Variable description**: | ||
1274 | BSSID - basic service set identifier (BSSID) of the current access point. | ||
1275 | SSID - service set identifier (SSID) of the current 802.11 network | ||
1276 | signal_strength - wifi signal strength | ||
1277 | status - 1 if connected, 0 otherwise | ||
1278 | connect_hourperiod - connected time in milliseconds | ||
1279 | location - json object containing location data | ||
1280 | coordinates - json array with latitude and longitude coordinates | ||
1281 | type - always as Point | ||
1282 | |||
1283 | * **Example:** | ||
1284 | {{code language="json"}}{ | ||
1285 | "ts": 1548846466858, | ||
1286 | "wifiDataConnection": [ | ||
1287 | { | ||
1288 | "BSSID": "3c:77:e6:55:fc:e8", | ||
1289 | "signal_strength": -65, | ||
1290 | "SSID": "HP-Print-E8-LaserJet M1217", | ||
1291 | "status": 0 | ||
1292 | }, | ||
1293 | { | ||
1294 | "BSSID": "7a:8a:20:21:c9:d0", | ||
1295 | "signal_strength": -49, | ||
1296 | "SSID": "Spicy Mobile", | ||
1297 | "status": 1, | ||
1298 | "connect_hourperiod": 1548846000082, | ||
1299 | "location": { | ||
1300 | "coordinates": [ | ||
1301 | 52.2318224, | ||
1302 | 21.1063799 | ||
1303 | ], | ||
1304 | "type": "Point" | ||
1305 | }, | ||
1306 | }, | ||
1307 | { | ||
1308 | "BSSID": "cc:2d:e0:95:72:03", | ||
1309 | "signal_strength": -76, | ||
1310 | "SSID": "secured", | ||
1311 | "status": 0 | ||
1312 | } | ||
1313 | ] | ||
1314 | }{{/code}} | ||
1315 | |||
1316 | == 3.28 FACEBOOK_NETWORK_COLLECTOR == | ||
1317 | |||
1318 | * **Explanation:** | ||
1319 | Collect user facebook account data. | ||
1320 | |||
1321 | * **Required permissions**: | ||
1322 | none | ||
1323 | |||
1324 | * **Optional permissions:** | ||
1325 | none | ||
1326 | |||
1327 | * **Variable description:** | ||
1328 | birthday - user day of birth | ||
1329 | hometown - user hometown | ||
1330 | name - user name | ||
1331 | location - user location | ||
1332 | id - user unique ID | ||
1333 | email - user email | ||
1334 | |||
1335 | * **Example:** | ||
1336 | {{code language="json"}}{ | ||
1337 | "ts": 1548848391393, | ||
1338 | "facebookInfo": { | ||
1339 | "birthday": "01/01/1989", | ||
1340 | "hometown": "Warsaw, Poland", | ||
1341 | "name": "Jan Kowalski", | ||
1342 | "location": "Warsaw, Poland", | ||
1343 | "id": "1477748925836755", | ||
1344 | "email": "it@spicymobile.pl" | ||
1345 | } | ||
1346 | }{{/code}} | ||
1347 | |||
1348 | == 3.29 ROOT_COLLECTOR == | ||
1349 | |||
1350 | * **Explanation:** | ||
1351 | Collects information if device is rooted. | ||
1352 | |||
1353 | * **Required permissions:** | ||
1354 | none | ||
1355 | |||
1356 | * **Optional permissions**: | ||
1357 | none | ||
1358 | |||
1359 | * **Variable description:** | ||
1360 | isRooted - true if rooted, false otherwise | ||
1361 | |||
1362 | * **Example:** | ||
1363 | {{code language="json"}}{ | ||
1364 | "ts": 1549966944836, | ||
1365 | "rootEnabled": { | ||
1366 | "isRooted": false | ||
1367 | } | ||
1368 | }{{/code}} | ||
1369 | |||
1370 | == 3.30 MOVEMENT_COLLECTOR == | ||
1371 | |||
1372 | * **Explanation:** | ||
1373 | Collects information about user activity transitions (e.g., WALKING). | ||
1374 | |||
1375 | * **Required permissions:** | ||
1376 | com.google.android.gms.permission.ACTIVITY_RECOGNITION{{reference}}Normal permissions cover areas where your app needs to access data or resources outside the app's sandbox, but where there's very little risk to the user's privacy or the operation of other apps. The system doesn't prompt the user to grant normal permissions, and users cannot revoke these permissions.{{/reference}} | ||
1377 | |||
1378 | * **Optional permissions:** | ||
1379 | none | ||
1380 | |||
1381 | * **Variable description:** | ||
1382 | eventName - occured event name (currently supported STILL, WALKING, ON_BICYCLE, ON_FOOT, IN_VEHICLE, RUNNING, UNKNOWN) | ||
1383 | \\possible events description: | ||
1384 | IN_VEHICLE: The device is in a vehicle, such as a car. | ||
1385 | ON_BICYCLE: The device is on a bicycle. | ||
1386 | ON_FOOT: The device is on a user who is walking or running. | ||
1387 | RUNNING: The device is on a user who is running. This is a sub-activity of ON_FOOT. | ||
1388 | STILL: The device is still (not moving). | ||
1389 | TILTING: The device angle relative to gravity changed significantly. This often occurs when a device is picked up from a desk or a user who is sitting stands up. | ||
1390 | UNKNOWN: Unable to detect the current activity. | ||
1391 | WALKING: The device is on a user who is walking. This is a sub-activity of ON_FOOT. | ||
1392 | \\type - detected event state (ENTER,EXIT,UNKNOWN) | ||
1393 | timestamp - timestamp when event occured | ||
1394 | |||
1395 | * **Example:** | ||
1396 | {{code language="json"}}{ | ||
1397 | "ts": 1567595978339, | ||
1398 | "movement": { | ||
1399 | "transitions": [ | ||
1400 | { | ||
1401 | "eventName": "RUNNING", | ||
1402 | "location": { | ||
1403 | "coordinates": [ | ||
1404 | 37.4219983, | ||
1405 | -122.084 | ||
1406 | ] | ||
1407 | }, | ||
1408 | "type": "ENTER", | ||
1409 | "timestamp": 1567595978368 | ||
1410 | } | ||
1411 | ] | ||
1412 | } | ||
1413 | }{{/code}} | ||
1414 | |||
1415 | == 3.31 USB_COLLECTOR == | ||
1416 | |||
1417 | * **Explanation:** | ||
1418 | USB data collector collects information about connected USB devices. | ||
1419 | |||
1420 | * **Required permissions:** | ||
1421 | none | ||
1422 | |||
1423 | * **Optional permissions**: | ||
1424 | none | ||
1425 | |||
1426 | * **Variable description:** | ||
1427 | status - attached or detached | ||
1428 | manufacturer - the manufacturer name of the device. Only available for android version >= Lollipop 21. | ||
1429 | productName - the product name of the device. Only available for android version >= Lollipop 21. | ||
1430 | serialNum - the serial number of the device. Only available for android version >= Lollipop 21. | ||
1431 | maxPower - the configuration's max power consumption, in milliamps. Only available for android version >= Lollipop 21. | ||
1432 | version - the version number of the device. Only available for android version >= Marshmallow 23. | ||
1433 | name - he name of the device. In the standard implementation, this is the path of the device file for the device in the usbfs file system. | ||
1434 | timestamp - event timestamp. | ||
1435 | |||
1436 | * **Example:** | ||
1437 | {{code language="json"}}{ | ||
1438 | "ts": 1581501024406, | ||
1439 | "usbConnectedDevice": { | ||
1440 | "serialNum": "1226000000000D1F", | ||
1441 | "status": "attached", | ||
1442 | "productName": "STORE N GO", | ||
1443 | "version": "2.0", | ||
1444 | "name": "/dev/bus/usb/001/004", | ||
1445 | "timestamp": 1581501029080, | ||
1446 | "manufacturer": "Verbatim", | ||
1447 | "maxPower":100 | ||
1448 | } | ||
1449 | }{{/code}} | ||
1450 | |||
1451 | == 3.32 STANDBY_BUCKET_COLLECTOR == | ||
1452 | |||
1453 | * **Explanation:** | ||
1454 | Standby bucket data collector collector collects information about standby bucket the application using SDK is placed in. Android system selects the standby bucket based on how often the user interacts with the application. The amount of background jobs and alarms, that the application can run is the assigned based on the standby bucket the application is categorized into. | ||
1455 | |||
1456 | * **Required permissions:** | ||
1457 | none | ||
1458 | |||
1459 | * **Optional permissions**: | ||
1460 | none | ||
1461 | |||
1462 | * **Variable description:** | ||
1463 | standbyBucketValue - current value of standby bucket while the data collector runs | ||
1464 | \\possible values of standby bucket: | ||
1465 | Exempted: App is exempted from battery optimisation. There are no limits on the resources allocated for the app | ||
1466 | Active: App is currently being used or was very recently used. | ||
1467 | Working set: App is in regular use. | ||
1468 | Frequent: App is often used, but not every day. | ||
1469 | Rare: App is not frequently used. | ||
1470 | Restricted: App consumes a great deal of system resources, or may exhibit undesirable behavior | ||
1471 | |||
1472 | * process - process for which the datacollector is invoked. Main process of the app and Mobigate SDK process may be in different standby buckets. | ||
1473 | usageEvents - a list standby bucket changes since app was installed | ||
1474 | eventTs - timestamp of bucket change | ||
1475 | eventBucket - bucket that the app was categorized into at a given timestamp | ||
1476 | * **Example:** | ||
1477 | {{code language="json"}}{ | ||
1478 | "ts": 1557825443149, | ||
1479 | "standbyBucket": { | ||
1480 | "standbyBucketValue": "STANDBY_BUCKET_ACTIVE", | ||
1481 | "process": "SDK", | ||
1482 | "usageEvents":[ | ||
1483 | { | ||
1484 | "eventTs": 876876876876876, | ||
1485 | "eventBucket": "STANDBY_BUCKET_ACTIVE" | ||
1486 | }, | ||
1487 | { | ||
1488 | "eventTs": 876876876876876, | ||
1489 | "eventBucket": "STANDBY_BUCKET_ACTIVE" | ||
1490 | }, | ||
1491 | ] | ||
1492 | } | ||
1493 | }{{/code}} | ||
1494 | |||
1495 | = 4.0 Default Collection interval = | ||
1496 | |||
1497 | * **APPS_LIST** - 24h | ||
1498 | * **APPS_USAGE** - 24h | ||
1499 | * **BATTERY** - passive - level (every 1h), active - charge events broadcast | ||
1500 | * **BROWSER** - 24h | ||
1501 | * **CALENDAR_EVENTS** - 24h | ||
1502 | * **CPU_PROCESS** - 1h | ||
1503 | * **DICTIONARY** - 7d | ||
1504 | * **GEOLOCATION** - passive - 4h, active - interval 70s, accuracy 5 | ||
1505 | * **HEADSET_PLUG** - active - broadcast | ||
1506 | * **MEDIA_FILES** - 24h | ||
1507 | * **MEMORY_USEAGE** - 2h | ||
1508 | * **NETWORK_CONNECTION** - active - broadcast | ||
1509 | * **NETWORK_USEAGE** - 1h | ||
1510 | * **PACKAGE_CHANGE** - active - broadcast | ||
1511 | * **PHONE_INFO** - 1h | ||
1512 | * **ROAMING** - active - broadcast | ||
1513 | * **SCREEN_ORIENTED** - 2h | ||
1514 | * **SIGNAL_STRENGTH** - active - broadcast | ||
1515 | * **PROFILE_MODE** - active - broadcast | ||
1516 | * **WIFI_DATA_CONNECTION** - active - broadcast | ||
1517 | * **PERMISSION_COLLECTOR** - 7d | ||
1518 | * **NFC_COLLECTOR** - 1h | ||
1519 | * **BLUETOOTH_COLLECTOR** - 1h | ||
1520 | * **BLUETOOTH_DEVICES_COLLECTOR** - broadcast (works while app is in background) | ||
1521 | * **MOVEMENT_COLLECTOR** - broadcast (works while app is in background) | ||
1522 | * **FACEBOOK_NETWORK_COLLECTOR** - 24h | ||
1523 | * **ROOT_COLLECTOR** - 1m | ||
1524 | * **USB_COLLECTOR** - broadcast (works while app is in background) | ||
1525 | * **STANDBY_BUCKET_COLLECTOR **- 24h | ||
1526 | |||
1527 | = 5. Collector json object names = | ||
1528 | |||
1529 | "appsList","appsUsage2","appsUsage","batteryInfo","bluetoothInfo","bluetoothLE","bluetoothConnectedDevice","browserHistory","browserBookmarks", | ||
1530 | "browserPhrases","calendarEvent","callLogData","cpuProcess","dictionary","geolocation","headsetPlug","mediaFiles","memoryUse","smsData","networkConnection", | ||
1531 | "networkUsage","nfcInfo","packageChanges","SDKAppPermissions","phoneInfo","profileMode","roamingUse","screenOriented","signalStrength","wifiDataConnection", | ||
1532 | "facebookInfo","rootEnabled","movement","usbConnectedDevice", "standbyBucket" | ||
1533 | |||
1534 | = 6. Description of permissions = | ||
1535 | |||
1536 | A full description of all permits on the android system can be found [[here>>https://developer.android.com/reference/android/Manifest.permission#constants_1]] | ||
1537 | |||
1538 | ---- | ||
1539 | |||
1540 | {{references/}} |