SlideShare a Scribd company logo
1 of 32
Download to read offline
Building Push Applications
for Android
Debajit Ghosh
May 20, 2010
View live notes and ask questions
about this session on Google Wave
http://bit.ly/ac2dmwave
Outline

•  Accessing Data in the Cloud
•  Polling and Pushing
•  Android Cloud to Device Messaging
•  Demos
•  Summary




4
Accessing Data in the Cloud

•  Apps provide seamless access to data in the cloud
    –  Mobile Alerts
    –  Send to Phone
    –  Background Sync
•  Challenge: How do you keep data on a device fresh?




5
Polling

•  Simple to implement
•  Device periodically asks server for new data
    –  Radio draws a lot of power, stays on for several seconds
    –  Ideally, use If-Modified-Since, If-None-Match, etc.
        •  Make no-ops as cheap as possible
•  Appropriate for content that changes constantly
    –  Stock Quotes, News Headlines
    –  Poll infrequently, update on demand




6
Impact of Polling on Battery


                                             •  Baseline: ~5-8 mA
                                             •  Network: ~180-200 mA
                                                –  Tx more expensive than Rx
                                             •  Radio stays on for few secs
                                             •  ~0.50 mAh for a short poll
                                                –  5m frequency: ~144 mAh / day
                                                –  15m frequency: ~48 mAh / day




Source: Android development team at Google


7
When to Poll?

•  Tradeoff between freshness and efficiency
    –  Poll frequently – more fresh, less efficient
•  Desire: Push, don’t poll
    –  Only fetch data when useful




8
Pushing

•  Enables freshness with less impact on battery
    –  Only use network when necessary
    –  Constant overhead of persistent connection
•  Google Contacts, Calendar, Gmail, etc., use push sync
•  Can be tricky to implement
•  Android Cloud to Device Messaging makes push easy




9
Android Cloud to Device Messaging

•  Simple Google API
     –  Android 2.2 devices with Market
     –  Will be open to all developers
•  Uses existing connection for Google services
•  Allows servers to send lightweight “data” messages to apps
     –  Tell app new data available
     –  Intent broadcast wakes up app
     –  App supplies UI, e.g., Notification, if/as necessary
•  Best effort delivery



10
Peeking Under the Hood

•  Background service
     –  Honor background data setting
     –  Start when network available
•  Maintain connection with server
     –  Use heartbeats to keep alive, detect dead connections
•  Efficient
     –  Minimize per connect overhead
     –  Minimize heartbeat frequency
     –  Minimize concurrent connections




11
Heartbeats




                               X
                               ✓
                                 PING


                                 ACK
                                                       SERVER




      •  Use Alarms                     •  Can also initiate ping
         •  (Re)schedule pings              •  May be half open
         •  Wait for acks               •  Clean up state when dead
      •  Reconnect when dead

12
Overview of Lifecycle

•  Enabling cloud to device messaging
     –  App (on device) registers with Google, gets registration ID
     –  App sends registration ID to its App Server
•  Per message
     –  App Server sends (authenticated) message to Google
     –  Google sends message to device
•  Disabling cloud to device messaging
     –  App can unregister ID, e.g., when user no longer wants push




13
Life of a Message

                     CONN
                    SERVER

      WAKE
      UP!           GOOGLE
       APP
                     C2D MSG
                    FRONTEND




                     APP
                    SERVER




14
Registration – Requesting a Registration ID

// Use the Intent API to get a registration ID
// Registration ID is compartmentalized per app/device
Intent regIntent = new
  Intent(“com.google.android.c2dm.intent.REGISTER”);
// Identify your app
regIntent.putExtra(“app”,
     PendingIntent.getBroadcast(this, 0, new Intent(), 0);
// Identify role account server will use to send
regIntent.putExtra(“sender”, emailOfSender);
// Start the registration process
startService(regIntent);




15
Registration – Receiving the Registration ID

•  App receives the ID as an Intent
     –  com.google.android.c2dm.intent.REGISTRATION
•  App should send this ID to its server
•  Service may issue new registration ID at any time
     –  App will receive REGISTRATION Intent broadcast
     –  App must update server with new ID




16
Registration – Receiving the Registration ID

// Registration ID received via an Intent
public void onReceive(Context context, Intent intent) {
     String action = intent.getAction();
     if (“…REGISTRATION”.equals(action)) {
       handleRegistration(context, intent);
     } }


private void handleRegistration(Context context, Intent intent){
     String id = intent.getExtra(“registration_id”);
     if ((intent.getExtra(“error”) != null) {
       // Registration failed.   Try again later, with backoff.
     } else if (id != null) {
       // Send the registration ID to the app’s server.
       // Be sure to do this in a separate thread.
     } }
17
Sending Messages

•  Get “ac2dm” auth token, install on server
     –  http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html
•  Send authenticated POST
     –  https://android.apis.google.com/c2dm/send
     –  Authorization: GoogleLogin auth=<auth token>
     –  URL Encoded parameters
         •  registration_id
         •  collapse_key
         •  (optional) delay_while_idle
         •  (optional) data.<key>*




18
Sending Messages – Response Codes

•  200 OK
     –  With “id” – request succeeded, message enqueued
     –  With “Error” – request failed
         •  QuotaExceeded, DeviceQuotaExceeded: Retry after a while
         •  InvalidRegistration, NotRegistered: Stop sending messages
         •  MessageTooBig: Reduce size of message
         •  MissingCollapseKey: Include collapse key in request
•  401 Not Authorized: Get new auth token
•  503 Service Unavailable: Retry with backoff




19
Receiving Messages

•  Device receives message, converts to Intent
•  App woken up/started by Intent broadcast
     –  com.google.android.c2dm.intent.RECEIVE
     –  data.<key>* set as Intent extras
     –  App needs com.example.app.permission.C2D_MESSAGE


public void onReceive(Context context, Intent intent) {
     String action = intent.getAction();
     if (“…RECEIVE”.equals(action)) {
         // Grab a wakelock, use IntentService to do work
     }
}


20
Collapse Keys

•  Latest message replaces older ones with same key
•  Avoids message explosion for offline device
•  App may use multiple collapse keys
     –  Correspond to “feed” app will fetch
     –  Max of four in flight (per device)
•  State should be in app server, not in message
     –  Tell app when it should fetch data




21
Collapse Keys

                 CONN
                SERVER


                GOOGLE
                 C2D MSG
                FRONTEND




                 APP
                SERVER




22
Attenuation

•  Messages may not be delivered to device immediately
•  Protects devices that are receiving many messages
     –  Avoid constant radio wakeup
•  Attenuation per app/collapse key




23
Attenuation

               CONN
              SERVER


              GOOGLE
               C2D MSG
              FRONTEND




               APP
              SERVER




24
Delay While Idle

•  Device tells Connection Server when screen is on, off
     –  Screen off == device is idle
•  Apps can request message only be delivered when active
     –  Avoid waking up device with info that will not be seen/used
     –  e.g., chat presence, friend location updates




25
Delay While Idle

                    CONN
                   SERVER


                   GOOGLE
      Zzzz
                    C2D MSG
                   FRONTEND




                    APP
                   SERVER




26
Demo: Google Chrome to Phone Extension

•  Send any web page to Android device
     –  Special handling for Maps, YouTube
•  Chrome Extension
•  App Engine backend
                              APP
                             ENGINE
                                         AC2DM




                             ORIGIN
                            SERVER

27
Demo: JumpNote

•  Notes, with two way push sync
         –  App Engine backend, GWT UI
•  Uses Sync Framework
•  Uses Android Cloud to Device Messaging
         –  Register, Unregister based on auto-sync selection

public void onReceive(Context context, Intent intent) {
     String action = intent.getAction();
     if (“…RECEIVE”.equals(action)) {
         // Determine account, feed that changed …
         context.getContentResolver.requestSync(account, “…jumpnote”, extras);
     }
}

28
Android Cloud to Device Messaging Signup

•  Launching in Labs, accepting signups
•  Visit http://code.google.com/android/c2dm for details




29
Summary

•  Many Android apps access data in cloud
•  Push keeps apps up to date, efficiently
•  Android Cloud to Device Messaging makes push simple
•  Sign up now
     –  http://code.google.com/android/c2dm




30
View live notes and ask questions
about this session on Google Wave
http://bit.ly/ac2dmwave
Android push-applications-android

More Related Content

Similar to Android push-applications-android

Accelerrate your PaaS to the Mobile World
Accelerrate your PaaS to the Mobile WorldAccelerrate your PaaS to the Mobile World
Accelerrate your PaaS to the Mobile WorldRyan Campbell
 
Android Cloud To Device Messaging
Android Cloud To Device MessagingAndroid Cloud To Device Messaging
Android Cloud To Device MessagingFernando Cejas
 
Android cloud to device messaging
Android cloud to device messagingAndroid cloud to device messaging
Android cloud to device messagingFe
 
Leveraging Zend Framework for Sending Push Notifications
Leveraging Zend Framework for Sending Push NotificationsLeveraging Zend Framework for Sending Push Notifications
Leveraging Zend Framework for Sending Push NotificationsMike Willbanks
 
Android C2DM Presentation at O'Reilly AndroidOpen Conference
Android C2DM Presentation at O'Reilly AndroidOpen ConferenceAndroid C2DM Presentation at O'Reilly AndroidOpen Conference
Android C2DM Presentation at O'Reilly AndroidOpen ConferenceLars Vogel
 
Android Cloud to Device Messaging with the Google App Engine
Android Cloud to Device Messaging with the Google App EngineAndroid Cloud to Device Messaging with the Google App Engine
Android Cloud to Device Messaging with the Google App EngineLars Vogel
 
Powering your Apps via Google Cloud Platform
Powering your Apps via Google Cloud PlatformPowering your Apps via Google Cloud Platform
Powering your Apps via Google Cloud PlatformRomin Irani
 
Prepare and Manage Remote Applications through Virtualization
Prepare and Manage Remote Applications through Virtualization      Prepare and Manage Remote Applications through Virtualization
Prepare and Manage Remote Applications through Virtualization Rubal Sagwal
 
Introduction to google cloud messaging in android
Introduction to google cloud messaging in androidIntroduction to google cloud messaging in android
Introduction to google cloud messaging in androidRIA RUI Society
 
google cloud messaging
google cloud messaginggoogle cloud messaging
google cloud messagingBhavana Sharma
 
4Developers 2018: Zero-Downtime deployments with Kubernetes (Mateusz Dymiński)
4Developers 2018: Zero-Downtime deployments with Kubernetes (Mateusz Dymiński)4Developers 2018: Zero-Downtime deployments with Kubernetes (Mateusz Dymiński)
4Developers 2018: Zero-Downtime deployments with Kubernetes (Mateusz Dymiński)PROIDEA
 
GCM Android
GCM AndroidGCM Android
GCM Androidaswapnal
 
A Google Cloud Solution Minus Dedicated Server - App Only (Server and Client)
A Google Cloud Solution Minus Dedicated Server - App Only (Server and Client)A Google Cloud Solution Minus Dedicated Server - App Only (Server and Client)
A Google Cloud Solution Minus Dedicated Server - App Only (Server and Client)Chinnayya Math
 
FOSS STHLM Android Cloud to Device Messaging
FOSS STHLM Android Cloud to Device MessagingFOSS STHLM Android Cloud to Device Messaging
FOSS STHLM Android Cloud to Device MessagingJohan Nilsson
 

Similar to Android push-applications-android (20)

google cloud messaging
google cloud messaginggoogle cloud messaging
google cloud messaging
 
Accelerrate your PaaS to the Mobile World
Accelerrate your PaaS to the Mobile WorldAccelerrate your PaaS to the Mobile World
Accelerrate your PaaS to the Mobile World
 
AndroidAppPPT
AndroidAppPPTAndroidAppPPT
AndroidAppPPT
 
GCM aperitivo Android
GCM aperitivo AndroidGCM aperitivo Android
GCM aperitivo Android
 
Android Cloud To Device Messaging
Android Cloud To Device MessagingAndroid Cloud To Device Messaging
Android Cloud To Device Messaging
 
Android cloud to device messaging
Android cloud to device messagingAndroid cloud to device messaging
Android cloud to device messaging
 
Leveraging Zend Framework for Sending Push Notifications
Leveraging Zend Framework for Sending Push NotificationsLeveraging Zend Framework for Sending Push Notifications
Leveraging Zend Framework for Sending Push Notifications
 
Android C2DM Presentation at O'Reilly AndroidOpen Conference
Android C2DM Presentation at O'Reilly AndroidOpen ConferenceAndroid C2DM Presentation at O'Reilly AndroidOpen Conference
Android C2DM Presentation at O'Reilly AndroidOpen Conference
 
Android Cloud to Device Messaging with the Google App Engine
Android Cloud to Device Messaging with the Google App EngineAndroid Cloud to Device Messaging with the Google App Engine
Android Cloud to Device Messaging with the Google App Engine
 
Workshop: Android
Workshop: AndroidWorkshop: Android
Workshop: Android
 
Powering your Apps via Google Cloud Platform
Powering your Apps via Google Cloud PlatformPowering your Apps via Google Cloud Platform
Powering your Apps via Google Cloud Platform
 
Prepare and Manage Remote Applications through Virtualization
Prepare and Manage Remote Applications through Virtualization      Prepare and Manage Remote Applications through Virtualization
Prepare and Manage Remote Applications through Virtualization
 
Introduction to google cloud messaging in android
Introduction to google cloud messaging in androidIntroduction to google cloud messaging in android
Introduction to google cloud messaging in android
 
128-ch4.pptx
128-ch4.pptx128-ch4.pptx
128-ch4.pptx
 
google cloud messaging
google cloud messaginggoogle cloud messaging
google cloud messaging
 
4Developers 2018: Zero-Downtime deployments with Kubernetes (Mateusz Dymiński)
4Developers 2018: Zero-Downtime deployments with Kubernetes (Mateusz Dymiński)4Developers 2018: Zero-Downtime deployments with Kubernetes (Mateusz Dymiński)
4Developers 2018: Zero-Downtime deployments with Kubernetes (Mateusz Dymiński)
 
AutoMate+
AutoMate+AutoMate+
AutoMate+
 
GCM Android
GCM AndroidGCM Android
GCM Android
 
A Google Cloud Solution Minus Dedicated Server - App Only (Server and Client)
A Google Cloud Solution Minus Dedicated Server - App Only (Server and Client)A Google Cloud Solution Minus Dedicated Server - App Only (Server and Client)
A Google Cloud Solution Minus Dedicated Server - App Only (Server and Client)
 
FOSS STHLM Android Cloud to Device Messaging
FOSS STHLM Android Cloud to Device MessagingFOSS STHLM Android Cloud to Device Messaging
FOSS STHLM Android Cloud to Device Messaging
 

Recently uploaded

Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 

Recently uploaded (20)

Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 

Android push-applications-android

  • 1.
  • 2. Building Push Applications for Android Debajit Ghosh May 20, 2010
  • 3. View live notes and ask questions about this session on Google Wave http://bit.ly/ac2dmwave
  • 4. Outline •  Accessing Data in the Cloud •  Polling and Pushing •  Android Cloud to Device Messaging •  Demos •  Summary 4
  • 5. Accessing Data in the Cloud •  Apps provide seamless access to data in the cloud –  Mobile Alerts –  Send to Phone –  Background Sync •  Challenge: How do you keep data on a device fresh? 5
  • 6. Polling •  Simple to implement •  Device periodically asks server for new data –  Radio draws a lot of power, stays on for several seconds –  Ideally, use If-Modified-Since, If-None-Match, etc. •  Make no-ops as cheap as possible •  Appropriate for content that changes constantly –  Stock Quotes, News Headlines –  Poll infrequently, update on demand 6
  • 7. Impact of Polling on Battery •  Baseline: ~5-8 mA •  Network: ~180-200 mA –  Tx more expensive than Rx •  Radio stays on for few secs •  ~0.50 mAh for a short poll –  5m frequency: ~144 mAh / day –  15m frequency: ~48 mAh / day Source: Android development team at Google 7
  • 8. When to Poll? •  Tradeoff between freshness and efficiency –  Poll frequently – more fresh, less efficient •  Desire: Push, don’t poll –  Only fetch data when useful 8
  • 9. Pushing •  Enables freshness with less impact on battery –  Only use network when necessary –  Constant overhead of persistent connection •  Google Contacts, Calendar, Gmail, etc., use push sync •  Can be tricky to implement •  Android Cloud to Device Messaging makes push easy 9
  • 10. Android Cloud to Device Messaging •  Simple Google API –  Android 2.2 devices with Market –  Will be open to all developers •  Uses existing connection for Google services •  Allows servers to send lightweight “data” messages to apps –  Tell app new data available –  Intent broadcast wakes up app –  App supplies UI, e.g., Notification, if/as necessary •  Best effort delivery 10
  • 11. Peeking Under the Hood •  Background service –  Honor background data setting –  Start when network available •  Maintain connection with server –  Use heartbeats to keep alive, detect dead connections •  Efficient –  Minimize per connect overhead –  Minimize heartbeat frequency –  Minimize concurrent connections 11
  • 12. Heartbeats X ✓ PING ACK SERVER •  Use Alarms •  Can also initiate ping •  (Re)schedule pings •  May be half open •  Wait for acks •  Clean up state when dead •  Reconnect when dead 12
  • 13. Overview of Lifecycle •  Enabling cloud to device messaging –  App (on device) registers with Google, gets registration ID –  App sends registration ID to its App Server •  Per message –  App Server sends (authenticated) message to Google –  Google sends message to device •  Disabling cloud to device messaging –  App can unregister ID, e.g., when user no longer wants push 13
  • 14. Life of a Message CONN SERVER WAKE UP! GOOGLE APP C2D MSG FRONTEND APP SERVER 14
  • 15. Registration – Requesting a Registration ID // Use the Intent API to get a registration ID // Registration ID is compartmentalized per app/device Intent regIntent = new Intent(“com.google.android.c2dm.intent.REGISTER”); // Identify your app regIntent.putExtra(“app”, PendingIntent.getBroadcast(this, 0, new Intent(), 0); // Identify role account server will use to send regIntent.putExtra(“sender”, emailOfSender); // Start the registration process startService(regIntent); 15
  • 16. Registration – Receiving the Registration ID •  App receives the ID as an Intent –  com.google.android.c2dm.intent.REGISTRATION •  App should send this ID to its server •  Service may issue new registration ID at any time –  App will receive REGISTRATION Intent broadcast –  App must update server with new ID 16
  • 17. Registration – Receiving the Registration ID // Registration ID received via an Intent public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (“…REGISTRATION”.equals(action)) { handleRegistration(context, intent); } } private void handleRegistration(Context context, Intent intent){ String id = intent.getExtra(“registration_id”); if ((intent.getExtra(“error”) != null) { // Registration failed. Try again later, with backoff. } else if (id != null) { // Send the registration ID to the app’s server. // Be sure to do this in a separate thread. } } 17
  • 18. Sending Messages •  Get “ac2dm” auth token, install on server –  http://code.google.com/apis/accounts/docs/AuthForInstalledApps.html •  Send authenticated POST –  https://android.apis.google.com/c2dm/send –  Authorization: GoogleLogin auth=<auth token> –  URL Encoded parameters •  registration_id •  collapse_key •  (optional) delay_while_idle •  (optional) data.<key>* 18
  • 19. Sending Messages – Response Codes •  200 OK –  With “id” – request succeeded, message enqueued –  With “Error” – request failed •  QuotaExceeded, DeviceQuotaExceeded: Retry after a while •  InvalidRegistration, NotRegistered: Stop sending messages •  MessageTooBig: Reduce size of message •  MissingCollapseKey: Include collapse key in request •  401 Not Authorized: Get new auth token •  503 Service Unavailable: Retry with backoff 19
  • 20. Receiving Messages •  Device receives message, converts to Intent •  App woken up/started by Intent broadcast –  com.google.android.c2dm.intent.RECEIVE –  data.<key>* set as Intent extras –  App needs com.example.app.permission.C2D_MESSAGE public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (“…RECEIVE”.equals(action)) { // Grab a wakelock, use IntentService to do work } } 20
  • 21. Collapse Keys •  Latest message replaces older ones with same key •  Avoids message explosion for offline device •  App may use multiple collapse keys –  Correspond to “feed” app will fetch –  Max of four in flight (per device) •  State should be in app server, not in message –  Tell app when it should fetch data 21
  • 22. Collapse Keys CONN SERVER GOOGLE C2D MSG FRONTEND APP SERVER 22
  • 23. Attenuation •  Messages may not be delivered to device immediately •  Protects devices that are receiving many messages –  Avoid constant radio wakeup •  Attenuation per app/collapse key 23
  • 24. Attenuation CONN SERVER GOOGLE C2D MSG FRONTEND APP SERVER 24
  • 25. Delay While Idle •  Device tells Connection Server when screen is on, off –  Screen off == device is idle •  Apps can request message only be delivered when active –  Avoid waking up device with info that will not be seen/used –  e.g., chat presence, friend location updates 25
  • 26. Delay While Idle CONN SERVER GOOGLE Zzzz C2D MSG FRONTEND APP SERVER 26
  • 27. Demo: Google Chrome to Phone Extension •  Send any web page to Android device –  Special handling for Maps, YouTube •  Chrome Extension •  App Engine backend APP ENGINE AC2DM ORIGIN SERVER 27
  • 28. Demo: JumpNote •  Notes, with two way push sync –  App Engine backend, GWT UI •  Uses Sync Framework •  Uses Android Cloud to Device Messaging –  Register, Unregister based on auto-sync selection public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (“…RECEIVE”.equals(action)) { // Determine account, feed that changed … context.getContentResolver.requestSync(account, “…jumpnote”, extras); } } 28
  • 29. Android Cloud to Device Messaging Signup •  Launching in Labs, accepting signups •  Visit http://code.google.com/android/c2dm for details 29
  • 30. Summary •  Many Android apps access data in cloud •  Push keeps apps up to date, efficiently •  Android Cloud to Device Messaging makes push simple •  Sign up now –  http://code.google.com/android/c2dm 30
  • 31. View live notes and ask questions about this session on Google Wave http://bit.ly/ac2dmwave