| page.title=Optimizing Server-Initiated Network Use |
| trainingnavtop=true |
| |
| |
| @jd:body |
| |
| <div id="tb-wrapper"> |
| <div id="tb"> |
| |
| <h2>This lesson teaches you to</h2> |
| <ol> |
| <li><a href="#gcm">Send Server Updates with GCM</a> |
| </ol> |
| |
| </div> |
| </div> |
| |
| <p> |
| Network traffic sent by server programs to your app can be challenging to optimize. A |
| solution to this problem is for your appp to periodically poll the server to check for updates. |
| This approach can waste network connection and power when your app starts up a device's radio, |
| only to receive an answer that no new data is available. A far more efficient approach would be |
| for the to notify your app when it has new data, but figuring out how to send a notification |
| from your server to potentially thousands of devices was previously no easy feat. |
| </p> |
| |
| <p> |
| The <a href="https://developers.google.com/cloud-messaging/gcm">Google Cloud Messaging</a> (GCM) |
| service solves this communication problem by allowing your servers to send notifications to |
| instances of your app wherever they are installed, enabling greater network efficiency and |
| lowering power usage. |
| </p> |
| |
| <p> |
| This lesson teaches you how to apply the GCM service to reduce network use for server-initiated |
| actions and reduce battery consumption. |
| </p> |
| |
| |
| <h2 id="gcm">Send Server Updates with GCM</h2> |
| |
| <p> |
| Google Cloud Messaging (GCM) is a lightweight mechanism used to transmit brief messages from an |
| app server to your app. Using GCM, your app server uses a message-passing |
| mechanism to notify your app that there is new data available. This approach eliminates network |
| traffic that your app would perform, by not contacting a backend server for new data when no |
| data is available. |
| </p> |
| |
| <p> |
| An example use of GCM is an app that lists speaker sessions at a conference. When sessions are |
| updated on your server, the server sends a brief message to your app telling it updates are |
| available. Your app can then call the server to update the sessions on the device only when |
| the server has new data. |
| </p> |
| |
| <p> |
| GCM is more efficient than having your app poll for changes on the server. The GCM service |
| eliminates unnecessary connections where polling would return no updates, and it avoids running |
| periodic network requests that could cause a device's radio to power up. Since GCM can be used by |
| many apps, using it in your app reduces the total number of network connections needed on a |
| device and allows the device radio to sleep more often. |
| </p> |
| |
| <p> |
| For more information about GCM and how to implement it for your app, see |
| <a href="https://developers.google.com/cloud-messaging/gcm">Google Cloud Messaging</a>. |
| </p> |
| |
| <p class="note"> |
| <strong>Note:</strong> When using GCM, your app can pass messages in normal or high priority. |
| Your server should typically use <a href= |
| "https://developers.google.com/cloud-messaging/concept-options#setting-the-priority-of-a-message"> |
| normal priority</a> to deliver messages. Using this priority level prevents devices from being |
| woken up if they are inactive and in a low-power <a href= |
| "https://developer.android.com/training/monitoring-device-state/doze-standby.html">Doze</a> |
| state. Use high priority messages only if absolutely required. |
| </p> |