com.parse

## Class PushService

- java.lang.Object
- - android.content.Context
  - - android.content.ContextWrapper
    - - android.app.Service
      - - com.parse.PushService

All Implemented Interfaces:
  ComponentCallbacks, ComponentCallbacks2

    public final class PushService
    extends Service

A service to listen for push notifications. This operates in the same process as the parent application.

The `PushService` can listen to pushes from two different sources: Google Cloud Messaging (GCM) or Parse's own push network. Parse will inspect your application's manifest at runtime and determine which service to use for push. We recommend using GCM for push on devices that have Google Play Store support. Parse uses its own push network for apps that want to avoid a dependency on the Google Play Store, and for devices (like Kindles) which do not have Play Store support.

To configure the `PushService` for GCM, ensure these permission declarations are present in your AndroidManifest.xml as children of the `<manifest>` element:

     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
     <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
     <permission android:name="YOUR_PACKAGE_NAME.permission.C2D_MESSAGE"
       android:protectionLevel="signature" />
     <uses-permission android:name="YOUR_PACKAGE_NAME.permission.C2D_MESSAGE" />

Replace YOUR_PACKAGE_NAME in the declarations above with your application's package name. Also, make sure that com.parse.GcmBroadcastReceiver and com.parse.PushService are declared as children of the `<application>` element:

     <service android:name="com.parse.PushService" />
     <receiver android:name="com.parse.GcmBroadcastReceiver"
      android:permission="com.google.android.c2dm.permission.SEND">
       <intent-filter>
         <action android:name="com.google.android.c2dm.intent.RECEIVE" />
         <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
         <category android:name="YOUR_PACKAGE_NAME" />
       </intent-filter>
     </receiver>

Again, replace YOUR_PACKAGE_NAME with your application's package name.

To configure the PushService for Parse's push network, ensure these permission declarations are present in your AndroidManifest.xml as children of the `<manifest>` element:

     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-permission android:name="android.permission.WAKE_LOCK" />

Also, make sure that `PushService` and `ParsePushBroadcastReceiver` are declared as children of the `<application>` element:

     <service android:name="com.parse.PushService" />
     <receiver android:name="com.parse.ParsePushBroadcastReceiver" android:exported=false>
      <intent-filter>
         <action android:name="com.parse.push.intent.RECEIVE" />
         <action android:name="com.parse.push.intent.OPEN" />
         <action android:name="com.parse.push.intent.DELETE" />
       </intent-filter>
     </receiver>

Note that you can configure the push service for both GCM and Parse's network by adding all the declarations above to your application's manifest. In this case, Parse will use GCM on devices with Play Store support and fall back to using Parse's network on devices without Play Store support. If you want to customize the way your app generates Notifications for your pushes, you can register a custom subclass of `ParsePushBroadcastReceiver`.

Once push notifications are configured in the manifest, you can subscribe to a push channel by calling:

     ParsePush.subscribeInBackground("the_channel_name");

When the client receives a push message, a notification will appear in the system tray. When the user taps the notification, it will broadcast the "com.parse.push.intent.OPEN" intent. The `ParsePushBroadcastReceiver` listens to this intent to track an app open event and launch the app's launcher activity. To customize this behavior override `ParsePushBroadcastReceiver.onPushOpen(Context, Intent)`.

### Field Summary

### Fields inherited from class android.app.Service

`START_CONTINUATION_MASK, START_FLAG_REDELIVERY, START_FLAG_RETRY, START_NOT_STICKY, START_REDELIVER_INTENT, START_STICKY, START_STICKY_COMPATIBILITY`

### Fields inherited from class android.content.Context

`ACCESSIBILITY_SERVICE, ACCOUNT_SERVICE, ACTIVITY_SERVICE, ALARM_SERVICE, APP_OPS_SERVICE, APPWIDGET_SERVICE, AUDIO_SERVICE, BATTERY_SERVICE, BIND_ABOVE_CLIENT, BIND_ADJUST_WITH_ACTIVITY, BIND_ALLOW_OOM_MANAGEMENT, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_IMPORTANT, BIND_NOT_FOREGROUND, BIND_WAIVE_PRIORITY, BLUETOOTH_SERVICE, CAMERA_SERVICE, CAPTIONING_SERVICE, CLIPBOARD_SERVICE, CONNECTIVITY_SERVICE, CONSUMER_IR_SERVICE, CONTEXT_IGNORE_SECURITY, CONTEXT_INCLUDE_CODE, CONTEXT_RESTRICTED, DEVICE_POLICY_SERVICE, DISPLAY_SERVICE, DOWNLOAD_SERVICE, DROPBOX_SERVICE, INPUT_METHOD_SERVICE, INPUT_SERVICE, JOB_SCHEDULER_SERVICE, KEYGUARD_SERVICE, LAUNCHER_APPS_SERVICE, LAYOUT_INFLATER_SERVICE, LOCATION_SERVICE, MEDIA_PROJECTION_SERVICE, MEDIA_ROUTER_SERVICE, MEDIA_SESSION_SERVICE, MODE_APPEND, MODE_ENABLE_WRITE_AHEAD_LOGGING, MODE_MULTI_PROCESS, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, NFC_SERVICE, NOTIFICATION_SERVICE, NSD_SERVICE, POWER_SERVICE, PRINT_SERVICE, RESTRICTIONS_SERVICE, SEARCH_SERVICE, SENSOR_SERVICE, STORAGE_SERVICE, TELECOM_SERVICE, TELEPHONY_SERVICE, TELEPHONY_SUBSCRIPTION_SERVICE, TEXT_SERVICES_MANAGER_SERVICE, TV_INPUT_SERVICE, UI_MODE_SERVICE, USAGE_STATS_SERVICE, USB_SERVICE, USER_SERVICE, VIBRATOR_SERVICE, WALLPAPER_SERVICE, WIFI_P2P_SERVICE, WIFI_SERVICE, WINDOW_SERVICE`

### Fields inherited from interface android.content.ComponentCallbacks2

`TRIM_MEMORY_BACKGROUND, TRIM_MEMORY_COMPLETE, TRIM_MEMORY_MODERATE, TRIM_MEMORY_RUNNING_CRITICAL, TRIM_MEMORY_RUNNING_LOW, TRIM_MEMORY_RUNNING_MODERATE, TRIM_MEMORY_UI_HIDDEN`

### Constructor Summary

Constructors
Constructor and Description
`PushService()` Client code should not construct a PushService directly.

### Method Summary

Methods
`IBinder` `onBind(Intent intent)` Client code should not call `onBind` directly.
`void` `onCreate()` Client code should not call `onCreate` directly.
`void` `onDestroy()` Client code should not call `onDestroy` directly.
`int` `onStartCommand(Intent intent, int flags, int startId)` Client code should not call `onStartCommand` directly.

### Methods inherited from class android.app.Service

`dump, getApplication, onConfigurationChanged, onLowMemory, onRebind, onStart, onTaskRemoved, onTrimMemory, onUnbind, startForeground, stopForeground, stopSelf, stopSelf, stopSelfResult`

### Methods inherited from class android.content.ContextWrapper

`attachBaseContext, bindService, checkCallingOrSelfPermission, checkCallingOrSelfUriPermission, checkCallingPermission, checkCallingUriPermission, checkPermission, checkUriPermission, checkUriPermission, clearWallpaper, createConfigurationContext, createDisplayContext, createPackageContext, databaseList, deleteDatabase, deleteFile, enforceCallingOrSelfPermission, enforceCallingOrSelfUriPermission, enforceCallingPermission, enforceCallingUriPermission, enforcePermission, enforceUriPermission, enforceUriPermission, fileList, getApplicationContext, getApplicationInfo, getAssets, getBaseContext, getCacheDir, getClassLoader, getCodeCacheDir, getContentResolver, getDatabasePath, getDir, getExternalCacheDir, getExternalCacheDirs, getExternalFilesDir, getExternalFilesDirs, getExternalMediaDirs, getFilesDir, getFileStreamPath, getMainLooper, getNoBackupFilesDir, getObbDir, getObbDirs, getPackageCodePath, getPackageManager, getPackageName, getPackageResourcePath, getResources, getSharedPreferences, getSystemService, getTheme, getWallpaper, getWallpaperDesiredMinimumHeight, getWallpaperDesiredMinimumWidth, grantUriPermission, isRestricted, openFileInput, openFileOutput, openOrCreateDatabase, openOrCreateDatabase, peekWallpaper, registerReceiver, registerReceiver, removeStickyBroadcast, removeStickyBroadcastAsUser, revokeUriPermission, sendBroadcast, sendBroadcast, sendBroadcastAsUser, sendBroadcastAsUser, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcastAsUser, sendStickyBroadcast, sendStickyBroadcastAsUser, sendStickyOrderedBroadcast, sendStickyOrderedBroadcastAsUser, setTheme, setWallpaper, setWallpaper, startActivities, startActivities, startActivity, startActivity, startInstrumentation, startIntentSender, startIntentSender, startService, stopService, unbindService, unregisterReceiver`

### Methods inherited from class android.content.Context

`getDrawable, getString, getString, getText, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, registerComponentCallbacks, unregisterComponentCallbacks`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### PushService

    public PushService()

Client code should not construct a PushService directly.

### Method Detail

#### onCreate

    public void onCreate()

Client code should not call `onCreate` directly.

Overrides:
  `onCreate` in class `Service`

#### onStartCommand

    public int onStartCommand(Intent intent,
                     int flags,
                     int startId)

Client code should not call `onStartCommand` directly.

Overrides:
  `onStartCommand` in class `Service`

#### onBind

    public IBinder onBind(Intent intent)

Client code should not call `onBind` directly.

Specified by:
  `onBind` in class `Service`

#### onDestroy

    public void onDestroy()

Client code should not call `onDestroy` directly.

Overrides:
  `onDestroy` in class `Service`