
## Overview
---
Silent push is a hidden notification that is delivered to the app. It does not cause any interaction with the user like a typical push. Silent notifications quietly deliver a certain set of data to the app so you may use it to notify that new content is available or inform about changes in the content. This kind of campaign does not affect your UI.

Within the silent push campaign, the SDK provides features such as remote sign out or acquiring location by using a silent push command. Read more in the [SDK Commands](#sdk-commands) section.

## Configuration
---
Silent push campaign is served by push notifications. See:
- [Configuring push notifications - Android](/developers/mobile-sdk/configuring-push-notifications/android)
- [Configuring push notifications - iOS](/developers/mobile-sdk/configuring-push-notifications/ios)
- [Configuring push notifications - React Native](/developers/mobile-sdk/configuring-push-notifications/react-native)
- [Configuring push notifications - Flutter](/developers/mobile-sdk/configuring-push-notifications/flutter)

Additionally, check possible available configuration options in the [Settings](/developers/mobile-sdk/settings#notifications).

## Checking custom notification payloads
---
The silent push campaign is designed to send notifications with your own payload and in this case should not be passed to the SDK. However, the campaign allows sending any data in payload including [SDK commands](#sdk-commands). Then, the notification must be handled correctly. You may use the samples below.


<div class="content-tabs code-tabs" data-tab-group="tabgrp-26">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-26-0" data-tab-group="tabgrp-26" data-tab-active="true">Java</button><button class="tab-button" data-tab-id="tabgrp-26-1" data-tab-group="tabgrp-26">Swift</button><button class="tab-button" data-tab-id="tabgrp-26-2" data-tab-group="tabgrp-26">JavaScript</button></div>

<div class="tab-panel" data-tab-id="tabgrp-26-0" data-tab-group="tabgrp-26" data-tab-active="true">

```Java
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
  super.onMessageReceived(remoteMessage);

  Map<String, String> data = remoteMessage.getData();
  if (Injector.isSynerisePush(data)) {
    if (Injector.isSilentCommand(data)) {
      try {
        SilentCommand silentCommand = Injector.getSilentCommand(data);
        <<your logic here>>
      } catch (ValidationException e) {
        e.printStackTrace(); 
      }
    }
  } else {
    <<notification is not from Synerise>>
  }
}
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-26-1" data-tab-group="tabgrp-26">

```Swift
extension NotificationService: UNUserNotificationCenterDelegate {
  func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    let userInfo = notification.userInfo

    let isSyneriseNotification: Bool = Synerise.isSyneriseNotification(userInfo)
    if (isSyneriseNotification == true) {
      let isSyneriseSilentCommand: Bool = Synerise.isSyneriseSilentCommand(userInfo)
      if isSyneriseSilentCommand {
        <<your logic here>>
      }
    } else {
      <<notification is not from Synerise>>
    }

    completionHandler(.alert)
  }
}
```

</div>

<div class="tab-panel" data-tab-id="tabgrp-26-2" data-tab-group="tabgrp-26">

```JavaScript
Synerise.onReady(function() {
  onNotification: function(payload, actionIdentifier) {
    let isSyneriseNotification = Synerise.Notifications.isSyneriseNotification(payload);
    if (isSyneriseNotification == true) {
      let isSyneriseSilentCommand = Synerise.Notifications.isSilentCommand(payload);
      if (isSyneriseSilentCommand == true) {
        <<your logic here>>
      } else {
        <<notification is not from Synerise>>
      }
    }
  }
});
```

</div>
</div>



## Payload 
---
<br/>

<div class="content-tabs" data-tab-group="tabgrp-27">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-27-0" data-tab-group="tabgrp-27" data-tab-active="true">Android</button><button class="tab-button" data-tab-id="tabgrp-27-1" data-tab-group="tabgrp-27">iOS</button></div>

<div class="tab-panel" data-tab-id="tabgrp-27-0" data-tab-group="tabgrp-27" data-tab-active="true">

<pre><code class="language-json">{
  "data": {
    &lt;&lt;campaign content&gt;&gt;
  }
}</code></pre>

</div>

<div class="tab-panel" data-tab-id="tabgrp-27-1" data-tab-group="tabgrp-27">

<pre><code class="language-json">{
  "aps": {
    "content-available": 1
  },
  &lt;&lt;campaign content&gt;&gt;
}</code></pre>

</div>
</div>


## SDK Commands
---

### SIGN_OUT {id=sdk-commands-sign-out}

<div class="content-tabs" data-tab-group="tabgrp-28">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-28-0" data-tab-group="tabgrp-28" data-tab-active="true">Android</button><button class="tab-button" data-tab-id="tabgrp-28-1" data-tab-group="tabgrp-28">iOS</button></div>

<div class="tab-panel" data-tab-id="tabgrp-28-0" data-tab-group="tabgrp-28" data-tab-active="true">

<pre><code class="language-json">{
  "data": {
    "issuer": "Synerise",
    "message-type": "dynamic-content",
    "content-type": "silent-sdk-command",
    "content": {
      "class_name": "com.synerise.sdk.injector.Injector",
      "method_name": "SIGN_OUT",
      "method_parameters": []
    }
  }
}</code></pre>

</div>

<div class="tab-panel" data-tab-id="tabgrp-28-1" data-tab-group="tabgrp-28">

<pre><code class="language-json">{
  "aps": {
    "content-available": 1
  },
  "issuer": "Synerise",
  "message-type": "dynamic-content",
  "content-type": "silent-sdk-command",
  "content": {
    "class_name": "com.synerise.sdk.injector.Injector",
    "method_name": "SIGN_OUT",
    "method_parameters": []
  }
}</code></pre>

</div>
</div>


### GET_LOCATION {id=sdk-commands-get-location}

<div class="content-tabs" data-tab-group="tabgrp-29">
<div class="tab-buttons"><button class="tab-button" data-tab-id="tabgrp-29-0" data-tab-group="tabgrp-29" data-tab-active="true">Android</button><button class="tab-button" data-tab-id="tabgrp-29-1" data-tab-group="tabgrp-29">iOS</button></div>

<div class="tab-panel" data-tab-id="tabgrp-29-0" data-tab-group="tabgrp-29" data-tab-active="true">

<pre><code class="language-json">{
  "data": {
    "issuer": "Synerise",
    "message-type": "dynamic-content",
    "content-type": "silent-sdk-command",
    "content": {
      "class_name": "com.synerise.sdk.injector.Injector",
      "method_name": "GET_LOCATION",
      "method_parameters": []
    }
  }
}</code></pre>

</div>

<div class="tab-panel" data-tab-id="tabgrp-29-1" data-tab-group="tabgrp-29">

<pre><code class="language-json">{
  "aps": {
    "content-available": 1
  },
  "issuer": "Synerise",
  "message-type": "dynamic-content",
  "content-type": "silent-sdk-command",
  "content": {
    "class_name": "com.synerise.sdk.injector.Injector",
    "method_name": "GET_LOCATION",
    "method_parameters": []
  }
}</code></pre>

</div>
</div>


