Android as a digital signage platform

36
Android as a Digital Signage platform Barcelona Android User Group October 2013

description

Slides for my talk at Barcelona Android User Group on October

Transcript of Android as a digital signage platform

Page 1: Android as a digital signage platform

Android as a Digital Signage platform

Barcelona Android User Group October 2013

Page 2: Android as a digital signage platform

Hello worldClients

OrangeEl Corte Inglés

EndesaSodexo

IkeaNespresso

Fira BarcelonaAjuntament de Barcelona

ESADEThe Phone House

The company20 peopleDigital SignageUser Interactivity

ProjectsSpain United Kingdom GermanyNetherlandsFinland

www.focusonemotions.com@focusonemotions

Page 3: Android as a digital signage platform

Hello world

Orestes Carracedo

8 years as a developer4 years as an Android user3,5 years at Focus On Emotions

Certified SCRUM MasterPHP 5.3 Zend Certified Engineer

Read about mehttp://blog.orestes.io

Follow me@orestesCA

Page 4: Android as a digital signage platform

What’s Digital Signage?

Page 5: Android as a digital signage platform

What’s Digital Signage?

Page 6: Android as a digital signage platform

What’s Digital Signage?

Page 7: Android as a digital signage platform
Page 8: Android as a digital signage platform

ChallengeBreak out of the player app and you’ll get a reward

● Try to guess the unlock gesture● Try to guess the unlock code● No buttons● No fastboot

Page 9: Android as a digital signage platform

Start

Page 10: Android as a digital signage platform

Briefing

Make it on timeCode as less as possible

Be robustMake use of existing OS toolsMake use of existing apps

Be flexibleCreate multiple decoupled tools that work together

Page 11: Android as a digital signage platform

System architecture

Apache Cordova

VPN

BusyBox

ADB

SSH

JavaScript player

SuperSU

scheduler

Page 12: Android as a digital signage platform

Prototype

http://vimeo.com/72032877

Page 13: Android as a digital signage platform

Quick ADB recap$ adb devicesList of devices attached4df144cb39376f2f device # Over USB192.168.1.42:5555 device # Over NET

$ adb shell echo “Hello world”Hello world

$ adb -d shell ls /mnt/sdcard$ adb -s 192.168.1.42:5555 shell ls /mnt/sdcard

Enable ADB over Wi-Fi$ adb shell setprop service.adb.tcp.port 5555$ adb shell stop adbd && start adbd # or you’ll be locked out

$ adb connect 192.168.1.42:5555

Page 14: Android as a digital signage platform

Quick ADB recapSending keys$ adb shell input keyevent 3 # home

Starting activities$ adb shell am start -n com.focusonemotions.android.player./Wrapper

Killing a process$ adb shell killall com.focusonemotions.android.player

Installing apps$ adb install foe-player-v1.1.apk$ adb push foe-player-v1.1.apk /system/app

Android Monitor<android-sdk>/tools/monitor

http://developer.android.com/reference/android/view/KeyEvent.html

Page 15: Android as a digital signage platform

Features

Page 16: Android as a digital signage platform
Page 17: Android as a digital signage platform

Player

CordovaScreen rotationRead start URLProvide OS access

JavaScriptDisplay contentRead content index fileListen for gestureAsk for codeShow config manager

Page 18: Android as a digital signage platform

SchedulerPower management$ reboot # (duh)

Screen state management$ input keyevent 26 # power

$ input keyevent 82 # menu

Player state management$ killall com.focusonemotions.android.player

$ am start -n com.[...].player/.Wrapper

http://developer.android.com/reference/android/view/KeyEvent.html

Page 19: Android as a digital signage platform

Restricted user access● Kill UI process● Custom launcher

AndroidManifest<category android:name="android.intent.category.HOME" />

/system/build.propqemu.hw.mainkeys=1

● Custom ROM

http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/

Page 20: Android as a digital signage platform

Local configuration manager

Content Index file

Player configuration file

Configuration manager

Content player

Page 21: Android as a digital signage platform

Static IP address

https://play.google.com/store/apps/details?id=de.schaeuffelhut.android.openvpn.installerhttps://play.google.com/store/apps/details?id=de.blinkt.openvpn

$ openvpn --config /mnt/sdcard/focus/openvpn/conn.conf > /mnt/sdcard/focus/openvpn/run.log &

$ cat /mnt/sdcard/focus/openvpn/conn.conf | grep resolvresolv-retry infinite

Page 22: Android as a digital signage platform

Remote shell$ adb connect 192.168.1.42:5555

$ time adb connect 192.168.1.42:5555

unable to connect to 192.168.1.42:5555

real 1m3.163s

user 0m0.000s

sys 0m0.020s

.

.

$ time timeout 9s adb connect 192.168.1.42

real 0m9.003s

user 0m0.000s

sys 0m0.020s

Page 23: Android as a digital signage platform

Screen capture$ adb shell screencap /mnt/sdcard/focus/capture.png

$ adb pull /mnt/sdcard/focus/capture.png

$ ./capture.sh oratab-030-01

Getting screencap from oratab-030-01 ... done.

Page 24: Android as a digital signage platform

Wi-Fi management$ echo "12345678" | wpa_passphrase "SSID"

# reading passphrase from stdin

network={

ssid="SSID"

#psk="12345678"

psk=34b59e6b0182725d42460 [...]

}

$ wpa_passphrase "SSID" "12345678" # may malfunction

$ wpa_passphrase "SSID" # may malfunction

# reading passphrase from stdin

Android Wi-fi/WPA settings/data/misc/wifi/wpa_supplicant.conf

Page 25: Android as a digital signage platform

Content management$ adb push /local/folder /remote/folder

PHP SFTP Wrapper$ php load-device-content.php 300 7

Loading content …

50 % 20/40 KB

100 % 40/40 KB

Done.

/mnt/sdcard/focus

+ openvpn

+ player

+ scheduler

+ upload

- content

- october_2013

+ media

Page 26: Android as a digital signage platform

Statistics & graphs

Page 27: Android as a digital signage platform

Statistics & graphsWhisper database (updates to past data)Carbon aggregation (Use an IP, not a hostname UDP is better than TCP, is off by default)Graphite for rendering

$ /opt/graphite/bin/carbon-cache.py start --debug

$ echo ‘value.received’ `date +%s` | nc -w 1 127.0.0.1 2003

StatsD/statsite as aggregator/proxy (v8 nodejs vs C)<?php StatsD::increment(‘com.focusonemotions.app.pushing’);

http://graphite.readthedocs.org/en/latest/https://github.com/etsy/statsd/https://github.com/armon/statsite

Page 28: Android as a digital signage platform

Platforming

Page 29: Android as a digital signage platform

1. Plug device in2. Enable ADB over USB3. Launch script4. Enter ID5. Done!

Check

● PING● SFTP● SSH● ADB

Platforming

Page 30: Android as a digital signage platform

$ sftp [email protected]:mnt/sdcard/focusbash: /usr/libexec/sftp-server: No such file or directory$ sftp -s /system/xbin/sftp-server [email protected]:mnt/sdcard/focussftp># quick fix[adb] $ ln -s /system/xbin/sftp-server /usr/libexec/sftp-server

Install SuperSU + settingsInstall BusyBoxInstall DropBearSSHFix SFTP subsystemInstall playerInstall schedulerInstall OpenVPN certificates from IDReboot

Platforming

http://www.chainfire.eu/projects/52/SuperSU/https://play.google.com/store/apps/details?id=stericson.busyboxhttps://github.com/yath/android_external_dropbear

Page 31: Android as a digital signage platform

Ha ha!

Page 32: Android as a digital signage platform

Monitoring with Nagios

Page 33: Android as a digital signage platform

Monitoring with Nagios$ php check-device-content.php 192.168.1.42

Up-to-date

$ php check-device-content.php 192.168.1.42

Out of date

http://nagios.sourceforge.net/docs/3_0/quickstart.html

Page 34: Android as a digital signage platform

Monitoring with Nagios<?xml version="1.0" encoding="UTF-8"?><nagios_status><hosts><host name="dev-001"> <status last_change="2013-10-08T16:27:37+02:00">0</status> <connectivity last_change="2013-10-08T16:27:37+02:00">0</connectivity> <content last_change="2013-10-08T16:27:37+02:00">0</content> <sftp last_change="2013-10-08T16:27:37+02:00">0</sftp></host>[...]

Page 35: Android as a digital signage platform

Questions?

Page 36: Android as a digital signage platform

www.focusonemotions.comdev@focusonemotions

Thank you!

[email protected]

Team

Juanra PosadaOrestes Carracedo

Javier MoralesDimas López

Raúl Jiménez Javier DomingoGonzalo Rodríguez

Project ManagerLead Developer

Developers

JavaScript NinjaSistemas