page.title=GCM Advanced Topics
@jd:body

<div id="qv-wrapper">
<div id="qv">

<h2>Quickview</h2>

<ul>
<li>Learn more about GCM advanced features.</li>
</ul>


<h2>In this document</h2>

<ol>
<li><a href="#lifetime">Lifetime of a Message</a></li>
<li><a href="#throttling">Throttling</a></li>
<li><a href="#reg-state">Keeping the Registration State in Sync</a>
  <ol>
    <li><a href="#canonical">Canonical IDs</a></li>
  </ol>
</li>
<li><a href="#retry">Automatic Retry Using Exponential Back-Off</a></li>
<li><a href="#unreg">How Unregistration Works</a></li>
<li><a href="#collapsible">Send-to-Sync vs. Messages with Payload</a>
  <ol>
    <li><a href="#s2s">Send-to-sync messages</a></li>
    <li><a href="#payload">Messages with payload</a></li>
<li><a href="#which">Which should I use?</a></li>
    </ol>
</li>
<li><a href="#ttl">Setting an Expiration Date for a Message</a> </li>
<li><a href="#throttling"></a><a href="#multi-senders">Receiving Messages from Multiple Senders</a></li>
</ol>

</div>
</div>
<p>This document covers advanced topics for GCM.</p>




<h2 id="msg-lifetime">Lifetime of a Message</h2>
<p>When a 3rd-party server posts a message to GCM and receives a message ID back, it does not mean that the message was already delivered to the device. Rather, it means that it was accepted for delivery. What happens to the message after it is accepted depends on many factors.</p>
<p>In the best-case scenario, if the device is connected to GCM, the screen is on, and there are no throttling restrictions (see <a href="#throttling">Throttling</a>), the message will be delivered right away.</p>
<p>If the device is connected but idle, the message will still be
delivered right away unless the <code>delay_while_idle</code> flag is set to true. Otherwise, it will be stored in the GCM servers until the device is awake. And that's where the <code>collapse_key</code> flag plays a role: if there is already a message with the same collapse key (and registration ID) stored and waiting for delivery, the old message will be discarded and the new message will take its place (that is, the old message will be collapsed by the new one). However, if the collapse key is not set, both the new and old messages are stored for future delivery.</p>

<p class="note"><strong>Note:</strong> There is a limit on how many messages can be stored without collapsing. That limit is currently 100. If the limit is reached, all stored messages are discarded. Then when the device is back online, it receives a special message indicating that the limit was reached. The application can then handle the situation properly, typically by requesting a full sync.</p>

<p>If the device is not connected to GCM, the message will be stored until a connection is established (again respecting the collapse key rules). When a connection is established, GCM will deliver all pending messages to the device, regardless of the <code>delay_while_idle</code> flag. If the device never gets connected again (for instance, if it was factory reset), the message will eventually time out and be discarded from GCM storage. The default timeout is 4 weeks, unless the <code>time_to_live</code> flag is set.</p>

<p>Finally, when GCM attempts to deliver a message to the device and the application was uninstalled, GCM will discard that message right away and invalidate the registration ID. Future attempts to send a message to that device will get a <code>NotRegistered</code> error. See <a href="#unreg">How Unregistration Works</a> for more information.</p>
<p>Although is not possible to track the status of each individual message, the Google APIs Console stats are broken down by messages sent to device, messages collapsed, and messages waiting for delivery.</p>

<h2 id="throttling">Throttling</h2>
<p>To prevent abuse (such as sending a flood of messages to a device) and
to optimize for the overall network efficiency and battery life of
devices, GCM implements throttling of messages using a token bucket
scheme. Messages are throttled on a per application and per <a href="#collapsible">collapse
key</a> basis (including non-collapsible messages). Each application
collapse key is granted some initial tokens, and new tokens are granted
periodically therefter. Each token is valid for a single message sent to
the device. If an application collapse key exhausts its supply of
available tokens, new messages are buffered in a pending queue until
new tokens become available at the time of the periodic grant. Thus
throttling in between periodic grant intervals may add to the latency
of message delivery for an application collapse key that sends a large
number of messages within a short period of time. Messages in the pending
queue of an application collapse key may be delivered before the time
of the next periodic grant, if they are piggybacked with messages
belonging to a non-throttled category by GCM for network and battery
efficiency reasons.</p>

<h2 id="reg-state">Keeping the Registration State in Sync</h2>
<p>Whenever the application receives a <code>com.google.android.c2dm.intent.REGISTRATION</code> intent with a <code>registration_id</code> extra, it should save the ID for future use, pass it to the 3rd-party server to complete the registration, and keep track of whether the server completed the registration. If the server fails to complete the registration, it should try again or unregister from GCM.</p>
<p>There are also two other scenarios that require special care:</p>
<ul>
  <li>Application update</li>
  <li>Backup and restore
  </li>
</ul>
<p>When an application is updated, it should invalidate its existing registration ID, as it is not guaranteed to work with the new version.  Because there is no lifecycle method called when the application is updated, the best way to achieve this validation is by storing the current application version when a registration ID is stored. Then when the application is started, compare the stored value with the current application version. If they do not match, invalidate the stored data and start the registration process again.</p>

<p>Similarly, you should not save the registration ID when an application is backed up. This is because the registration ID could become invalid by the time the application is restored, which would put the application in an invalid state  (that is, the application thinks it is registered, but the server and GCM do not store that registration ID anymore&mdash;thus the application will not get more messages).</p>
<h3 id="canonical">Canonical IDs</h3>
<p>On the server side, as long as the application is behaving well, everything should work normally. However, if a bug in the application triggers multiple registrations for the same device, it can be hard to reconcile state and you might end up with duplicate messages.</p>
<p>GCM provides a facility called &quot;canonical registration IDs&quot; to easily recover from these situations. A canonical registration ID is defined to be the ID of the last registration requested by your application. This is the ID that the server should use when sending messages to the device.</p>
<p>If later on you try to send a message using a different registration ID, GCM will process the request as usual, but it will include the canonical registration ID in the <code>registration_id</code> field of the response. Make sure to replace the registration ID stored in your server with this canonical ID, as eventually the ID you're using will stop working.</p>

<h2 id="retry">Automatic Retry Using Exponential Back-Off</h2>

<p>When the application receives a <code>com.google.android.c2dm.intent.REGISTRATION</code> intent with the <code>error</code> extra set as <code>SERVICE_NOT_AVAILABLE</code>, it should retry the failed operation (register or unregister).</p>
<p>In the simplest case, if your application just calls <code>register</code> and GCM is not a fundamental part of the application, the application could simply ignore the error and try to register again the next time it starts. Otherwise, it should retry the previous operation using exponential back-off. In exponential back-off, each time there is a failure, it should wait twice the previous amount of time before trying again. If the register (or unregister) operation was synchronous, it could be retried in a simple loop. However, since it is asynchronous, the best approach is to schedule a pending intent to retry the operation. The following steps describe how to implement this in the <code>MyIntentService</code> example used above:</p>
<ol>
  <li> Create a random token to verify the origin of the retry intent:

<pre class="prettyprint pretty-java">private static final String TOKEN =
        Long.toBinaryString(new Random().nextLong());
</pre>

  <li> Change the <code>handleRegistration()</code> method so it creates the pending intent when appropriate:</li>

<pre class="prettyprint pretty-java">...
if (error != null) {
 if ("SERVICE_NOT_AVAILABLE".equals(error)) {
   long backoffTimeMs = // get back-off time from shared preferences
   long nextAttempt = SystemClock.elapsedRealtime() + backoffTimeMs;
   Intent retryIntent = new Intent("com.example.gcm.intent.RETRY");
   retryIntent.putExtra("token", TOKEN);
   PendingIntent retryPendingIntent =
       PendingIntent.getBroadcast(context, 0, retryIntent, 0);
   AlarmManager am = (AlarmManager)   
       context.getSystemService(Context.ALARM_SERVICE);
   am.set(AlarmManager.ELAPSED_REALTIME, nextAttempt, retryPendingIntent);
   backoffTimeMs *= 2; // Next retry should wait longer.
   // update back-off time on shared preferences
 } else {
   // Unrecoverable error, log it
   Log.i(TAG, "Received error: " + error);
}
...</pre>
<p> The back-off time is stored in a shared preference. This ensures that it is persistent across multiple activity launches. The name of the intent does not matter, as long as the same intent is used in the following steps.</p></li>

  <li> Change the <code>onHandleIntent()</code> method adding an <code>else if</code> case for the retry intent:</li>

<pre class="prettyprint pretty-java">...
} else if (action.equals("com.example.gcm.intent.RETRY")) {
    String token = intent.getStringExtra("token");
    // make sure intent was generated by this class, not by a malicious app
    if (TOKEN.equals(token)) {
        String registrationId = // get from shared properties
        if (registrationId != null) {
        // last operation was attempt to unregister; send UNREGISTER intent again
    } else {
        // last operation was attempt to register; send REGISTER intent again
    }
}
...</pre>

  <li> Create a new instance of <code>MyReceiver</code> in your activity:</li>

<pre class="prettyprint pretty-java">private final MyBroadcastReceiver mRetryReceiver = new MyBroadcastReceiver();
</pre>

  <li>In the activity's <code>onCreate()</code> method, register the new instance to receive the <code>com.example.gcm.intent.RETRY</code> intent:
    <pre class="prettyprint pretty-java">...
IntentFilter filter = new IntentFilter(&quot;com.example.gcm.intent.RETRY&quot;);
filter.addCategory(getPackageName());
registerReceiver(mRetryReceiver, filter);
...</pre>

<p class="note"><strong>Note:</strong> You must dynamically create a new instance of the broadcast receiver since the one defined by the manifest can only receive intents with the <code>com.google.android.c2dm.permission.SEND</code> permission. The permission <code>com.google.android.c2dm.permission.SEND</code> is a system permission and as such it cannot be granted to a regular application.</p>

</li>

  <li>In the activity's <code>onDestroy()</code> method, unregister the broadcast receiver:</li>

<pre class="prettyprint pretty-java">unregisterReceiver(mRetryReceiver);</pre>
</ol>
<h2 id="unreg">How Unregistration Works</h2>
<p>There are two ways to unregister a device from GCM: manually and automatically.</p>
<p>An Android application can manually unregister itself by issuing a <code>com.google.android.c2dm.intent.UNREGISTER</code> intent, which is useful when the application offers a logoff feature (so it can unregister on logoff and register again on logon). See the <a href="gcm.html#unregistering">Architectural Overview</a> for more discussion of this topic. This is the sequence of events when an application unregisters itself:</p>
<ol>
  <li> The application issues a <code>com.google.android.c2dm.intent.UNREGISTER</code> intent, passing the package name as an extra.</li>
  <li>When the GCM server is done with the unregistration, it sends a <code>com.google.android.c2dm.intent.REGISTRATION</code> intent with the <code>unregistered</code> extra set.</li>
  <li>The application then must contact the 3rd-party server so it can remove the registration ID.</li>
  <li>The application should also clear its registration ID.
  </li>
</ol>
<p>An application can be automatically unregistered after it is uninstalled from the device. However, this process does not happens right away, as Android does not provide an uninstall callback. What happens in this scenario is as follows:</p>
<ol>
  <li>The end user uninstalls the application.</li>
  <li>The 3rd-party server sends a message to GCM server.</li>
  <li>The GCM server sends the message to the device.</li>
  <li>The GCM client receives the message and queries Package Manager about whether there are broadcast receivers configured to receive it, which returns <code>false</code>. 
</li>
  <li>The GCM client informs the GCM server that the application was uninstalled.</li>
  <li>The GCM server marks the registration ID for deletion.</li>
  <li>The 3rd-party server sends a message to  GCM.</li>
  <li>The GCM returns a <code>NotRegistered</code> error message to the 3rd-party server.</li>
  <li>The 3rd-party deletes the registration ID.
  </li>
</ol>

<p class ="note"><strong>Note:</strong> The GCM client is the Google Cloud Messaging framework present on the device.</p>

<p>Note that it might take a while for the registration ID be completely removed from GCM. Thus it is possible that messages sent during step 7 above gets a valid message ID as response, even though the message will not be delivered to the device. Eventually, the registration ID will be removed and the server will get a <code>NotRegistered</code> error, without any further action being required from the 3rd-party server (this scenario happens frequently while an application is being developed and tested).</p>

<h2 id="collapsible">Send-to-Sync  vs. Messages with Payload</h2>

<p>Every message sent in GCM has the following characteristics:</p>
<ul>
  <li>It has a payload limit of 4096 bytes.</li>
  <li>By default, it is stored by GCM for 4 weeks.</li>
</ul>

<p>But despite these similarities, messages can behave very differently depending on their particular settings. One major distinction between messages is whether they are collapsed (where each new message replaces the preceding message) or not collapsed (where each individual message is delivered). Every message sent in GCM is either a &quot;send-to-sync&quot; (collapsible) message or a &quot;message with payload&quot; (non-collapsible message). These concepts are described in more detail in the following sections.</p>

<h3 id="s2s"><strong>Send-to-sync messages</strong></h3>

<p>A send-to-sync (collapsible) message is often a &quot;tickle&quot; that tells a mobile application to sync data from the server. For example, suppose you have an email application. When a user receives new email on the server, the server pings the mobile application with a &quot;New mail&quot; message. This tells the application to sync to the server to pick up the new email. The server might send this message multiple times as new mail continues to accumulate, before the application has had a chance to sync. But if the user has received 25 new emails, there's no need to preserve every &quot;New mail&quot; message. One is sufficient. Another example would be a sports application that updates users with the latest score. Only the most recent message is relevant, so it makes sense to have each new message replace the preceding message. </p>

<p>The email and sports applications are cases where you would probably use the GCM <code>collapse_key</code> parameter. A <em>collapse key</em> is an arbitrary string that is used to collapse a group of like messages when the device is offline, so that only the most recent message gets sent to the client. For example, &quot;New mail,&quot; &quot;Updates available,&quot; and so on</p>
<p>GCM allows a maximum of 4 different collapse keys to be used by the GCM server at any given time. In other words, the GCM server can simultaneously store 4 different send-to-sync messages, each with a different collapse key. If you exceed this number GCM will only keep 4 collapse keys, with no guarantees about which ones they will be.</p>

<h3 id="payload">Messages with payload</h3>
<p>Unlike a send-to-sync message, every &quot;message with payload&quot; (non-collapsible message) is delivered. The payload the message contains can be up to 4kb. For example, here is a JSON-formatted message in an IM application in which spectators are discussing a sporting event:</p>

<pre class="prettyprint pretty-json">{
  "registration_id" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
  "data" : {
    "Nick" : "Mario",
    "Text" : "great match!",
    "Room" : "PortugalVSDenmark",
  },
}</pre>

<p>A &quot;message with payload&quot; is not simply a &quot;ping&quot; to the mobile application to contact the server to fetch data. In the aforementioned IM application, for example, you would want to deliver every message, because every message has different content. To specify a non-collapsible message, you simply omit the <code>collapse_key</code> parameter. Thus GCM will send each message individually. Note that the order of delivery is not guaranteed.</p>
<p>GCM will store up to 100 non-collapsible messages. After that, all messages are discarded from GCM, and a new message is created that tells the client how far behind it is. The message is delivered through a regular <code>com.google.android.c2dm.intent.RECEIVE</code> intent, with the following extras:</p>
<ul>
  <li> <code>message_type</code>&mdash;The value is always the string &quot;deleted_messages&quot;.</li>
  <li><code>total_deleted</code>&mdash;The value  is a string with the number of deleted messages.</li>
</ul>
<p>The application should respond by syncing with the server to recover the discarded messages. </p>

<h3 id="which">Which should I use?</h3>
  <p>If your application does not need to use non-collapsible messages, collapsible messages are a better choice from a performance standpoint, because they put less of a burden on the device battery.</p>

<h2 dir="ltr" id="ttl">Setting an Expiration Date for a Message</h2>
<p>The Time to Live (TTL) feature lets  the sender  specify the maximum lifespan of a message using the <code>time_to_live</code> parameter in the send request. The value of this parameter must be a duration from 0 to 2,419,200 seconds, and it corresponds to the maximum period of time for which GCM will store and try to deliver the message. Requests that don't contain this field default to the maximum period of 4 weeks.</p>
<p>Here are some possible uses for this feature:</p>
<ul>
  <li>Video chat incoming calls</li>
  <li>Expiring invitation events</li>
  <li>Calendar events</li>
</ul>
<h3 id="bg">Background </h3>
<p>GCM will usually deliver messages immediately after they are sent. However, this might not always be possible. For example, the device could be turned off, offline, or otherwise unavailable. In other cases, the sender itself might request that messages not be delivered until the device becomes active by using the <code>delay_while_idle</code> flag. Finally, GCM might intentionally delay messages to prevent an application from consuming excessive resources and negatively impacting battery life.</p>
<p>When this happens, GCM will store the message and deliver it as soon as it's feasible. While this is fine in most cases, there are some applications for which a late message might as well never be delivered. For example, if the message is an incoming call or video chat notification, it will only be meaningful for a small period of time before the call is terminated. Or if the message is an invitation to an event, it will be useless if received after the event has ended.</p>
<p>Another advantage of specifying the expiration date for a message is that GCM will never throttle messages with a <code>time_to_live</code> value of 0 seconds. In other words, GCM will guarantee best effort for messages that must be delivered &quot;now or never.&quot; Keep in mind that a <code>time_to_live</code> value of 0 means messages that can't be delivered immediately will be discarded. However, because such messages are never stored, this provides the best latency for sending notifications.</p>
<p>Here is an example of a JSON-formatted request that includes TTL:</p>
<pre class="prettyprint pretty-json">
{
  "collapse_key" : "demo",
  "delay_while_idle" : true,
  "registration_ids" : ["xyz"],
  "data" : {
    "key1" : "value1",
    "key2" : "value2",
  },
  "time_to_live" : 3
},
</pre>


<h2 id="multi-senders">Receiving Messages from Multiple Senders</h2>
<p>GCM allows multiple parties to send messages to the same application. For example, suppose your application is an articles aggregator with multiple contributors, and you want each of them to be able to send a message when they publish a new article. This message might contain a URL so that the application can download the article. Instead of having to centralize all sending activity in one location, GCM gives you the ability to let each of these contributors send its own messages.</p>
<p>To make this possible, all you need to do is have each sender generate its own project number. Then include those IDs in the sender field, separated by commas, when requesting a registration. Finally, share the registration ID with your partners, and they'll be able to send messages to your application using their own authentication keys.</p>
<p>This code snippet illustrates this feature. Senders are passed as an intent extra in a comma-separated list:</p>
<pre class="prettyprint pretty-java">Intent intent = new Intent(GCMConstants.INTENT_TO_GCM_REGISTRATION);
intent.setPackage(GSF_PACKAGE);
intent.putExtra(GCMConstants.EXTRA_APPLICATION_PENDING_INTENT,
        PendingIntent.getBroadcast(context, 0, new Intent(), 0));
String senderIds = &quot;968350041068,652183961211&quot;;
intent.putExtra(GCMConstants.EXTRA_SENDER, senderIds);
ontext.startService(intent);
 </pre>

<p>Note that there is limit of 100 multiple senders.</p>
 
