SlideShare una empresa de Scribd logo
1 de 42
Descargar para leer sin conexión
Client API
Technology Behind
Glympse-enabled Applications
Copyright (c) 2016 Glympse, Inc.
All Rights Reserved. Patents Pending
Egor Pushkin
egor@glympse.com
Chief Architect
Glympse, Inc.
Partners
http://www.glympse.com/partners
Applications
Street Pilot
App Radio
Verizon Messages
for
HERE for
Terminology
Client API / API / Library / Platform
class library encapsulating Glympse related functionality
Client Application / Host Application / Application
3rd party Glympse-enabled application
Device / Phone
any device supported by Glympse API
Glympse Services / REST API / Server
Glympse cloud services
Glympse / Ticket
A location sharing activity on the system…
Glympse © 2016
All Rights Reserved
Send a Glympse
View a Glympse
Glympse Request
Glympse Groups "!"
Fundamental Features
Glympse
Glympse
Request
Glympse
!Group
Sender Viewer
Requester
Viewer Sender
Requestee
Group
Members
Group
Followers
G
lym
pse
Glympse
Glympse
Glympse © 2016
All Rights Reserved
API Highlights
Extreme Level of Portability
Common code base is shared across C++/Java/C#
Supported Mobile Platforms
Android, iOS, BlackBerry 10, Windows Phone 8
Common Public Interface and Documentation
Public interfaces of all exposed objects are identical across all platforms
Programming paradigms and patterns are identical across all platforms
Component-oriented Architecture
API functionality is splitted into independent components,
which makes it extremely easy to extend and maintain library feature set
Highly Customizable
Most aspects of library behavior are configurable both locally and globally
Glympse © 2016
All Rights Reserved
High-Level View
Glympse API
Public Interface
Concurrency
Mutex, Semaphore,
Thread, Event Thread,
Timer, Handler
Core
Strings,
Containers
Images
NetworkingStorage
Files, Cache,
Keychain
GPS
Location,
Proximity
Battery Messaging
Provider,
Receiver
Contacts CalendarDebug
Device Info,
Crash Reporting,
Logging
HAL
Glympse
Business
Logic
Config
Server
Interaction
JSON
Parser
Image
Cache
Contacts
Manager
External
Services
Glympse
REST API
Search,
Directions
Groups
Manager
User
Manager
History
Manager
Battery
Manager
Accounts
Manager
Network
Manager
Location
Manager
Social
Manager
Directions
Manager
Notification
Center
Glympse
Facade
Portable
Code
Glympse © 2016
All Rights Reserved
Object Model
Glympse
User Manager User Ticket
History Manager
Place
Message
Invite
Group Manager
Image
Network Manager
Track
Social Manager
Network Transport Layer,
Device APIs (location, persistence, etc.)
Applications,
Extensions
Battery Manager
Glympse © 2016
All Rights Reserved
Listener
Eventing Model
Sink
IEventSink IEventListener
1 *
Sink interfaces
IGlympse
INetworkManager
ILocationManager
IBatteryManager
IUser
ITicket
IImage
Event properties
- Glympse platform instance
- Listener type
- Events mask
- Parameter object
event
Glympse
User Manager
User
Ticket
Listener
GE::LISTENER_PLATFORM
GE::PLATFORM_USER_ADDED
IUser
GE::LISTENER_USER
GE::USER_ACTIVE_TICKET_CHANGED
IUser
GE::LISTENER_TICKET
GE::TICKET_TRACK_CHANGED
ITicket
2
1
3
Glympse © 2016
All Rights Reserved
Glympse
User Manager
User
Location Manager
Battery Manager
Network Manager
Major Events
Ticket
GE::TICKET_FIRST_VIEWED
GE::TICKET_DURATION_CHANGED
GE::TICKET_MESSAGE_CHANGED
GE::TICKET_DESTINATION_CHANGED
GE::TICKET_TRACK_CHANGED
GE::TICKET_ETA_CHANGED
GE::TICKET_ROUTE_CHANGED
GE::TICKET_DATA_APPENDED
GE::TICKET_DATA_CLEARED
GE::TICKET_EXPIRED
GE::TICKET_COMPLETED
GE::TICKET_INVALID_CODE
GE::LISTENER_TICKET
GE::USER_NICKNAME_CHANGED
GE::USER_ACTIVE_TICKET_RESIGNING
GE::USER_ACTIVE_TICKET_CHANGED
GE::USER_TICKET_ADDED
GE::USER_TICKET_REMOVED
GE::LISTENER_USER
History Manager
Ticket
Image
GE::IMAGE_CHANGED
GE::LISTENER_IMAGE
GE::NETWORK_START_FAILING
GE::NETWORK_RECOVERED
GE::LISTENER_NETWORK
GE::BATTERY_STATE_CHANGED
GE::LISTENER_BATTERY
GE::LOCATION_STATE_CHANGED
GE::LOCATION_REGION_ENTERED
GE::LOCATION_REGION_LEFT
GE::LOCATION_PROFILE_CHANGED
GE::LISTENER_LOCATION
GE::PLATFORM_ACCOUNT_CREATED
GE::PLATFORM_ACCOUNT_CREATE_FAILED
GE::PLATFORM_LOGIN_SUCCEEDED
GE::PLATFORM_LOGIN_FAILED
GE::PLATFORM_SESSION_FAILED
GE::PLATFORM_FIRST_LAUNCH
GE::PLATFORM_STARTED
GE::PLATFORM_STOPPED
GE::PLATFORM_SYNCED_WITH_SERVER
GE::PLATFORM_RATE_LIMITED
GE::PLATFORM_LOCATION
GE::LISTENER_PLATFORM
GE::PLATFORM_USER_ADDED
GE::PLATFORM_USER_REMOVED
GE::PLATFORM_USER_CHANGED
GE::PLATFORM_USER_LIST_REORDERED
GE::PLATFORM_TICKET_ADDED
GE::PLATFORM_TICKET_REMOVED
GE::PLATFORM_TICKET_CHANGED
GE::PLATFORM_TICKET_LIST_REORDERED
GE::PLATFORM_TICKET_ARRIVED
GE::PLATFORM_INVITE_TICKET
GE::PLATFORM_INVITE_REQUEST
GE::TICKET_CREATED
GE::TICKET_DURATION_CHANGED
GE::TICKET_MESSAGE_CHANGED
GE::TICKET_DESTINATION_CHANGED
GE::TICKET_TRACK_CHANGED
GE::TICKET_ETA_CHANGED
GE::TICKET_ROUTE_CHANGED
GE::TICKET_ARRIVED
GE::TICKET_INVITE_CREATED
GE::TICKET_INVITE_SENT
GE::TICKET_INVITE_UPDATED
GE::TICKET_INVITE_REMOVED
GE::TICKET_INVITE_FAILED
GE::TICKET_FAILED
GE::TICKET_EXPIRED
GE::TICKET_COMPLETED
GE::LISTENER_TICKET
Linked Accounts
Manager
GE::ACCOUNT_LINK_SUCCEEDED
GE::ACCOUNT_LINK_FAILED
GE::ACCOUNT_UNLINK_SUCCEEDED
GE::ACCOUNT_UNLINK_FAILED
GE::ACCOUNT_REFRESH_SUCCEEDED
GE::ACCOUNT_REFRESH_FAILED
GE::ACCOUNT_LIST_REFRESH_SUCCEEDED
GE::ACCOUNT_LIST_REFRESH_FAILED
GE::LISTENER_LINKED_ACCOUNTS
Glympse © 2016
All Rights Reserved
Federated Login
Glympse
Server
3rd-party
Service
Glympse
Client API
if ( !glympse.hasUserAccount() )
{
GPrimitive profile = GlympseFactory.
createFacebookAccountProfile(token);
glympse.login(profile);
}
Login using 3rd-party account profile
f / t
Acquire 3rd-party
[oAuth] token
1
Pass token to
Glympse API
2
Create/get user
account associated
with the token
3
Validate the token
and extract user
identifier
4
Respond with status
and requested details
5
Internal account
lookup based on user
ID in 3rd party service
6
Glympse user identity in the
form of Glympse user ID and
long-lived Glympse token
7
Access
token
Glympse © 2016
All Rights Reserved
API Lifecycle
NOT STARTED
STOPPED
ACTIVE NOT ACTIVE
IGlympse::start()
IGlympse::stop()IGlympse::stop()
IGlympse::setActive(false)
IGlympse::setActive(true)
GLYGlympse* glympse = [[GLYGlympse alloc]
initWitServer:@”SERVER BASE URL” andApiKey:@"API KEY"];
[glympse raw]->start();
Instantiate and start Glympse platform
Major platform states
Glympse © 2016
All Rights Reserved
User Profile
GUser user = [glympse raw]->getUserManager()->getSelf();
GString nickname = CoreFactory::createString(“Sylvia”);
UIImage* avatarImage = [UIImage imageNamed:@"sylvia.jpg"];
GDrawable avatar = [GLYGlympse createDrawable:avatarImage];
user->modify(nickname, avatar);
Set user nickname and avatar
Local properties
(persisted on device)
- API configuration
- Incoming tickets
- Public groups
- Social tokens
- Favorites
- Recents
Global properties
(synced with server)
- Account credentials
- Nickname
- Avatar
- Outgoing tickets
Glympse © 2016
All Rights Reserved
Ticket Lifecycle
Sender
Ticket lifetime
Invite 1 lifetime
Invite 2 lifetime
Ticket always expires naturally. No special data is
sent from server to viewers upon expiration.
Create ticket
Create another invite
Create invite
Timeline
1
2
3
Viewer 1
Viewer 2
Ticket duration
Pull updates
Pull updates
Viewer can only access ticket data within a window
bounded by invite creation time and ticket
expiration time (or invite removal time).
Glympse © 2016
All Rights Reserved
Ticket Creation
Ticket
Invite
Glympse
Server
Viewer
Sender
Create ticket1
Upload locations
and data
5
Create invite(s)2
XXX-XXX
Send invite over
email, sms or PUSH
3.1
Send invite over
sms
3.2
Pull updates4
Only one of 3.1 and 3.2 actually takes place.
4 and 5 go in parallel.
Glympse in the Cloud
Glympse © 2016
All Rights Reserved
Send a Ticket
GTicket ticket = GlympseFactory::createTicket(
3600000, CoreFactory::createString("Going home!"), NULL);
1. Create ticket object
GGlympse glympse = ...;
glympse->sendTicket(ticket);
GInvite invite = GlympseFactory::createInvite(
GC::INVITE_TYPE_EMAIL,
CoreFactory::createString(“Sylvia”),
CoreFactory::createString(“sylvia@glympse.com”));
ticket->addInvite(invite);
2. Create and add invite
3. Send a ticket
Glympse © 2016
All Rights Reserved
Supported Services
Facebook
Twitter
Evernote
Social Integration
GPrimitive profile =
GlympseFactory::createFacebookAccountProfile(...);
glympse->getLinkedAccountsManager()->link(
GC::LINKED_ACCOUNT_TYPE_FACEBOOK(), profile);
GInvite invite = GlympseFactory::createInvite(
GC::INVITE_TYPE_FACEBOOK, NULL, NULL);
2. Create ticket invite
1. Link required 3rd-party account (if not yet linked)
ticket->addInvite(invite);
glympse->sendTicket(ticket);
3. Send a ticket
Glympse
Server
Facebook
Graph API
Glympse © 2016
All Rights Reserved
Expire On Arrival
GConfig config = glympse->getConfig();
config->setExpireOnArrival(GC::EXPIRE_ON_ARRIVAL_AUTO);
Modify global XoA preference
Ticket
Proximity Provider
Glympse
Location Manager
History Manager
GE::PLATFORM_TICKET_ARRIVED
GE::LISTENER_PLATFORM
GE::TICKET_ARRIVED
GE::LISTENER_TICKET
5
Proximity event
(region entered)1
Proximity notification
GE::LOCATION_REGION_ENTERED2
Expire ticket. This only happens in GC::
EXPIRE_ON_ARRIVAL_AUTO mode.3
4
Mechanism above is only involved in GC::
EXPIRE_ON_ARRIVAL_AUTOand GC::
EXPIRE_ON_ARRIVAL_PROMPTmodes.
Glympse © 2016
All Rights Reserved
Estimated Time of Arrival
Glympse API
Glympse
Server
Directions
Service
glympse->setEtaMode(GC::ETA_MODE_EXTERNAL);
Enable manual ETA mode (default)
Request ETA and
predicted route n-1
Append new ETA
to the ticketn+1
ticket->updateEta(NEW ETA IN MILLISECONDS);
ticket->updateRoute(NEW ROUTE);
n. Update ETA/route for the ticket
Host Application
Update ETAn
It only makes sense to update ETA every 5 seconds or
less, when user is moving OR each 30 otherwise.
As for the route, the updates should be even less frequent
taking amount of data that needs to be sent into account.
Glympse © 2016
All Rights Reserved
Estimated Time of Arrival
Glympse API
Create ticket with
destination and start
uploading locations
1
Glympse
Server
Directions
Service
glympse->setEtaMode(GC::ETA_MODE_INTERNAL);
Enable automatic ETA mode
Request ETA and
predicted route
n
Append new ETA and
route (optional) to the
ticket
n+1
Ticket destination must be specified for Client APi
to be able to calculate ETA automatically.
Steps n and n+1 are repeated periodically during
ticket lifetime.
Host Application
iOS, Android Activity
Recognition unit
or
Device activity is detected
automatically by the OS
User's activity is
determined by host
application or explicitly
specified by user
Glympse © 2016
All Rights Reserved
Glympse Request Lifecycle
RequesteeRequester
Send ticket6
Create request
- invite
- duration
- end time
- message
- destination
1
3 is potentially done by server. It depends on
request delivery mechanism.
Glympse
Server
Request code
XXX-XXX
2
Send request invite
XXX-XXX
3
Decode invite
XXX-XXX
4
Request details
- invite
- duration
- message
- destination
5
Invite points back to
requester
Glympse © 2016
All Rights Reserved
GInvite requestInvite = GlympseFactory:: createInvite(Glympse::GC::INVITE_TYPE_EMAIL,
Glympse::CoreFactory::createString(“Roger”),
Glympse::CoreFactory::createString(“ roger@glympse.com ”));
requestInvite->setRequestTicket(requestTicket);
GInvite selfInvite = GlympseFactory:: createInvite(Glympse::GC::INVITE_TYPE_EMAIL,
Glympse::CoreFactory::createString(“Sylvia”),
Glympse::CoreFactory::createString(“sylvia @glympse.com ”));
requestTicket-> addInvite(selfInvite);
GTicket requestTicket = Glympse::GlympseFactory:: createTicket(3600000, NULL, NULL);
Request a Ticket
5. Send a request
1. Create ticket to be requested
2. Create invite pointing to requester (self user)
glympse-> requestTicket(ticketContainer);
3. Create invite pointing to requestee
Sylvia
requests a
ticket from
Roger
4. Create a container ticket
GTicket ticketContainer = Glympse::GlympseFactory::createTicket(0, NULL, NULL);
ticketContainer->addInvite(requestInvite);
Glympse © 2016
All Rights Reserved
Anatomy of Glympse Invite
https://glympse.com/XXXX-XXXX
glympse:?XXXX-XXXX
Invite URI
Invite types
- Ticket invite
- Request invite
Client delivery
mechanisms (3)
- SMS (most devices)
- Facebook
- Twitter
- Share (Android devices)
- Clipboard (Android devices)
- Link (custom method)
Server delivery
mechanisms (4)
- Email
- SMS (selective regions)
- Glympse account
- Facebook
- Twitter
- Group
Sender
Glympse
Server
Client side
invite delivery3
Create invite of
specific type1
Invite code and
delivery status2
Receiver
Server side
invite delivery 4
Delivery status update3.1
OR
Glympse server is always responsible for the
generation of invite code, invite URI and even
accompanying message text indifferently from
invite type and delivery mechanism.
Glympse © 2016
All Rights Reserved
IGlympse::decodeInvite(...)
Supported decoding modes:
GC::INVITE_MODE_DEFAULT
GC::INVITE_MODE_PROMPT_BEFORE_VIEWING
1
Handling Invites
See where I am:
https://glympse.com/XXX-XXX
glympse.enableSmsScraping(true);
Enable automatic SMS scraping (Android)
Host Application
Glympse API
Invite delivered over
SMS/Email/Push
or user input
1
Invite scraped from SMS
When invite code is scraped from SMS, Client API behaves
as if IGlympse::decodeInviteis called in
GC::INVITE_MODE_PROMPT_BEFORE_VIEWING mode
IGlympse::decodeInvite(...)
IGlympse::openUrl(...)2
Glympse
Invite Sink
1.1 Returns
GE::INVITE_DECODED
OR
GE::INVITE_INVALID_CODE
GE::LISTENER_INVITE3
GE::PLATFORM_INVITE_TICKET
OR
GE::PLATFORM_INVITE_REQUEST
GE::LISTENER_PLATFORM2
GE::PLATFORM_INVITE_TICKET event is only spread in
GC::INVITE_MODE_PROMPT_BEFORE_VIEWING mode
Glympse © 2016
All Rights Reserved
View a Glympse
The following pattern of listening to object model events
allows to keep track of all standalone incoming tickets
Glympse
User Manager
User
Ticket
GE::TICKET_FIRST_VIEWED
GE::TICKET_DURATION_CHANGED
GE::TICKET_MESSAGE_CHANGED
GE::TICKET_DESTINATION_CHANGED
GE::TICKET_TRACK_CHANGED
GE::TICKET_ETA_CHANGED
GE::TICKET_ROUTE_CHANGED
GE::TICKET_DATA_APPENDED
GE::TICKET_EXPIRED
GE::TICKET_INVALID_CODE
GE::LISTENER_TICKET
GE::USER_ACTIVE_TICKET_CHANGED
GE::USER_TICKET_REMOVED
GE::LISTENER_USER
GE::PLATFORM_USER_ADDED
GE::PLATFORM_USER_REMOVED
GE::LISTENER_PLATFORM
Subscribe on user events
Subscribe on user's active ticket (if any)
Unsubscribe from user events
Unsubscribe from user's active ticket (if any)
Subscribe events from new active ticket
Unsubscribe from ticket events
Handle ticket events in
application specific manner
Glympse © 2016
All Rights Reserved
Custom Ticket Properties
History Manager
Ticket
Glympse
Server
User
Ticket
GE::TICKET_DATA_APPENDED
GE::TICKET_DATA_CLEARED
GE::LISTENER_TICKET
ITicket::appendData(...)
1
2
int32 partnerId = PARTNER ID;
GString name = CoreFactory::createString("mood");
GPrimitive value = CoreFactory::createPrimitive(
CoreFactory::createString("good"));
ticket->appendData(partnerId, name, value);
if ( GE::LISTENER_TICKET == listener )
{
if ( 0 != ( events & GE::TICKET_DATA_APPENDED ) )
{
GDataEvent data = (GDataEvent)object;
for ( GDataRow property :data->getProperties() )
{
GDataRow property = data->getProperties()->at(i);
GString mood = property->getValue()->getString();
}
}
}
1. Appending property to ticket
2. Handling custom properties
Sender
Viewer
GTicket ticket = ...;
int32 partnerId = PARTNER ID;
GString name = CoreFactory::createString("mood");
GPrimitive property = ticket->getProperty(partnerId, name);
GString mood = property->getString();
Glympse © 2016
All Rights Reserved
Public Group Concept
User
Group Manager
Ticket
Group Member
Group
Glympse
History Manager
Ticket
Invite
User Manager
Glympse
Server
Group
!group_name
type: GC::INVITE_TYPE_GROUP
address: !group_name
Follower
Member
GE::LISTENER_GROUPS
GE::GROUPS_GROUP_ADDED
GE::GROUPS_GROUP_REMOVED
GE::GROUP_FIRST_VIEWED
GE::GROUP_ORDER_CHANGED
GE::GROUP_MEMBER_ADDED
GE::GROUP_MEMBER_REMOVED
GE::GROUP_MEMBER_TICKET_RESIGNING
GE::GROUP_MEMBER_TICKET_CHANGED
GE::GROUP_INVALID_CODE
GE::GROUP_FAILED
GE::LISTENER_GROUP
Glympse © 2016
All Rights Reserved
Sending to a Group
GTicket ticket = GlympseFactory::createTicket(
3600000, CoreFactory::createString("Going home!"), NULL);
1. Create ticket object
GGlympse glympse = ...;
glympse->sendTicket(ticket);
GInvite invite = GlympseFactory::createInvite(
GC::INVITE_TYPE_GROUP, NULL,
CoreFactory::createString(“!GROUP_NAME”));
ticket->addInvite(invite);
2. Create and add invite
3. Send a ticket
Glympse © 2016
All Rights Reserved
Following a Group
GGroupManager groupManager = glympse->getGroupManager();
groupManager->viewGroup(
CoreFactory::createString("!GROUP_NAME"));
Start following group via group name (starts with !)
glympse->openUrl(CoreFactory::createString(
"See where we are http://glympse.com/!GROUP_NAME"),
GC::INVITE_MODE_DEFAULT, NULL);
Start following group via message containing group URI
This method helps to avoid message processing and
eventually leads to GGroupManager::viewGroup(...).
GConfig config = glympse->getConfig();
config->setAutoWatchPublicGroup(true);
Enable automatic watching
If this feature is enabled, Glympse API automatically starts
watching a group, when ticket is sent to it.
Glympse © 2016
All Rights Reserved
Location Profiles
It is possible to apply different accuracy requirements to location provider based on
system state. See ILocationManager and ILocationProfile for more details.
Variable Post Rate
Post rates (for different API states) are configurable on per API key basis.
Customizable Location Provider
Glympse API can consume location information from any source (potentially more
battery efficient that standard location API provided by the OS).
Battery Thresholds
Glympse API is capable of shutting down most its activities,
if device battery level falls below specified critical value (see IBatteryManager).
Concurrent Networking
Host application is notified, when Glympse API is about to initiate network activity,
which allows to combine requests and minimize battery drain caused by antenna.
Battery Saving Techniques
Glympse © 2016
All Rights Reserved
Location Profiles
LocationManager
LocationProfile
LocationProvider
Glympse
API
HAL
Host Application
Enable profiles
Internal events trigger
profile switches
Configure profile
properties
Apply profile
Active
Watching
Foreground
Active
Not Watching
Background
Profiles and transitions
Glympse © 2016
All Rights Reserved
Location Profiles Behavior
Sender Timeline
Optimized for battery consumption
Start viewing
... ...
GC::LOCATION_PROFILE_ACTIVE_NOT_WATCHED
Provider: Network (or even none)
Accuracy: 300m
GC::LOCATION_PROFILE_ACTIVE_WATCHED
Provider: Network and GPS
Accuracy: Best
Viewer Timeline
Optimized for quality
Location provider
adjustment overheadCommunication overhead
(including network latency)
Glympse API switches between location profiles
automatically. Host application only needs to specify
actual profile properties.
Glympse © 2016
All Rights Reserved
Location Usage
has
active
tickets?
is in the
foreground?
location
disabled
yes
yes
no
is location
requested
explicitly?
yes no
IGlympse::setActive
ILocationManager::startLocation
ILocationManager::stopLocation
no
Is battery
OK?
noyes
IBatteryManager::setBatteryLevels
start
are
profiles
enabled?
location
enabled
Should
provider be
enabled?
ILocationProfile::getMode
no
yes
CC::LOCATION_MODE_DISABLEDCC::LOCATION_MODE_DEFAULT
Set of rules for determining location
provider state (enabled vs. disabled)
Glympse © 2016
All Rights Reserved
Custom Location Provider
Glympse
Custom
Location
Source
Host Application
Specify custom provider
Default Location
Provider
Location Manager
Custom Location
Provider
Custom location source
featuring high location
quality, low battery
consumption or both
Custom location provider implements ILocationProvider.
Standard
Location
API
GLocationProvider customProvider =new CustomLocationProvider();
GLocationManager locationManager = glympse->getLocationManager();
locationManager->setLocationProvider(customProvider);
Override default location provider
Glympse © 2016
All Rights Reserved
Sibling Tickets
History Manager
Self Active
Tickets
Sibling Active Tickets
Expired
Tickets
Sorting order among expired
tickets is preserved based on
expire time only (ticket
ownership is ignored)
...
...
...
0
1
n
GGlympse glympse = ...;
glympse.allowSiblingTickets(true);
Make sibling tickets visible
History Manager
...
...
...
0
1
n
Self Active
Tickets
Sibling Active
Tickets
Expired
Tickets
Process A
Process B
Glympse © 2016
All Rights Reserved
GoGo Overview
Glympse
API
Location Provider
WiFi Manager
Flight Detector
Ground
Agent
Tickets
1
Glympse in the cloud
Tickets Flight details
(tail number, destination)
2
Plane location for local
(on device) purposes
2.1
[ optional ]
Location updates are
pulled from a partner
4
Platform finds itself
on a plane
Server populates
inherited tickets with
locations
5
Ticket ownership is
passed to the ground
agent
3
Transition happens
transparently
to viewers
Viewing experience
can be customized
with airline branding
Glympse © 2016
All Rights Reserved
GoGo Integration
Glympse
Handoff Manager
Handoff Provider
IHandoffManager
IHandoffProvider
Handoff functionality needs to be enabled for
application API key in order for step 3 to succeed.
https://inflight.glympse.com...
Get user confirmation on
populating location data
without the need to keep
device on.
Is handoff
available?
IHandoffProvider::
isHandoffAvailable()
no yes
IHandoffProfile::allowHandoff()3
GE::LISTENER_HANDOFF
GE::HANDOFF_PROVIDER_AVAILABLE1
2.1 2.2
Travel mode specifies the mode under which track
points are generated:
ITicket::getTravelMode()
GE::TICKET_TRAVEL_MODE_CHANGED
Ticket owner property provides some details on
application currently responsible for appending
location data:
ITicket::getOwner()
GE::TICKET_TRANSFERRED
IGlympse
Accompanying Ticket Properties
Glympse © 2016
All Rights Reserved
Host Application
OBD Location
Location
Plugins
Glympse Platform
OBD Location
Provider
OBD Location
FlightAware
Glympse
Server
Ticket
...
OBD ID
Location flow
Workflow
Legend
Customer
notification
https://glympse.com/YYY-ZZZ
Platform can be configured to use external source of location
data.
Carrier
service
Glympse
Infrastructure
OBD
Infrastructure
Create a ticket and hand it off to
specific OBD ID providing
access credentials
Sender
Application
Glympse © 2016
All Rights Reserved
Advanced Features
Favorites
Provides container for storing the most frequently used Glympses.
Recents (recipients, messages, places)
Collections of the most recently referred items.
All these collections are automatically populated by Client API.
Contacts
Wrapper over standard contacts API providing some convenience helpers.
Calendar
Wrapper over standard calendar API.
Authentication
Provides access to Glympse user account information and ability to
extend/modify standard authentication process.
Glympse © 2016
All Rights Reserved
Debugging & Troubleshooting
Crash Reporting
Debug Logging
API Helpers
Object Model Explorer View a Glympse Tool Web API Explorer
Remote Debugging
Bots Simulator
Glympse © 2016
All Rights Reserved
Infrastructure
Production api.glympse.com
Sandbox sandbox.glympse.com
Partner Properties
API Key (required) - defines partner and is required to instantiate Glympse API
Partner ID (optional) - required to append custom properties to tickets
Brand (optional) - provides additional granularity level under API key
Glympse Configuration
GCM Sender ID (Android) - allows partner applications to be woken up
by Glympse-initiated PUSH messages.
Environment
Glympse © 2016
All Rights Reserved
Partner Configuration
Branded Viewer Experience
Viewer experience can be customized based on either API key or Brand (or both)
Custom Invite Text
With localization support
System Properties
Maximum Glympse duration (default is 4 hours)
Maximum active Glympses per user (default is 100)
Maximum invites per Glympse (default is 100)
Minimum interval between location points (default is 1 location per second)
Adjustable post rate (for all library states)
Glympse © 2016
All Rights Reserved

Más contenido relacionado

Similar a Glympse Client SDK Overview

All about engagement with Universal Analytics @ Google Developer Group NYC Ma...
All about engagement with Universal Analytics @ Google Developer Group NYC Ma...All about engagement with Universal Analytics @ Google Developer Group NYC Ma...
All about engagement with Universal Analytics @ Google Developer Group NYC Ma...Nico Miceli
 
Distributed ID generator in ChatWork
Distributed ID generator in ChatWorkDistributed ID generator in ChatWork
Distributed ID generator in ChatWorkTanUkkii
 
Smit WiFi_2
Smit WiFi_2Smit WiFi_2
Smit WiFi_2mutew
 
Web Authentication API
Web Authentication APIWeb Authentication API
Web Authentication APIFIDO Alliance
 
Optimize Your SaaS Offering with Serverless Microservices (GPSTEC405) - AWS r...
Optimize Your SaaS Offering with Serverless Microservices (GPSTEC405) - AWS r...Optimize Your SaaS Offering with Serverless Microservices (GPSTEC405) - AWS r...
Optimize Your SaaS Offering with Serverless Microservices (GPSTEC405) - AWS r...Amazon Web Services
 
Webinar: Extend The Power of The ForgeRock Identity Platform Through Scripting
Webinar: Extend The Power of The ForgeRock Identity Platform Through ScriptingWebinar: Extend The Power of The ForgeRock Identity Platform Through Scripting
Webinar: Extend The Power of The ForgeRock Identity Platform Through ScriptingForgeRock
 
Client Side Security - Black Hat Amsterdam 2008
Client Side Security - Black Hat Amsterdam 2008Client Side Security - Black Hat Amsterdam 2008
Client Side Security - Black Hat Amsterdam 2008guest642391
 
How to access the Activity Stream in IBM Connections
How to access the Activity Stream in IBM ConnectionsHow to access the Activity Stream in IBM Connections
How to access the Activity Stream in IBM ConnectionsIBM Connections Developers
 
Cracking Into Embedded Devices - HACK.LU 2K8
Cracking Into Embedded Devices - HACK.LU 2K8Cracking Into Embedded Devices - HACK.LU 2K8
Cracking Into Embedded Devices - HACK.LU 2K8guest441c58b71
 
Elasticsearch JSON web token authentication | Search Guard
Elasticsearch JSON web token authentication | Search GuardElasticsearch JSON web token authentication | Search Guard
Elasticsearch JSON web token authentication | Search GuardJochen Kressin
 
The Recent FakeSpy's Activity in Japan
The Recent FakeSpy's Activity in JapanThe Recent FakeSpy's Activity in Japan
The Recent FakeSpy's Activity in JapanAPNIC
 
Consuming GRIN GLOBAL Webservices
Consuming GRIN GLOBAL WebservicesConsuming GRIN GLOBAL Webservices
Consuming GRIN GLOBAL WebservicesEdwin Rojas
 
Android Cloud to Device Messaging Framework at GTUG Stockholm
Android Cloud to Device Messaging Framework at GTUG StockholmAndroid Cloud to Device Messaging Framework at GTUG Stockholm
Android Cloud to Device Messaging Framework at GTUG StockholmJohan Nilsson
 
Building Faster Websites
Building Faster WebsitesBuilding Faster Websites
Building Faster WebsitesMatthew Farina
 
Social Gold In-Flash Payments Webinar
Social Gold In-Flash Payments WebinarSocial Gold In-Flash Payments Webinar
Social Gold In-Flash Payments WebinarSocial Gold
 

Similar a Glympse Client SDK Overview (20)

All about engagement with Universal Analytics @ Google Developer Group NYC Ma...
All about engagement with Universal Analytics @ Google Developer Group NYC Ma...All about engagement with Universal Analytics @ Google Developer Group NYC Ma...
All about engagement with Universal Analytics @ Google Developer Group NYC Ma...
 
Distributed ID generator in ChatWork
Distributed ID generator in ChatWorkDistributed ID generator in ChatWork
Distributed ID generator in ChatWork
 
testupload
testuploadtestupload
testupload
 
Smit WiFi_2
Smit WiFi_2Smit WiFi_2
Smit WiFi_2
 
Web Authentication API
Web Authentication APIWeb Authentication API
Web Authentication API
 
Google tv
Google tv Google tv
Google tv
 
Optimize Your SaaS Offering with Serverless Microservices (GPSTEC405) - AWS r...
Optimize Your SaaS Offering with Serverless Microservices (GPSTEC405) - AWS r...Optimize Your SaaS Offering with Serverless Microservices (GPSTEC405) - AWS r...
Optimize Your SaaS Offering with Serverless Microservices (GPSTEC405) - AWS r...
 
Webinar: Extend The Power of The ForgeRock Identity Platform Through Scripting
Webinar: Extend The Power of The ForgeRock Identity Platform Through ScriptingWebinar: Extend The Power of The ForgeRock Identity Platform Through Scripting
Webinar: Extend The Power of The ForgeRock Identity Platform Through Scripting
 
Client Side Security - Black Hat Amsterdam 2008
Client Side Security - Black Hat Amsterdam 2008Client Side Security - Black Hat Amsterdam 2008
Client Side Security - Black Hat Amsterdam 2008
 
How to access the Activity Stream in IBM Connections
How to access the Activity Stream in IBM ConnectionsHow to access the Activity Stream in IBM Connections
How to access the Activity Stream in IBM Connections
 
Cracking Into Embedded Devices - HACK.LU 2K8
Cracking Into Embedded Devices - HACK.LU 2K8Cracking Into Embedded Devices - HACK.LU 2K8
Cracking Into Embedded Devices - HACK.LU 2K8
 
Alexander Lukin, Yandex
Alexander Lukin, YandexAlexander Lukin, Yandex
Alexander Lukin, Yandex
 
Elasticsearch JSON web token authentication | Search Guard
Elasticsearch JSON web token authentication | Search GuardElasticsearch JSON web token authentication | Search Guard
Elasticsearch JSON web token authentication | Search Guard
 
The Recent FakeSpy's Activity in Japan
The Recent FakeSpy's Activity in JapanThe Recent FakeSpy's Activity in Japan
The Recent FakeSpy's Activity in Japan
 
Eventsggx
EventsggxEventsggx
Eventsggx
 
Consuming GRIN GLOBAL Webservices
Consuming GRIN GLOBAL WebservicesConsuming GRIN GLOBAL Webservices
Consuming GRIN GLOBAL Webservices
 
Android Cloud to Device Messaging Framework at GTUG Stockholm
Android Cloud to Device Messaging Framework at GTUG StockholmAndroid Cloud to Device Messaging Framework at GTUG Stockholm
Android Cloud to Device Messaging Framework at GTUG Stockholm
 
Saga pattern
Saga patternSaga pattern
Saga pattern
 
Building Faster Websites
Building Faster WebsitesBuilding Faster Websites
Building Faster Websites
 
Social Gold In-Flash Payments Webinar
Social Gold In-Flash Payments WebinarSocial Gold In-Flash Payments Webinar
Social Gold In-Flash Payments Webinar
 

Último

So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...panagenda
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 

Último (20)

So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 

Glympse Client SDK Overview

  • 1. Client API Technology Behind Glympse-enabled Applications Copyright (c) 2016 Glympse, Inc. All Rights Reserved. Patents Pending Egor Pushkin egor@glympse.com Chief Architect Glympse, Inc.
  • 4. Terminology Client API / API / Library / Platform class library encapsulating Glympse related functionality Client Application / Host Application / Application 3rd party Glympse-enabled application Device / Phone any device supported by Glympse API Glympse Services / REST API / Server Glympse cloud services Glympse / Ticket A location sharing activity on the system… Glympse © 2016 All Rights Reserved
  • 5. Send a Glympse View a Glympse Glympse Request Glympse Groups "!" Fundamental Features Glympse Glympse Request Glympse !Group Sender Viewer Requester Viewer Sender Requestee Group Members Group Followers G lym pse Glympse Glympse Glympse © 2016 All Rights Reserved
  • 6. API Highlights Extreme Level of Portability Common code base is shared across C++/Java/C# Supported Mobile Platforms Android, iOS, BlackBerry 10, Windows Phone 8 Common Public Interface and Documentation Public interfaces of all exposed objects are identical across all platforms Programming paradigms and patterns are identical across all platforms Component-oriented Architecture API functionality is splitted into independent components, which makes it extremely easy to extend and maintain library feature set Highly Customizable Most aspects of library behavior are configurable both locally and globally Glympse © 2016 All Rights Reserved
  • 7. High-Level View Glympse API Public Interface Concurrency Mutex, Semaphore, Thread, Event Thread, Timer, Handler Core Strings, Containers Images NetworkingStorage Files, Cache, Keychain GPS Location, Proximity Battery Messaging Provider, Receiver Contacts CalendarDebug Device Info, Crash Reporting, Logging HAL Glympse Business Logic Config Server Interaction JSON Parser Image Cache Contacts Manager External Services Glympse REST API Search, Directions Groups Manager User Manager History Manager Battery Manager Accounts Manager Network Manager Location Manager Social Manager Directions Manager Notification Center Glympse Facade Portable Code Glympse © 2016 All Rights Reserved
  • 8. Object Model Glympse User Manager User Ticket History Manager Place Message Invite Group Manager Image Network Manager Track Social Manager Network Transport Layer, Device APIs (location, persistence, etc.) Applications, Extensions Battery Manager Glympse © 2016 All Rights Reserved
  • 9. Listener Eventing Model Sink IEventSink IEventListener 1 * Sink interfaces IGlympse INetworkManager ILocationManager IBatteryManager IUser ITicket IImage Event properties - Glympse platform instance - Listener type - Events mask - Parameter object event Glympse User Manager User Ticket Listener GE::LISTENER_PLATFORM GE::PLATFORM_USER_ADDED IUser GE::LISTENER_USER GE::USER_ACTIVE_TICKET_CHANGED IUser GE::LISTENER_TICKET GE::TICKET_TRACK_CHANGED ITicket 2 1 3 Glympse © 2016 All Rights Reserved
  • 10. Glympse User Manager User Location Manager Battery Manager Network Manager Major Events Ticket GE::TICKET_FIRST_VIEWED GE::TICKET_DURATION_CHANGED GE::TICKET_MESSAGE_CHANGED GE::TICKET_DESTINATION_CHANGED GE::TICKET_TRACK_CHANGED GE::TICKET_ETA_CHANGED GE::TICKET_ROUTE_CHANGED GE::TICKET_DATA_APPENDED GE::TICKET_DATA_CLEARED GE::TICKET_EXPIRED GE::TICKET_COMPLETED GE::TICKET_INVALID_CODE GE::LISTENER_TICKET GE::USER_NICKNAME_CHANGED GE::USER_ACTIVE_TICKET_RESIGNING GE::USER_ACTIVE_TICKET_CHANGED GE::USER_TICKET_ADDED GE::USER_TICKET_REMOVED GE::LISTENER_USER History Manager Ticket Image GE::IMAGE_CHANGED GE::LISTENER_IMAGE GE::NETWORK_START_FAILING GE::NETWORK_RECOVERED GE::LISTENER_NETWORK GE::BATTERY_STATE_CHANGED GE::LISTENER_BATTERY GE::LOCATION_STATE_CHANGED GE::LOCATION_REGION_ENTERED GE::LOCATION_REGION_LEFT GE::LOCATION_PROFILE_CHANGED GE::LISTENER_LOCATION GE::PLATFORM_ACCOUNT_CREATED GE::PLATFORM_ACCOUNT_CREATE_FAILED GE::PLATFORM_LOGIN_SUCCEEDED GE::PLATFORM_LOGIN_FAILED GE::PLATFORM_SESSION_FAILED GE::PLATFORM_FIRST_LAUNCH GE::PLATFORM_STARTED GE::PLATFORM_STOPPED GE::PLATFORM_SYNCED_WITH_SERVER GE::PLATFORM_RATE_LIMITED GE::PLATFORM_LOCATION GE::LISTENER_PLATFORM GE::PLATFORM_USER_ADDED GE::PLATFORM_USER_REMOVED GE::PLATFORM_USER_CHANGED GE::PLATFORM_USER_LIST_REORDERED GE::PLATFORM_TICKET_ADDED GE::PLATFORM_TICKET_REMOVED GE::PLATFORM_TICKET_CHANGED GE::PLATFORM_TICKET_LIST_REORDERED GE::PLATFORM_TICKET_ARRIVED GE::PLATFORM_INVITE_TICKET GE::PLATFORM_INVITE_REQUEST GE::TICKET_CREATED GE::TICKET_DURATION_CHANGED GE::TICKET_MESSAGE_CHANGED GE::TICKET_DESTINATION_CHANGED GE::TICKET_TRACK_CHANGED GE::TICKET_ETA_CHANGED GE::TICKET_ROUTE_CHANGED GE::TICKET_ARRIVED GE::TICKET_INVITE_CREATED GE::TICKET_INVITE_SENT GE::TICKET_INVITE_UPDATED GE::TICKET_INVITE_REMOVED GE::TICKET_INVITE_FAILED GE::TICKET_FAILED GE::TICKET_EXPIRED GE::TICKET_COMPLETED GE::LISTENER_TICKET Linked Accounts Manager GE::ACCOUNT_LINK_SUCCEEDED GE::ACCOUNT_LINK_FAILED GE::ACCOUNT_UNLINK_SUCCEEDED GE::ACCOUNT_UNLINK_FAILED GE::ACCOUNT_REFRESH_SUCCEEDED GE::ACCOUNT_REFRESH_FAILED GE::ACCOUNT_LIST_REFRESH_SUCCEEDED GE::ACCOUNT_LIST_REFRESH_FAILED GE::LISTENER_LINKED_ACCOUNTS Glympse © 2016 All Rights Reserved
  • 11. Federated Login Glympse Server 3rd-party Service Glympse Client API if ( !glympse.hasUserAccount() ) { GPrimitive profile = GlympseFactory. createFacebookAccountProfile(token); glympse.login(profile); } Login using 3rd-party account profile f / t Acquire 3rd-party [oAuth] token 1 Pass token to Glympse API 2 Create/get user account associated with the token 3 Validate the token and extract user identifier 4 Respond with status and requested details 5 Internal account lookup based on user ID in 3rd party service 6 Glympse user identity in the form of Glympse user ID and long-lived Glympse token 7 Access token Glympse © 2016 All Rights Reserved
  • 12. API Lifecycle NOT STARTED STOPPED ACTIVE NOT ACTIVE IGlympse::start() IGlympse::stop()IGlympse::stop() IGlympse::setActive(false) IGlympse::setActive(true) GLYGlympse* glympse = [[GLYGlympse alloc] initWitServer:@”SERVER BASE URL” andApiKey:@"API KEY"]; [glympse raw]->start(); Instantiate and start Glympse platform Major platform states Glympse © 2016 All Rights Reserved
  • 13. User Profile GUser user = [glympse raw]->getUserManager()->getSelf(); GString nickname = CoreFactory::createString(“Sylvia”); UIImage* avatarImage = [UIImage imageNamed:@"sylvia.jpg"]; GDrawable avatar = [GLYGlympse createDrawable:avatarImage]; user->modify(nickname, avatar); Set user nickname and avatar Local properties (persisted on device) - API configuration - Incoming tickets - Public groups - Social tokens - Favorites - Recents Global properties (synced with server) - Account credentials - Nickname - Avatar - Outgoing tickets Glympse © 2016 All Rights Reserved
  • 14. Ticket Lifecycle Sender Ticket lifetime Invite 1 lifetime Invite 2 lifetime Ticket always expires naturally. No special data is sent from server to viewers upon expiration. Create ticket Create another invite Create invite Timeline 1 2 3 Viewer 1 Viewer 2 Ticket duration Pull updates Pull updates Viewer can only access ticket data within a window bounded by invite creation time and ticket expiration time (or invite removal time). Glympse © 2016 All Rights Reserved
  • 15. Ticket Creation Ticket Invite Glympse Server Viewer Sender Create ticket1 Upload locations and data 5 Create invite(s)2 XXX-XXX Send invite over email, sms or PUSH 3.1 Send invite over sms 3.2 Pull updates4 Only one of 3.1 and 3.2 actually takes place. 4 and 5 go in parallel. Glympse in the Cloud Glympse © 2016 All Rights Reserved
  • 16. Send a Ticket GTicket ticket = GlympseFactory::createTicket( 3600000, CoreFactory::createString("Going home!"), NULL); 1. Create ticket object GGlympse glympse = ...; glympse->sendTicket(ticket); GInvite invite = GlympseFactory::createInvite( GC::INVITE_TYPE_EMAIL, CoreFactory::createString(“Sylvia”), CoreFactory::createString(“sylvia@glympse.com”)); ticket->addInvite(invite); 2. Create and add invite 3. Send a ticket Glympse © 2016 All Rights Reserved
  • 17. Supported Services Facebook Twitter Evernote Social Integration GPrimitive profile = GlympseFactory::createFacebookAccountProfile(...); glympse->getLinkedAccountsManager()->link( GC::LINKED_ACCOUNT_TYPE_FACEBOOK(), profile); GInvite invite = GlympseFactory::createInvite( GC::INVITE_TYPE_FACEBOOK, NULL, NULL); 2. Create ticket invite 1. Link required 3rd-party account (if not yet linked) ticket->addInvite(invite); glympse->sendTicket(ticket); 3. Send a ticket Glympse Server Facebook Graph API Glympse © 2016 All Rights Reserved
  • 18. Expire On Arrival GConfig config = glympse->getConfig(); config->setExpireOnArrival(GC::EXPIRE_ON_ARRIVAL_AUTO); Modify global XoA preference Ticket Proximity Provider Glympse Location Manager History Manager GE::PLATFORM_TICKET_ARRIVED GE::LISTENER_PLATFORM GE::TICKET_ARRIVED GE::LISTENER_TICKET 5 Proximity event (region entered)1 Proximity notification GE::LOCATION_REGION_ENTERED2 Expire ticket. This only happens in GC:: EXPIRE_ON_ARRIVAL_AUTO mode.3 4 Mechanism above is only involved in GC:: EXPIRE_ON_ARRIVAL_AUTOand GC:: EXPIRE_ON_ARRIVAL_PROMPTmodes. Glympse © 2016 All Rights Reserved
  • 19. Estimated Time of Arrival Glympse API Glympse Server Directions Service glympse->setEtaMode(GC::ETA_MODE_EXTERNAL); Enable manual ETA mode (default) Request ETA and predicted route n-1 Append new ETA to the ticketn+1 ticket->updateEta(NEW ETA IN MILLISECONDS); ticket->updateRoute(NEW ROUTE); n. Update ETA/route for the ticket Host Application Update ETAn It only makes sense to update ETA every 5 seconds or less, when user is moving OR each 30 otherwise. As for the route, the updates should be even less frequent taking amount of data that needs to be sent into account. Glympse © 2016 All Rights Reserved
  • 20. Estimated Time of Arrival Glympse API Create ticket with destination and start uploading locations 1 Glympse Server Directions Service glympse->setEtaMode(GC::ETA_MODE_INTERNAL); Enable automatic ETA mode Request ETA and predicted route n Append new ETA and route (optional) to the ticket n+1 Ticket destination must be specified for Client APi to be able to calculate ETA automatically. Steps n and n+1 are repeated periodically during ticket lifetime. Host Application iOS, Android Activity Recognition unit or Device activity is detected automatically by the OS User's activity is determined by host application or explicitly specified by user Glympse © 2016 All Rights Reserved
  • 21. Glympse Request Lifecycle RequesteeRequester Send ticket6 Create request - invite - duration - end time - message - destination 1 3 is potentially done by server. It depends on request delivery mechanism. Glympse Server Request code XXX-XXX 2 Send request invite XXX-XXX 3 Decode invite XXX-XXX 4 Request details - invite - duration - message - destination 5 Invite points back to requester Glympse © 2016 All Rights Reserved
  • 22. GInvite requestInvite = GlympseFactory:: createInvite(Glympse::GC::INVITE_TYPE_EMAIL, Glympse::CoreFactory::createString(“Roger”), Glympse::CoreFactory::createString(“ roger@glympse.com ”)); requestInvite->setRequestTicket(requestTicket); GInvite selfInvite = GlympseFactory:: createInvite(Glympse::GC::INVITE_TYPE_EMAIL, Glympse::CoreFactory::createString(“Sylvia”), Glympse::CoreFactory::createString(“sylvia @glympse.com ”)); requestTicket-> addInvite(selfInvite); GTicket requestTicket = Glympse::GlympseFactory:: createTicket(3600000, NULL, NULL); Request a Ticket 5. Send a request 1. Create ticket to be requested 2. Create invite pointing to requester (self user) glympse-> requestTicket(ticketContainer); 3. Create invite pointing to requestee Sylvia requests a ticket from Roger 4. Create a container ticket GTicket ticketContainer = Glympse::GlympseFactory::createTicket(0, NULL, NULL); ticketContainer->addInvite(requestInvite); Glympse © 2016 All Rights Reserved
  • 23. Anatomy of Glympse Invite https://glympse.com/XXXX-XXXX glympse:?XXXX-XXXX Invite URI Invite types - Ticket invite - Request invite Client delivery mechanisms (3) - SMS (most devices) - Facebook - Twitter - Share (Android devices) - Clipboard (Android devices) - Link (custom method) Server delivery mechanisms (4) - Email - SMS (selective regions) - Glympse account - Facebook - Twitter - Group Sender Glympse Server Client side invite delivery3 Create invite of specific type1 Invite code and delivery status2 Receiver Server side invite delivery 4 Delivery status update3.1 OR Glympse server is always responsible for the generation of invite code, invite URI and even accompanying message text indifferently from invite type and delivery mechanism. Glympse © 2016 All Rights Reserved
  • 24. IGlympse::decodeInvite(...) Supported decoding modes: GC::INVITE_MODE_DEFAULT GC::INVITE_MODE_PROMPT_BEFORE_VIEWING 1 Handling Invites See where I am: https://glympse.com/XXX-XXX glympse.enableSmsScraping(true); Enable automatic SMS scraping (Android) Host Application Glympse API Invite delivered over SMS/Email/Push or user input 1 Invite scraped from SMS When invite code is scraped from SMS, Client API behaves as if IGlympse::decodeInviteis called in GC::INVITE_MODE_PROMPT_BEFORE_VIEWING mode IGlympse::decodeInvite(...) IGlympse::openUrl(...)2 Glympse Invite Sink 1.1 Returns GE::INVITE_DECODED OR GE::INVITE_INVALID_CODE GE::LISTENER_INVITE3 GE::PLATFORM_INVITE_TICKET OR GE::PLATFORM_INVITE_REQUEST GE::LISTENER_PLATFORM2 GE::PLATFORM_INVITE_TICKET event is only spread in GC::INVITE_MODE_PROMPT_BEFORE_VIEWING mode Glympse © 2016 All Rights Reserved
  • 25. View a Glympse The following pattern of listening to object model events allows to keep track of all standalone incoming tickets Glympse User Manager User Ticket GE::TICKET_FIRST_VIEWED GE::TICKET_DURATION_CHANGED GE::TICKET_MESSAGE_CHANGED GE::TICKET_DESTINATION_CHANGED GE::TICKET_TRACK_CHANGED GE::TICKET_ETA_CHANGED GE::TICKET_ROUTE_CHANGED GE::TICKET_DATA_APPENDED GE::TICKET_EXPIRED GE::TICKET_INVALID_CODE GE::LISTENER_TICKET GE::USER_ACTIVE_TICKET_CHANGED GE::USER_TICKET_REMOVED GE::LISTENER_USER GE::PLATFORM_USER_ADDED GE::PLATFORM_USER_REMOVED GE::LISTENER_PLATFORM Subscribe on user events Subscribe on user's active ticket (if any) Unsubscribe from user events Unsubscribe from user's active ticket (if any) Subscribe events from new active ticket Unsubscribe from ticket events Handle ticket events in application specific manner Glympse © 2016 All Rights Reserved
  • 26. Custom Ticket Properties History Manager Ticket Glympse Server User Ticket GE::TICKET_DATA_APPENDED GE::TICKET_DATA_CLEARED GE::LISTENER_TICKET ITicket::appendData(...) 1 2 int32 partnerId = PARTNER ID; GString name = CoreFactory::createString("mood"); GPrimitive value = CoreFactory::createPrimitive( CoreFactory::createString("good")); ticket->appendData(partnerId, name, value); if ( GE::LISTENER_TICKET == listener ) { if ( 0 != ( events & GE::TICKET_DATA_APPENDED ) ) { GDataEvent data = (GDataEvent)object; for ( GDataRow property :data->getProperties() ) { GDataRow property = data->getProperties()->at(i); GString mood = property->getValue()->getString(); } } } 1. Appending property to ticket 2. Handling custom properties Sender Viewer GTicket ticket = ...; int32 partnerId = PARTNER ID; GString name = CoreFactory::createString("mood"); GPrimitive property = ticket->getProperty(partnerId, name); GString mood = property->getString(); Glympse © 2016 All Rights Reserved
  • 27. Public Group Concept User Group Manager Ticket Group Member Group Glympse History Manager Ticket Invite User Manager Glympse Server Group !group_name type: GC::INVITE_TYPE_GROUP address: !group_name Follower Member GE::LISTENER_GROUPS GE::GROUPS_GROUP_ADDED GE::GROUPS_GROUP_REMOVED GE::GROUP_FIRST_VIEWED GE::GROUP_ORDER_CHANGED GE::GROUP_MEMBER_ADDED GE::GROUP_MEMBER_REMOVED GE::GROUP_MEMBER_TICKET_RESIGNING GE::GROUP_MEMBER_TICKET_CHANGED GE::GROUP_INVALID_CODE GE::GROUP_FAILED GE::LISTENER_GROUP Glympse © 2016 All Rights Reserved
  • 28. Sending to a Group GTicket ticket = GlympseFactory::createTicket( 3600000, CoreFactory::createString("Going home!"), NULL); 1. Create ticket object GGlympse glympse = ...; glympse->sendTicket(ticket); GInvite invite = GlympseFactory::createInvite( GC::INVITE_TYPE_GROUP, NULL, CoreFactory::createString(“!GROUP_NAME”)); ticket->addInvite(invite); 2. Create and add invite 3. Send a ticket Glympse © 2016 All Rights Reserved
  • 29. Following a Group GGroupManager groupManager = glympse->getGroupManager(); groupManager->viewGroup( CoreFactory::createString("!GROUP_NAME")); Start following group via group name (starts with !) glympse->openUrl(CoreFactory::createString( "See where we are http://glympse.com/!GROUP_NAME"), GC::INVITE_MODE_DEFAULT, NULL); Start following group via message containing group URI This method helps to avoid message processing and eventually leads to GGroupManager::viewGroup(...). GConfig config = glympse->getConfig(); config->setAutoWatchPublicGroup(true); Enable automatic watching If this feature is enabled, Glympse API automatically starts watching a group, when ticket is sent to it. Glympse © 2016 All Rights Reserved
  • 30. Location Profiles It is possible to apply different accuracy requirements to location provider based on system state. See ILocationManager and ILocationProfile for more details. Variable Post Rate Post rates (for different API states) are configurable on per API key basis. Customizable Location Provider Glympse API can consume location information from any source (potentially more battery efficient that standard location API provided by the OS). Battery Thresholds Glympse API is capable of shutting down most its activities, if device battery level falls below specified critical value (see IBatteryManager). Concurrent Networking Host application is notified, when Glympse API is about to initiate network activity, which allows to combine requests and minimize battery drain caused by antenna. Battery Saving Techniques Glympse © 2016 All Rights Reserved
  • 31. Location Profiles LocationManager LocationProfile LocationProvider Glympse API HAL Host Application Enable profiles Internal events trigger profile switches Configure profile properties Apply profile Active Watching Foreground Active Not Watching Background Profiles and transitions Glympse © 2016 All Rights Reserved
  • 32. Location Profiles Behavior Sender Timeline Optimized for battery consumption Start viewing ... ... GC::LOCATION_PROFILE_ACTIVE_NOT_WATCHED Provider: Network (or even none) Accuracy: 300m GC::LOCATION_PROFILE_ACTIVE_WATCHED Provider: Network and GPS Accuracy: Best Viewer Timeline Optimized for quality Location provider adjustment overheadCommunication overhead (including network latency) Glympse API switches between location profiles automatically. Host application only needs to specify actual profile properties. Glympse © 2016 All Rights Reserved
  • 33. Location Usage has active tickets? is in the foreground? location disabled yes yes no is location requested explicitly? yes no IGlympse::setActive ILocationManager::startLocation ILocationManager::stopLocation no Is battery OK? noyes IBatteryManager::setBatteryLevels start are profiles enabled? location enabled Should provider be enabled? ILocationProfile::getMode no yes CC::LOCATION_MODE_DISABLEDCC::LOCATION_MODE_DEFAULT Set of rules for determining location provider state (enabled vs. disabled) Glympse © 2016 All Rights Reserved
  • 34. Custom Location Provider Glympse Custom Location Source Host Application Specify custom provider Default Location Provider Location Manager Custom Location Provider Custom location source featuring high location quality, low battery consumption or both Custom location provider implements ILocationProvider. Standard Location API GLocationProvider customProvider =new CustomLocationProvider(); GLocationManager locationManager = glympse->getLocationManager(); locationManager->setLocationProvider(customProvider); Override default location provider Glympse © 2016 All Rights Reserved
  • 35. Sibling Tickets History Manager Self Active Tickets Sibling Active Tickets Expired Tickets Sorting order among expired tickets is preserved based on expire time only (ticket ownership is ignored) ... ... ... 0 1 n GGlympse glympse = ...; glympse.allowSiblingTickets(true); Make sibling tickets visible History Manager ... ... ... 0 1 n Self Active Tickets Sibling Active Tickets Expired Tickets Process A Process B Glympse © 2016 All Rights Reserved
  • 36. GoGo Overview Glympse API Location Provider WiFi Manager Flight Detector Ground Agent Tickets 1 Glympse in the cloud Tickets Flight details (tail number, destination) 2 Plane location for local (on device) purposes 2.1 [ optional ] Location updates are pulled from a partner 4 Platform finds itself on a plane Server populates inherited tickets with locations 5 Ticket ownership is passed to the ground agent 3 Transition happens transparently to viewers Viewing experience can be customized with airline branding Glympse © 2016 All Rights Reserved
  • 37. GoGo Integration Glympse Handoff Manager Handoff Provider IHandoffManager IHandoffProvider Handoff functionality needs to be enabled for application API key in order for step 3 to succeed. https://inflight.glympse.com... Get user confirmation on populating location data without the need to keep device on. Is handoff available? IHandoffProvider:: isHandoffAvailable() no yes IHandoffProfile::allowHandoff()3 GE::LISTENER_HANDOFF GE::HANDOFF_PROVIDER_AVAILABLE1 2.1 2.2 Travel mode specifies the mode under which track points are generated: ITicket::getTravelMode() GE::TICKET_TRAVEL_MODE_CHANGED Ticket owner property provides some details on application currently responsible for appending location data: ITicket::getOwner() GE::TICKET_TRANSFERRED IGlympse Accompanying Ticket Properties Glympse © 2016 All Rights Reserved
  • 38. Host Application OBD Location Location Plugins Glympse Platform OBD Location Provider OBD Location FlightAware Glympse Server Ticket ... OBD ID Location flow Workflow Legend Customer notification https://glympse.com/YYY-ZZZ Platform can be configured to use external source of location data. Carrier service Glympse Infrastructure OBD Infrastructure Create a ticket and hand it off to specific OBD ID providing access credentials Sender Application Glympse © 2016 All Rights Reserved
  • 39. Advanced Features Favorites Provides container for storing the most frequently used Glympses. Recents (recipients, messages, places) Collections of the most recently referred items. All these collections are automatically populated by Client API. Contacts Wrapper over standard contacts API providing some convenience helpers. Calendar Wrapper over standard calendar API. Authentication Provides access to Glympse user account information and ability to extend/modify standard authentication process. Glympse © 2016 All Rights Reserved
  • 40. Debugging & Troubleshooting Crash Reporting Debug Logging API Helpers Object Model Explorer View a Glympse Tool Web API Explorer Remote Debugging Bots Simulator Glympse © 2016 All Rights Reserved
  • 41. Infrastructure Production api.glympse.com Sandbox sandbox.glympse.com Partner Properties API Key (required) - defines partner and is required to instantiate Glympse API Partner ID (optional) - required to append custom properties to tickets Brand (optional) - provides additional granularity level under API key Glympse Configuration GCM Sender ID (Android) - allows partner applications to be woken up by Glympse-initiated PUSH messages. Environment Glympse © 2016 All Rights Reserved
  • 42. Partner Configuration Branded Viewer Experience Viewer experience can be customized based on either API key or Brand (or both) Custom Invite Text With localization support System Properties Maximum Glympse duration (default is 4 hours) Maximum active Glympses per user (default is 100) Maximum invites per Glympse (default is 100) Minimum interval between location points (default is 1 location per second) Adjustable post rate (for all library states) Glympse © 2016 All Rights Reserved