blob: e861915d7c6d84cb4741592196736d9736c0a75a [file] [log] [blame]
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Adding push notifications support &mdash; Apache Usergrid 1.0 documentation</title>
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="top" title="Apache Usergrid 1.0 documentation" href="../index.html"/>
<link rel="next" title="Getting started with push notifications" href="getting-started.html"/>
<link rel="prev" title="Push notifications overview" href="overview.html"/>
<script src="../_static/js/modernizr.min.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-nav-search">
<a href="../index.html" class="icon icon-home"> Apache Usergrid
</a>
<div class="version">
1.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<p class="caption"><span class="caption-text">Getting Started</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../introduction/overview.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/usergrid-features.html">Usergrid Features</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/data-model.html">Usergrid Data model</a></li>
<li class="toctree-l1"><a class="reference internal" href="../introduction/async-vs-sync.html">Async vs. sync calls</a></li>
</ul>
<p class="caption"><span class="caption-text">Using Usergrid</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../using-usergrid/creating-account.html">Creating a Usergrid Account</a></li>
<li class="toctree-l1"><a class="reference internal" href="../using-usergrid/creating-a-new-application.html">Creating a new application</a></li>
<li class="toctree-l1"><a class="reference internal" href="../using-usergrid/using-a-sandbox-app.html">Using a Sandbox Application</a></li>
<li class="toctree-l1"><a class="reference internal" href="../using-usergrid/using-the-api.html">Using the API</a></li>
</ul>
<p class="caption"><span class="caption-text">Data Storage</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../data-storage/data-store-dbms.html">The Usergrid Data Store</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data-storage/optimizing-access.html">Data Store Best Practices</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data-storage/collections.html">Collections</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data-storage/entities.html">Entities</a></li>
</ul>
<p class="caption"><span class="caption-text">Data Queries</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../data-queries/querying-your-data.html">Querying your data</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data-queries/query-parameters.html">Query parameters &amp; clauses</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data-queries/operators-and-types.html">Query operators &amp; data types</a></li>
<li class="toctree-l1"><a class="reference internal" href="../data-queries/advanced-query-usage.html">Advanced query usage</a></li>
</ul>
<p class="caption"><span class="caption-text">Entity Connections</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../entity-connections/connecting-entities.html">Connecting entities</a></li>
<li class="toctree-l1"><a class="reference internal" href="../entity-connections/retrieving-entities.html">Retrieving connections</a></li>
<li class="toctree-l1"><a class="reference internal" href="../entity-connections/disconnecting-entities.html">Disconnecting entities</a></li>
</ul>
<p class="caption"><span class="caption-text">Push Notifications</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="overview.html">Push notifications overview</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="">Adding push notifications support</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#setting-up-push-notification-support">Setting up push notification support</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#how-the-pieces-connect">How the pieces connect</a></li>
<li class="toctree-l3"><a class="reference internal" href="#apple-apns">Apple APNs</a></li>
<li class="toctree-l3"><a class="reference internal" href="#google-gcm">Google GCM</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#requirements">Requirements</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#ios">iOS</a></li>
<li class="toctree-l3"><a class="reference internal" href="#android">Android</a></li>
<li class="toctree-l3"><a class="reference internal" href="#phonegap">PhoneGap</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#tutorials">Tutorials</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">iOS</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id2">Android</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#sample-apps">Sample Apps</a></li>
<li class="toctree-l2"><a class="reference internal" href="#troubleshooting">Troubleshooting</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#android-phonegap">Android / PhoneGap</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#push-errors">Push errors</a></li>
<li class="toctree-l4"><a class="reference internal" href="#mismatchsenderid-error-message-from-the-server-when-it-tries-to-send-a-message-to-your-app">MismatchSenderId error message from the server when it tries to send a message to your app.</a></li>
<li class="toctree-l4"><a class="reference internal" href="#invalid-sender-error-message">INVALID_SENDER error message</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="getting-started.html">Getting started with push notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial: Push notifications sample app</a></li>
<li class="toctree-l1"><a class="reference internal" href="registering.html">Registering with a notification service</a></li>
<li class="toctree-l1"><a class="reference internal" href="creating-notifiers.html">Creating notifiers</a></li>
<li class="toctree-l1"><a class="reference internal" href="managing-users-and-devices.html">Managing users and devices</a></li>
<li class="toctree-l1"><a class="reference internal" href="creating-and-managing-notifications.html">Creating and managing notifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
</ul>
<p class="caption"><span class="caption-text">Security &amp; Authentication</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../security-and-auth/app-security.html">Security &amp; token authentication</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security-and-auth/using-permissions.html">Using permissions</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security-and-auth/using-roles.html">Using roles</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security-and-auth/authenticating-users-and-application-clients.html">Authenticating users &amp; app clients</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security-and-auth/user-authentication-types.html">Authentication levels</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security-and-auth/changing-token-time-live-ttl.html">Changing token expiration (time-to-live)</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security-and-auth/authenticating-api-requests.html">Authenticating API requests</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security-and-auth/revoking-tokens-logout.html">Revoking tokens (logout)</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security-and-auth/facebook-sign.html">Facebook sign in</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security-and-auth/securing-your-app.html">Security best practices</a></li>
</ul>
<p class="caption"><span class="caption-text">User Management &amp; Social Graph</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../user-management/user-management.html">User management &amp; social graph</a></li>
<li class="toctree-l1"><a class="reference internal" href="../user-management/working-user-data.html">Working with User Data</a></li>
<li class="toctree-l1"><a class="reference internal" href="../user-management/group.html">Working with group data</a></li>
<li class="toctree-l1"><a class="reference internal" href="../user-management/activity.html">Activity</a></li>
<li class="toctree-l1"><a class="reference internal" href="../user-management/user-connections.html">Social Graph Connections</a></li>
<li class="toctree-l1"><a class="reference internal" href="../user-management/user-connections.html#creating-other-connections">Creating other connections</a></li>
<li class="toctree-l1"><a class="reference internal" href="../user-management/messagee-example.html">App Example - Messagee</a></li>
</ul>
<p class="caption"><span class="caption-text">Geo-location</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../geolocation/geolocation.html">Geolocating your Entities</a></li>
</ul>
<p class="caption"><span class="caption-text">Assets &amp; Files</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../assets-and-files/uploading-assets.html">Uploading assets</a></li>
<li class="toctree-l1"><a class="reference internal" href="../assets-and-files/retrieving-assets.html">Retrieving assets</a></li>
<li class="toctree-l1"><a class="reference internal" href="../assets-and-files/folders.html">Folders</a></li>
</ul>
<p class="caption"><span class="caption-text">Counters &amp; Events</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../counters-and-events/events-and-counters.html">Counters &amp; events</a></li>
<li class="toctree-l1"><a class="reference internal" href="../counters-and-events/creating-and-incrementing-counters.html">Creating &amp; incrementing counters</a></li>
<li class="toctree-l1"><a class="reference internal" href="../counters-and-events/creating-and-incrementing-counters.html#decrementing-resetting-counters">Decrementing/resetting counters</a></li>
<li class="toctree-l1"><a class="reference internal" href="../counters-and-events/creating-and-incrementing-counters.html#using-counters-hierarchically">Using counters hierarchically</a></li>
<li class="toctree-l1"><a class="reference internal" href="../counters-and-events/retrieving-counters.html">Retrieving counters</a></li>
</ul>
<p class="caption"><span class="caption-text">Organizations &amp; Applications</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../orgs-and-apps/managing.html">Organization &amp; application management</a></li>
<li class="toctree-l1"><a class="reference internal" href="../orgs-and-apps/organization.html">Organization</a></li>
<li class="toctree-l1"><a class="reference internal" href="../orgs-and-apps/application.html">Application</a></li>
<li class="toctree-l1"><a class="reference internal" href="../orgs-and-apps/admin-user.html">Admin user</a></li>
</ul>
<p class="caption"><span class="caption-text">API Reference</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../rest-endpoints/api-docs.html">Methods</a></li>
<li class="toctree-l1"><a class="reference internal" href="../rest-endpoints/api-docs.html#models">Models</a></li>
<li class="toctree-l1"><a class="reference internal" href="../rest-endpoints/api-docs.html#sub-types">Sub-Types</a></li>
</ul>
<p class="caption"><span class="caption-text">Client SDKs</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../sdks/tbd.html">COMING SOON...</a></li>
</ul>
<p class="caption"><span class="caption-text">Installing Usergrid</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../installation/deployment-guide.html">Usergrid 2.1.0 Deployment Guide</a></li>
</ul>
<p class="caption"><span class="caption-text">More about Usergrid</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../reference/presos-and-videos.html">Presentations &amp; Videos</a></li>
<li class="toctree-l1"><a class="reference internal" href="../reference/contribute-code.html">How to Contribute Code &amp; Docs</a></li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">Apache Usergrid</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html">Docs</a> &raquo;</li>
<li>Adding push notifications support</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/push-notifications/adding-push-support.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="adding-push-notifications-support">
<h1>Adding push notifications support<a class="headerlink" href="#adding-push-notifications-support" title="Permalink to this headline"></a></h1>
<p>You add push notification support by configuring services, then adding
app code to receive messages. You&#8217;ll set up an account with a
notification service (such as Apple&#8217;s APNs or Google&#8217;s GCM). Then you&#8217;ll
configure your App Services application to send notifications to the
service. Then you&#8217;ll add code to receive messages.</p>
<div class="section" id="setting-up-push-notification-support">
<h2>Setting up push notification support<a class="headerlink" href="#setting-up-push-notification-support" title="Permalink to this headline"></a></h2>
<p>The following steps get you set up so that your app can receive push
notifications. Keep in mind that these steps build on one another. In
other words, you&#8217;ll need values generated in step 1 in order to complete
step 2, and so on.</p>
<p>For a walkthrough of these steps using a push sample app, see [Tutorial:
Push notifications sample app].</p>
<ol class="arabic simple">
<li><strong>Register your app</strong> with push notification services. Your
notification messages will be forwarded to devices by Apple and/or
Google. So you&#8217;ll need to register with Apple APNs and/or Google&#8217;s
GCM. For more information, see Registering with a notification
service.</li>
<li><strong>Create a notifier</strong> to send notification messages from App Services
to notification services. App Services will use your notifier to send
your messages to a notification service. For details, see Creating
notifiers. To create a notifier, you&#8217;ll need information generated by
registering with a push notification service. You&#8217;ll need a separate
notifier for each app/platform combination.</li>
<li><strong>Register devices</strong> at run time. At run time, your code will
register to receive notifications. To do this, your code uses
information from the notification service and App Services notifier.
For more, see Managing users and devices.</li>
<li><strong>Send and manage push notifications</strong> You use App Service API
notification endpoints to target devices, users, or groups with your
messages. To learn more, see Creating and managing notifications.</li>
</ol>
<div class="section" id="how-the-pieces-connect">
<h3>How the pieces connect<a class="headerlink" href="#how-the-pieces-connect" title="Permalink to this headline"></a></h3>
<p>Click a tab below to view more information about how the pieces connect
once you&#8217;ve got it set up.</p>
</div>
<div class="section" id="apple-apns">
<h3>Apple APNs<a class="headerlink" href="#apple-apns" title="Permalink to this headline"></a></h3>
<p>The diagram below illustrates what things should look like once you&#8217;ve
gotten set up to send notifications that are received by your app.</p>
<p>A. At configuration time, you create an App ID, then create an App
Services notifier with a .p12 certificate you generate on your Mac. The
.p12 certificate correlates the notifier (which you will use to send
notification messages from App Services) with the App ID (so that APNs
will forward your notifications to devices).</p>
<p>B. A run time, your app&#8217;s code registers with Apple for notifications by
invoking the registerForRemoteNotificationTypes method to receive a
token it can send to App Services.</p>
<p>C. At run time, your app&#8217;s code registers with App Services for
notifications by sending the name of the App Services notifier you
created. This ensure&#8217;s that there&#8217;s a device entity in your App Service
application. That way, you can address the device with notification
messages.</p>
<p>For information on troubleshooting push notifications on iOS devices,
see Troubleshooting Push Notifications</p>
</div>
<div class="section" id="google-gcm">
<h3>Google GCM<a class="headerlink" href="#google-gcm" title="Permalink to this headline"></a></h3>
<p>Google GCM The diagram below illustrates what things should look like
once you&#8217;ve gotten set up to send notifications that are received by
your app.</p>
<p>A. At configuration time, you create a Google API project, then create
an App Services notifier with an API key from the project. The API key
correlates the notifier (which you will use to send notification
messages from App Services) with the API project (which will forward
your notifications to devices).</p>
<p>B. At run time, your app&#8217;s code registers with App Services for
notifications by sending the name of the App Services notifier you
created. This ensure&#8217;s that there&#8217;s a device entity in your App Service
application. That way, you can address the device with notification
messages.</p>
<p>C. A run time, your app&#8217;s code registers with Google for notifications
by sending the number of your API project as a &#8220;sender ID&#8221;. The project
is the actual notification &#8220;sender&#8221; that will forward notifications to
your app. In other words, the app is telling Google that it wants to
receive notifications from that sender.</p>
</div>
</div>
<div class="section" id="requirements">
<h2>Requirements<a class="headerlink" href="#requirements" title="Permalink to this headline"></a></h2>
<p>Before you start adding support for push notifications, be sure you&#8217;ve
got the following:</p>
<p>An Apigee account (it’s free). If you don&#8217;t yet have an Apigee account,
you can create one. An App Services organization. Organizations are
top-level containers for your APIs and other resources. By default, your
Apigee account will include one organization that has the same name as
your username. You can view your current organizations or create a new
one by visiting your account dashboard. An App Services application. An
App Services application is where you store you App Services data and
where you schedule notifications. Data in the application represents
devices, notifiers, notifications, users, and groups. For information on
creating an app, see Registering apps. You will need to test with a
mobile device running the platform you&#8217;re developer for. In the case of
Android, you might be able to use an emulator. It is not possible to
test push notifications from a web browser.</p>
<div class="section" id="ios">
<h3>iOS<a class="headerlink" href="#ios" title="Permalink to this headline"></a></h3>
<p>To develop push notifications for an iOS app, you&#8217;ll need:</p>
<p>A Mac to generate the necessary SSL certificate. An iOS developer
account. You&#8217;ll need this to register for an App ID and get a
provisioning profile. To get an account, visit the iOS Dev Center. An
actual iOS device to test push notifications. It&#8217;s not yet possible to
develop push notifications with an emulator. An iOS provisioning profile
For iOS app testing, you need a provisioning profile that&#8217;s associated
with an Apple ID. You set up the provisioning profile in the Apple
developer portal, download the profile, and import it into Xcode.</p>
<p>To set up a provisioning profile, you need to create an &#8220;iOS App
Development&#8221; certificate in the Apple developer portal. For example, in
the Apple APNs setup earlier in this tutorial, you created a certificate
in the Apple developer portal to be used for push notifications.
However, you won&#8217;t be able to create a provisioning portal with just
that certificate. You also need to create an &#8220;iOS App Development&#8221;
certificate (the configuration settings don&#8217;t matter), as shown in the
following image.</p>
<p>ios dev certificate</p>
<p>After you create an iOS App Development certificate, you can create a
provisioning profile that includes your App ID/certificate for push
notifications.</p>
</div>
<div class="section" id="android">
<h3>Android<a class="headerlink" href="#android" title="Permalink to this headline"></a></h3>
<p>It&#8217;s generally a best practice to develop Android apps by testing and
debugging with an Android device. It&#8217;s also possible to use an emulator.</p>
<p>Before testing and debugging with an Android device, you&#8217;ll need to set
up your device for development. Be sure to see the Android documentation
on using hardware devices.</p>
<p>To test with an emulator, you will need to follow these steps:</p>
<p>Ensure that you have Google API 8 (or above) and Android 2.2 (or above).
Using the Android SDK Manager, install Google Cloud Messaging for
Android Library. Using the Android Virtual Device Manager, create an
emulator whose target is Google APIs. Ensure that the emulator you&#8217;re
using includes a Google account. Launch the emulator. In the emulator,
click the Menu button, then go to Settings &gt; Accounts &amp; Sync. Add a
Google account. Once you&#8217;ve finished these steps, you should have an
emulator that can receive push notification messages.</p>
</div>
<div class="section" id="phonegap">
<h3>PhoneGap<a class="headerlink" href="#phonegap" title="Permalink to this headline"></a></h3>
<p>You&#8217;ll need to test with a device or emulator. It is not possible to
test push notifications with a browser alone. PhoneGap Push plug-in.
Developers using PhoneGap to develop their apps with HTML5 and
Javascript will need to install the Apigee push notification PhoneGap
plug-in to enable push notifications. Installation instructions are
available in the plug-in Readme.md file, as well as in Tutorial: Push
notifications sample app. The plug-in is already included in the above
PhoneGap sample apps.</p>
</div>
</div>
<div class="section" id="tutorials">
<h2>Tutorials<a class="headerlink" href="#tutorials" title="Permalink to this headline"></a></h2>
<p>Written tutorial For a full step-by-step tutorial using iOS, Android, or
JavaScript, see Tutorial: Push notifications sample app.</p>
<p>Video tutorial Click the tab for your preferred development platform to
watch a full walkthrough video about how to integrate the App Services
push notifications feature into your app.</p>
<div class="section" id="id1">
<h3>iOS<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h3>
</div>
<div class="section" id="id2">
<h3>Android<a class="headerlink" href="#id2" title="Permalink to this headline"></a></h3>
</div>
</div>
<div class="section" id="sample-apps">
<h2>Sample Apps<a class="headerlink" href="#sample-apps" title="Permalink to this headline"></a></h2>
<p>You&#8217;ll find samples in SDKs that are specific to three mobile platforms:
iOS, Android, and JavaScript. These show a simple implementation of push
notifications in action. After you perform a few setup steps, running
the sample app on your connected device or emulator, you will be able to
send a push notification to it by clicking a button in the app&#8217;s UI. You
will also be able to send more pushes to it from the App Services
console.</p>
<p>To download the sample app and view the tutorial, see Tutorial: Push
notifications sample app.</p>
<p>When you create notifiers to run the samples, creating them in the
default &#8220;sandbox&#8221; app in your Usergrid organization will make it easier
to try out the feature. The sandbox app doesn&#8217;t require authentication.</p>
</div>
<div class="section" id="troubleshooting">
<h2>Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permalink to this headline"></a></h2>
<div class="section" id="android-phonegap">
<h3>Android / PhoneGap<a class="headerlink" href="#android-phonegap" title="Permalink to this headline"></a></h3>
<p>App fails to install on the emulator When using the emulator, be sure to
note the setup steps in the requirements section.</p>
<p>Sometimes installation fails while the emulator is still being launched.
Wait until the emulator is up and running (so that you can unlock and
interact with the UI), then run the project again.</p>
<p>Make sure that the order of your Java Build Path matches the order shown
in Tutorial: Push notifications sample app.</p>
<div class="section" id="push-errors">
<h4>Push errors<a class="headerlink" href="#push-errors" title="Permalink to this headline"></a></h4>
<p>If pressing the button to send yourself a push throws an exception or
doesn&#8217;t respond:</p>
<p>Make sure the emulator&#8217;s target matches the Google API version used in
the project.</p>
<p>In the IDE log, wait until you see that the device has been registered
before sending yourself a push. Sometimes waiting for the code to run
and trying another click gets the push message to you.</p>
<p>If you successfully send yourself a push message once but fail to again,
try one of the following:</p>
<p>Go to the apps list on the device and launch the app from there.</p>
<p>Uninstall the app from the device, delete the device in the App Services
console, and run the project again.</p>
</div>
<div class="section" id="mismatchsenderid-error-message-from-the-server-when-it-tries-to-send-a-message-to-your-app">
<h4>MismatchSenderId error message from the server when it tries to send a message to your app.<a class="headerlink" href="#mismatchsenderid-error-message-from-the-server-when-it-tries-to-send-a-message-to-your-app" title="Permalink to this headline"></a></h4>
<p>The sender ID is a number you send to GCM from app code when registering
with GCM for notifications. The error might be occurring because the
sender ID with which your app is registering at GCM for notifications
does not correlate to the API project whose API key was used to create
your App Services notifier. First, confirm the following:</p>
<ul class="simple">
<li>The sender ID in your app code (used when registering with GCM) is
the same as your Goole API project number.</li>
<li>The API key used to create your App Services notifier is the same as
the API key in your Google API project.</li>
<li>The notifier name used in your app code is the same as for the
notifier you created in App Services.</li>
</ul>
<p>It can be possible to make a fix (such as by correcting the sender ID in
your app code) and still see this error. If you&#8217;re still seeing the
error, consider create a new API project and App Services notifier, then
use their new values in your code:</p>
<ol class="arabic simple">
<li>Recreate (or create anew) the Google API project. This will generate
a new API key and project number. See Registering with a notification
service.</li>
<li>Create a new App Services notifier for GCM using the API key you
generated with the new API project. See Creating notifiers.</li>
<li>Use the new notifier name in your code, along with a new sender ID
that is that same value as the Google API project number.</li>
</ol>
</div>
<div class="section" id="invalid-sender-error-message">
<h4>INVALID_SENDER error message<a class="headerlink" href="#invalid-sender-error-message" title="Permalink to this headline"></a></h4>
<p>The sender ID is a number you send to GCM from app code when registering
with GCM for notifications. The &#8220;sender&#8221; in this case is the Google API
project you created to send notification messages. Confirm that the
sender ID you&#8217;re using in code is the same value as the API project
number generated when you created your Google API project. See
Registering with a notification service.</p>
</div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="getting-started.html" class="btn btn-neutral float-right" title="Getting started with push notifications" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="overview.html" class="btn btn-neutral" title="Push notifications overview" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2013-2015, Apache Usergrid.
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT:'../',
VERSION:'1.0',
COLLAPSE_INDEX:false,
FILE_SUFFIX:'.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/js/theme.js"></script>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.StickyNav.enable();
});
</script>
</body>
</html>