44
Android as a Digital Signage platform Betabeers Barcelona November 2013

Betabeers Android as a Digital Signage platform

Embed Size (px)

DESCRIPTION

Slids from my talk at Betabeers Barcelona on November of 2013

Citation preview

Page 1: Betabeers   Android as a Digital Signage platform

Android as a Digital Signage platform

Betabeers Barcelona November 2013

Page 2: Betabeers   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: Betabeers   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

Software Development DirectorCertified SCRUM MasterPHP 5.3 Zend Certified Engineer

Read about mehttp://blog.orestes.io

Follow me@orestesCA

Page 4: Betabeers   Android as a Digital Signage platform

What’s Digital Signage?

Page 5: Betabeers   Android as a Digital Signage platform

What’s Digital Signage?

Page 6: Betabeers   Android as a Digital Signage platform
Page 7: Betabeers   Android as a Digital Signage platform
Page 8: Betabeers   Android as a Digital Signage platform

The beginning

Page 9: Betabeers   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 10: Betabeers   Android as a Digital Signage platform

System architecture

Apache Cordova

VPN

BusyBox

ADB

SSH

JavaScript player

SuperSU

scheduler

HTTP API

API Client

cron

CLI API

Page 11: Betabeers   Android as a Digital Signage platform

Prototype

http://vimeo.com/72032877

Page 12: Betabeers   Android as a Digital Signage platform

Let’s do it!

Page 13: Betabeers   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: Betabeers   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$ pm stop 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: Betabeers   Android as a Digital Signage platform

Features

Page 16: Betabeers   Android as a Digital Signage platform

Player

CordovaRotates screenShows WebViewProvides OS shell access

JavaScriptDisplays contentReads content index fileListens for gestureAsks for security codeShows config manager

Page 17: Betabeers   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 18: Betabeers   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 19: Betabeers   Android as a Digital Signage platform

Local configuration manager

Content Index file

Player configuration file

Configuration manager

Content player

Page 20: Betabeers   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 21: Betabeers   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 22: Betabeers   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 23: Betabeers   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 24: Betabeers   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 25: Betabeers   Android as a Digital Signage platform

Statistics & graphs

Page 26: Betabeers   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 27: Betabeers   Android as a Digital Signage platform

Platforming

Page 28: Betabeers   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 29: Betabeers   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 30: Betabeers   Android as a Digital Signage platform

Content Management System

Page 31: Betabeers   Android as a Digital Signage platform
Page 32: Betabeers   Android as a Digital Signage platform
Page 33: Betabeers   Android as a Digital Signage platform
Page 34: Betabeers   Android as a Digital Signage platform

Testing

Page 35: Betabeers   Android as a Digital Signage platform

Quick feedback

Acceptance Tests● CLI API ● Web API

Physical testing devices

Testing

Page 36: Betabeers   Android as a Digital Signage platform

Testing Scenario Outline: Get a list of cities based on the passed parameters Given I have an endpoint "http://api.pushmaster.focusonemotions.com/1.0/city/" And I pass an argument "id" "<id>" And I pass an argument "title" "<title>" When I make a "<method>" request to the endpoint Then I should get a valid response "<response>"

Examples: | method | id | title | response | | GET | | | city/city-list.json | | GET | 1 | | city/city-get-by-id.json | | GET | | Hobbiton | city/city-get-by-title.json | | GET | -1 | | null.json | | GET | | FOO | null.json |

Page 37: Betabeers   Android as a Digital Signage platform

All done

Page 38: Betabeers   Android as a Digital Signage platform

Ha ha!

Page 39: Betabeers   Android as a Digital Signage platform
Page 40: Betabeers   Android as a Digital Signage platform

Monitoring with Nagios

Page 41: Betabeers   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 42: Betabeers   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 43: Betabeers   Android as a Digital Signage platform

http://www.focusonemotions.com

dev@focusonemotions

Thank you!Feedback

[email protected]

TeamJuanra PosadaOrestes Carracedo

Javier MoralesDimas López

Raúl Jiménez Javier DomingoGonzalo Rodríguez

Project ManagerLead Developer

Developers

JavaScript NinjaSystem Administrators

Page 44: Betabeers   Android as a Digital Signage platform

ChallengeBreak out of the player app, win an Amazon gift card!

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