blob: d98441a7519754b02c05b8ef0c7b126254a929bd [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>Creating and managing notifications &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="Troubleshooting" href="troubleshooting.html"/>
<link rel="prev" title="Managing users and devices" href="managing-users-and-devices.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"><a class="reference internal" href="adding-push-support.html">Adding push notifications support</a></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 current"><a class="current reference internal" href="">Creating and managing notifications</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#creating-notifications">Creating notifications</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#creating-notificastions-with-curl">Creating notificastions with cURL</a><ul>
<li class="toctree-l4"><a class="reference internal" href="#targeting-a-single-device">Targeting a single device</a></li>
<li class="toctree-l4"><a class="reference internal" href="#targeting-all-devices">Targeting all devices</a></li>
<li class="toctree-l4"><a class="reference internal" href="#targeting-a-single-user">Targeting a single user</a></li>
<li class="toctree-l4"><a class="reference internal" href="#targeting-a-group">Targeting a group</a></li>
<li class="toctree-l4"><a class="reference internal" href="#targeting-users-by-location">Targeting users by location</a></li>
<li class="toctree-l4"><a class="reference internal" href="#request-parameters">Request Parameters</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="#creating-notificastions-with-admin-portal">Creating notificastions with Admin portal</a></li>
<li class="toctree-l3"><a class="reference internal" href="#creating-notificastions-with-ios">Creating notificastions with iOS</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#scheduling-notifications">Scheduling notifications</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#curl">cURL</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#targeting-multiple-notifiers-or-messages">Targeting multiple notifiers or messages</a></li>
<li class="toctree-l2"><a class="reference internal" href="#setting-a-notification-expiration">Setting a notification expiration</a></li>
<li class="toctree-l2"><a class="reference internal" href="#getting-notifications">Getting notifications</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id1">cURL</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#canceling-sent-notifications">Canceling sent notifications</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#admin-portal">Admin portal</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#deleting-unsent-notifications">Deleting unsent notifications</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#deleting-unsent-notifications-with-curl">Deleting unsent notifications with cURL</a></li>
<li class="toctree-l3"><a class="reference internal" href="#deleting-unsent-notifications-with-admin-portal">Deleting unsent notifications with Admin Portal</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#getting-receipts">Getting receipts</a></li>
<li class="toctree-l2"><a class="reference internal" href="#notification-endpoints">Notification endpoints</a></li>
</ul>
</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>Creating and managing notifications</li>
<li class="wy-breadcrumbs-aside">
<a href="../_sources/push-notifications/creating-and-managing-notifications.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="creating-and-managing-notifications">
<h1>Creating and managing notifications<a class="headerlink" href="#creating-and-managing-notifications" title="Permalink to this headline"></a></h1>
<p>This topic provides information on setting up and sending push
notifications with the Usergrid API backend as a service (BaaS). For
high-level information, prerequisites, and tutorials, see <a class="reference external" href="overview.html">Push
notifications overview</a>.</p>
<div class="admonition note"> <p class="first admonition-title"><p>Note</p>
</p> <p class="last">
Although not shown in many of the API examples below, you need to<p>provide a valid access token with each API call. See <a class="reference external" href="../security-and-auth/authenticating-users-and-application-clients.html">Authenticating
users and application
clients</a>
for details.</p>
</p></div>
<div class="admonition note"> <p class="first admonition-title"><p>Note</p>
</p> <p class="last">
For an overview of how to set up push notifications, including<p>troubleshooting tips, see <a class="reference external" href="adding-push-support.html">Adding push notifications
support</a>.</p>
</p></div><div class="section" id="creating-notifications">
<h2>Creating notifications<a class="headerlink" href="#creating-notifications" title="Permalink to this headline"></a></h2>
<p>When you create a notification, it is scheduled to be delivered to all
applicable devices immediately unless the deliver property has been set.
A notification may contain multiple messages (payloads), and each
payload must be associated with a notifier in order to deliver that
message to the associated app. This allows a single notification to be
delivered to multiple apps across various services, and is useful if you
want to send messages to multiple notifiers, such as development and
production versions of both Apple and Google simultaneously.</p>
<p>Notification can be created via POST request to the BaaS API, or in the
admin portal:</p>
<div class="section" id="creating-notificastions-with-curl">
<h3>Creating notificastions with cURL<a class="headerlink" href="#creating-notificastions-with-curl" title="Permalink to this headline"></a></h3>
<div class="section" id="targeting-a-single-device">
<h4>Targeting a single device<a class="headerlink" href="#targeting-a-single-device" title="Permalink to this headline"></a></h4>
<p>This request will target a specific device entity.</p>
<p>Request Syntax</p>
<div class="highlight-python"><div class="highlight"><pre>curl -X POST https://api.usergrid.com/&lt;org&gt;/&lt;app&gt;/devices/&lt;device_ID&gt;/notifications -d &#39;{&quot;payloads&quot;:{&lt;notifier&gt;:&lt;message&gt;}}&#39;
</pre></div>
</div>
</div>
<div class="section" id="targeting-all-devices">
<h4>Targeting all devices<a class="headerlink" href="#targeting-all-devices" title="Permalink to this headline"></a></h4>
<p>This request will target all device entities.</p>
<p>Request Syntax</p>
<div class="highlight-python"><div class="highlight"><pre>curl -X POST https://api.usergrid.com/&lt;org&gt;/&lt;app&gt;/devices/*/notifications -d &#39;{&quot;payloads&quot;:{&lt;notifier&gt;:&lt;message&gt;}}&#39;
</pre></div>
</div>
</div>
<div class="section" id="targeting-a-single-user">
<h4>Targeting a single user<a class="headerlink" href="#targeting-a-single-user" title="Permalink to this headline"></a></h4>
<p>This request will target a specific user entity.</p>
<p>Request Syntax</p>
<div class="highlight-python"><div class="highlight"><pre>curl -X POST https://api.usergrid.com/&lt;org&gt;/&lt;app&gt;/users/&lt;username&gt;/notifications -d &#39;{&quot;payloads&quot;:{&lt;notifier&gt;:&lt;message&gt;}}&#39;
</pre></div>
</div>
</div>
<div class="section" id="targeting-a-group">
<h4>Targeting a group<a class="headerlink" href="#targeting-a-group" title="Permalink to this headline"></a></h4>
<p>This request will target all users associated with a specific group
entity.</p>
<p>Request Syntax</p>
<div class="highlight-python"><div class="highlight"><pre>curl -X POST https://api.usergrid.com/&lt;org&gt;/&lt;app&gt;/groups/&lt;group_path&gt;/notifications -d &#39;{&quot;payloads&quot;:{&lt;notifier&gt;:&lt;message&gt;}}&#39;
</pre></div>
</div>
</div>
<div class="section" id="targeting-users-by-location">
<h4>Targeting users by location<a class="headerlink" href="#targeting-users-by-location" title="Permalink to this headline"></a></h4>
<p>This request will target all device entities that are within a set
radius of a latitude/longitude coordinate.</p>
<p>Request Syntax</p>
<div class="highlight-python"><div class="highlight"><pre>curl -X POST https://api.usergrid.com/&lt;org&gt;/&lt;app&gt;/devices;ql=location within &lt;radius&gt; of &lt;lat&gt;,&lt;long&gt;/notifications -d &#39;{&quot;payloads&quot;:{&lt;notifier&gt;:&lt;message&gt;}}&#39;
</pre></div>
</div>
</div>
<div class="section" id="request-parameters">
<h4>Request Parameters<a class="headerlink" href="#request-parameters" title="Permalink to this headline"></a></h4>
<p>The following parameters can be specified when targeting push
notifications.</p>
<p>Base URL</p>
<p>These parameters are used in forming the base URL of the request:</p>
<table border="1" class="docutils">
<colgroup>
<col width="24%" />
<col width="76%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Parameter</th>
<th class="head">Description</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>org</td>
<td>Organization UUID or organization name</td>
</tr>
<tr class="row-odd"><td>app</td>
<td>Application UUID or application name</td>
</tr>
</tbody>
</table>
<p>Notification</p>
<p>These parameters are used when forming the notification portion of the
request:</p>
<table border="1" class="docutils">
<colgroup>
<col width="7%" />
<col width="93%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Parameter</th>
<th class="head">Description</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>notifier</td>
<td>The <code class="docutils literal"><span class="pre">notifier</span></code> entity you wish to associate with the notification (see <a class="reference external" href="creating-notifiers.html">Creating notifiers</a> for information on creating notifiers)</td>
</tr>
<tr class="row-odd"><td>message</td>
<td>The push notification message that will be delivered to the user</td>
</tr>
</tbody>
</table>
<p><strong>Note</strong>: If your message contains double-quotes (&#8220;&#8221;) you must escape
them with a backslash</p>
<p>Targets</p>
<p>These parameters are used when specifying the notification target in the
request.</p>
<table border="1" class="docutils">
<colgroup>
<col width="21%" />
<col width="79%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">Parameter</th>
<th class="head">Description</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>device</td>
<td>UUID of a device entity.</td>
</tr>
<tr class="row-odd"><td>user</td>
<td>UUID or username of a user entity.</td>
</tr>
<tr class="row-even"><td>phone_type</td>
<td>Specified in a appended query string. The type property of a device entity.</td>
</tr>
<tr class="row-odd"><td>group</td>
<td>UUID or name of the group entity.</td>
</tr>
<tr class="row-even"><td>latitude, longitude, radius</td>
<td>Specified in a appended query string. The radius in meters of a user device from a latitude/longitude coordinate.</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="section" id="creating-notificastions-with-admin-portal">
<h3>Creating notificastions with Admin portal<a class="headerlink" href="#creating-notificastions-with-admin-portal" title="Permalink to this headline"></a></h3>
<p>To create the new notification with the admin portal, do the following:</p>
<ol class="arabic simple">
<li>Log in to the admin portal.</li>
<li>In the left nav, click <strong>Push &gt; Send Notification</strong>.</li>
<li>From the <strong>Notifier</strong> drop-down, select the appropriate notifier.</li>
<li>Under the notifier name, select one of the following to specify where
your notification message should go:</li>
</ol>
<ul class="simple">
<li><strong>All Devices</strong> to have the message sent to all devices.</li>
<li><strong>Devices</strong> to have the message sent to a particular subset of
devices. Enter a comma-separated list of device UUIDs in the box
provided.</li>
<li><strong>Users</strong> to have the message sent to a particular subset of users.
Enter a comma-separated list of username values in the box provided.</li>
<li><strong>Groups</strong> to have the message sent to a particular subset of user
groups. Enter a comma-separated list of group paths in the box
provided.</li>
</ul>
<ol class="arabic simple" start="5">
<li>In the <strong>Notifier Message</strong> field, enter the message (payload) you
want delivered.</li>
<li>If double-quotes are included in your message, you must escape them
with a backslash. 7, Under <strong>Delivery</strong>, select one of the following
to specify when the notification should be delivered:</li>
</ol>
<ul class="simple">
<li><strong>Now</strong> to have the message delivered immediately.</li>
<li>Schedule for later to choose a date and time at which the message
should be delivered.</li>
</ul>
<ol class="arabic simple" start="7">
<li>Click <strong>Submit</strong>.</li>
</ol>
<p>To create a notification to send multiple messages or target multiple
platforms, see the cURL syntax for creating notifications.</p>
</div>
<div class="section" id="creating-notificastions-with-ios">
<h3>Creating notificastions with iOS<a class="headerlink" href="#creating-notificastions-with-ios" title="Permalink to this headline"></a></h3>
<p>To send notifications from iOS app code, you use the
11ApigeeAPSDestination11 and <code class="docutils literal"><span class="pre">ApigeeAPSPayload</span></code> classes.</p>
<p>With <code class="docutils literal"><span class="pre">ApigeeAPSDestination</span></code>, you specify where the notification should
go (a particular user or device or user group, for example). With
<code class="docutils literal"><span class="pre">ApigeeAPSPayload</span></code>, you specify the contents of the message, including
any alert text, sound, or badge (items specified by Apple as allowable
notification content types). You then use <code class="docutils literal"><span class="pre">ApigeeDataClient</span></code> to send
the message via Apigee and Apple APNs.</p>
<p>The following code illustrates how to send a notification to a single
user. Though this is the device on which the app itself is installed,
you can imagine how you might send a notification to another device,
such as one belonging to someone &#8220;following&#8221; this user. For more, see
the iOS push sample application included with the <a class="reference external" href="../sdks/tbd.html">Apigee iOS
SDK</a>.</p>
<div class="highlight-python"><div class="highlight"><pre>- (void)sendMyselfAPushNotification:(NSString *)message
completionHandler:(ApigeeDataClientCompletionHandler)completionHandler
{
// send to a single device -- our own device
NSString *deviceId = [ApigeeDataClient getUniqueDeviceID];
ApigeeAPSDestination* destination =
[ApigeeAPSDestination destinationSingleDevice:deviceId];
// set our APS payload
ApigeeAPSPayload* apsPayload = [[ApigeeAPSPayload alloc] init];
apsPayload.sound = kBundledSoundNameWithExt;
apsPayload.alertText = message;
// Example of what a custom payload might look like -- remember that
// APNS payloads are limited to a maximum of 256 bytes (for the entire
// payload -- including the &#39;aps&#39; part)
NSMutableDictionary* customPayload = [[NSMutableDictionary alloc] init];
[customPayload setValue:@&quot;72&quot; forKey:@&quot;degrees&quot;];
[customPayload setValue:@&quot;3&quot; forKey:@&quot;newOrders&quot;];
__weak AppDelegate* weakSelf = self;
// send the push notification
[dataClient pushAlert:apsPayload
customPayload:customPayload
destination:destination
usingNotifier:notifier
completionHandler:^(ApigeeClientResponse *response) {
if ( ! [response completedSuccessfully]) {
[weakSelf alert:response.rawResponse
title: @&quot;Error&quot;];
}
if (completionHandler) {
completionHandler(response);
}
}];
}
</pre></div>
</div>
</div>
</div>
<div class="section" id="scheduling-notifications">
<h2>Scheduling notifications<a class="headerlink" href="#scheduling-notifications" title="Permalink to this headline"></a></h2>
<div class="section" id="curl">
<h3>cURL<a class="headerlink" href="#curl" title="Permalink to this headline"></a></h3>
<p>To schedule a notification for a later time, add the deliver parameter
with a UNIX timestamp to the body of your request.</p>
<p>Request body syntax</p>
<div class="highlight-python"><div class="highlight"><pre><span class="s">&#39;{&quot;deliver&quot;:&lt;unix_timestamp&gt;,&quot;payloads&quot;:{&lt;notifier&gt;:&lt;message&gt;}}&#39;</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="targeting-multiple-notifiers-or-messages">
<h2>Targeting multiple notifiers or messages<a class="headerlink" href="#targeting-multiple-notifiers-or-messages" title="Permalink to this headline"></a></h2>
<p>To send multiple messages or target multiple platforms with a single
notification entity, include multiple notifier-message pairs as a
comma-separated list in the payloads object of the request body:</p>
<p>Request body syntax</p>
<div class="highlight-python"><div class="highlight"><pre><span class="s">&#39;{&quot;payloads&quot;:{&lt;notifier&gt;:&lt;message&gt;, &lt;notifier&gt;:&lt;message&gt;, ...}}&#39;</span>
</pre></div>
</div>
</div>
<div class="section" id="setting-a-notification-expiration">
<h2>Setting a notification expiration<a class="headerlink" href="#setting-a-notification-expiration" title="Permalink to this headline"></a></h2>
<p>If a push service can&#8217;t deliver a message to a device and needs to
resend it (for example, if the device is turned off), you can set a
notification to expire after a certain date/time.</p>
<p>To do this, adding the expire parameter with a UNIX timestamp to your
request body. This specifies when the service should stop trying to send
the notification.</p>
<div class="admonition warning"> <p class="first admonition-title"><p>Warning</p>
</p> <p class="last">
Please note that if the expire property is not set and Apple APNS or<p>Google GCM are not able to immediately deliver your push notification,
delivery will not be retried. This means your notification will not be
delivered. As a best practice, you should always set an expire timestamp
to ensure your notification is delivered in the event the delivery
initially fails.</p>
</p></div><p>Request body syntax</p>
<div class="highlight-python"><div class="highlight"><pre><span class="s">&#39;{&quot;expire&quot;:&lt;unix_timestamp&gt;,&quot;payloads&quot;:{&quot;&lt;notifier_name&gt;&quot;:&quot;&lt;message&gt;&quot;}}&#39;</span>
</pre></div>
</div>
<p>NOTE: The timestamp is a UNIX timestamp and is specified in seconds.</p>
</div>
<div class="section" id="getting-notifications">
<h2>Getting notifications<a class="headerlink" href="#getting-notifications" title="Permalink to this headline"></a></h2>
<div class="section" id="id1">
<h3>cURL<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h3>
<p>The following are endpoints can be used to get notifications. For
details on the notification properties you can get, see Notifier,
Receipt, and Notification.</p>
<p>Getting one or more notifications:</p>
<div class="highlight-python"><div class="highlight"><pre>/notifications
</pre></div>
</div>
<p>Getting notifications associated with one or more receipts:</p>
<div class="highlight-python"><div class="highlight"><pre>/receipts/*/notification
</pre></div>
</div>
<p>Getting the list of devices associated with one or more notifications
before the notifications are sent:</p>
<div class="highlight-python"><div class="highlight"><pre>/notifications/*/queue
</pre></div>
</div>
</div>
</div>
<div class="section" id="canceling-sent-notifications">
<h2>Canceling sent notifications<a class="headerlink" href="#canceling-sent-notifications" title="Permalink to this headline"></a></h2>
<p>You can cancel a notification that&#8217;s already in progress by doing the
following:</p>
<div class="highlight-python"><div class="highlight"><pre>curl -X PUT &quot;https://api.usergrid.com/my-org/sandbox/notifications/&lt;notification-uuid&gt;&quot; -d &#39;{&quot;canceled&quot;: true}&#39;
</pre></div>
</div>
<div class="section" id="admin-portal">
<h3>Admin portal<a class="headerlink" href="#admin-portal" title="Permalink to this headline"></a></h3>
<p>You can view JSON for notifications by viewing their entity entries in
the Data section of your application.</p>
<p>In the admin portal, click Data, then click the <strong>/notifications</strong>
collection. You can also view notification data in the message history.</p>
<p>In the admin portal, click Push, then click Message History. Locate the
notification for which you want to view data, then click its view
details link.</p>
</div>
</div>
<div class="section" id="deleting-unsent-notifications">
<h2>Deleting unsent notifications<a class="headerlink" href="#deleting-unsent-notifications" title="Permalink to this headline"></a></h2>
<div class="section" id="deleting-unsent-notifications-with-curl">
<h3>Deleting unsent notifications with cURL<a class="headerlink" href="#deleting-unsent-notifications-with-curl" title="Permalink to this headline"></a></h3>
<div class="highlight-python"><div class="highlight"><pre>curl -X DELETE &quot;https://api.usergrid.com/&lt;you-org&gt;/&lt;app&gt;/notifications/&lt;notification-uuid&gt;&quot;
</pre></div>
</div>
</div>
<div class="section" id="deleting-unsent-notifications-with-admin-portal">
<h3>Deleting unsent notifications with Admin Portal<a class="headerlink" href="#deleting-unsent-notifications-with-admin-portal" title="Permalink to this headline"></a></h3>
<ol class="arabic simple">
<li>In the admin portal, click Push, then Message History.</li>
<li>On the Message History page, click Scheduled.</li>
<li>In the list of scheduled messages, locate the message you want to
delete.</li>
<li>In the top area of the message item, click the delete link.</li>
</ol>
</div>
</div>
<div class="section" id="getting-receipts">
<h2>Getting receipts<a class="headerlink" href="#getting-receipts" title="Permalink to this headline"></a></h2>
<p>After sending a notification, the BaaS generates a receipt entity that
contains details about the notification. Receipts show details such as
timestamps, payloads sent, and the receipt endpoints.</p>
<p>For information about what&#8217;s contained in a receipt, see
<a class="reference external" href="..//rest-endpoints/api-docs.html#notifier">Notifier</a>,
<a class="reference external" href="..//rest-endpoints/api-docs.html#receipt">Receipt</a>, and
<a class="reference external" href="..//rest-endpoints/api-docs.html#notification">Notification</a>. Use
the following endpoints to get receipts.</p>
<p>To get one or more receipts:</p>
<div class="highlight-python"><div class="highlight"><pre>/receipts
</pre></div>
</div>
<p>To get receipts associated with one or more devices:</p>
<div class="highlight-python"><div class="highlight"><pre>/devices/*/receipts
</pre></div>
</div>
<p>To get receipts for one or more notifications. For example, get receipts
for notifications that had errors.</p>
<div class="highlight-python"><div class="highlight"><pre>/notifications/*/receipts
</pre></div>
</div>
</div>
<div class="section" id="notification-endpoints">
<h2>Notification endpoints<a class="headerlink" href="#notification-endpoints" title="Permalink to this headline"></a></h2>
<p>The <code class="docutils literal"><span class="pre">/notifications</span></code> endpoints let you create, schedule, cancel, and
delete notifications. You can also use the following endpoints to
accomplish the same actions for specific groups, users, devices, or any
combination thereof.</p>
<p>Base URL: <code class="docutils literal"><span class="pre">https://api.usergrid.com/my-org/my-app</span></code></p>
<div class="highlight-python"><div class="highlight"><pre>/groups/*/notifications
/groups/*/users/*/notifications
/groups/*/users/*/devices/*/notifications
/users/*/notifications
/users/*/devices/*/notifications
/devices/*/notifications
</pre></div>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="troubleshooting.html" class="btn btn-neutral float-right" title="Troubleshooting" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="managing-users-and-devices.html" class="btn btn-neutral" title="Managing users and devices" 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>